カラクリスタ

言及 (2013-08-05)

概要: というのを作りました。


これは何?

  1. ある IP アドレスが
  2. 日本の携帯キャリアの IP アドレスかどうかを判定するための
  3. Go 言語用のライブラリ

なぜ作ったか

  1. しばらく前から、Go 言語で 2ch 互換掲示板作れないかと画策してた
  • んで、実際に 2ch のトリップを求めるライブラリは作った → <https://github.com/nyarlabo/go-ch2trip https://github.com/nyarlabo/go-ch2trip>
  1. よろしい、次は ID だ! となって作業を開始した
  • しかしながら ID 生成のアルゴリズムがわからんとなった
  • で、これはゼロちゃんねるプラスのソースみて解決した
  • そしたら、モバイルキャリア判別とかあるけど、Go 言語にそんなのない
  1. 以上の理由により、よろしい、ならば作成だ! となった
  • だいたいそんな感じ

使い方

package main

import (
"fmt"
"net"
checker "github.com/nyarlabo/go-cidr_mobilejp"
)

func main() {
docomoIP := net.ParseIP(`210.153.84.5`)
isMobile, carrier := checker.IsMobile(docomoIP)

fmt.Println(isMobile) // true
fmt.Println( carrier == checker.DOCOMO ) // true
}

細かいドキュメント等

  • Github: <https://github.com/nyarlabo/go-cidr_mobilejp https://github.com/nyarlabo/go-cidr_mobilejp>
  • Godoc: <http://godoc.org/github.com/nyarlabo/go-cidr_mobilejp http://godoc.org/github.com/nyarlabo/go-cidr_mobilejp>

小ネタ集

  1. ソースコード内のsource.goは、実は Perl スクリプトで生成してる
  • リポジトリ内のmksrc.plがソレ
  • 自分で IP 範囲調べて云々は面倒なので Perl で書いた。反省はしない(キリ
  • ちなみにスクレイパーにはWWW::MobileCarrierJP使ってる
  1. あとWWW::MobileCarrierJPのパッチを tokuhirom さんに pull-req とかした
  • rt.cpan.org で issue 立てたら patches welcome ;)と言われたので(ry
  • あと色々わからんことがあったけどなんとかなった
  • あと今回の件と関係ない live tests がこけてたような気がするけど見てないふりしてる
  1. それとsource.goでは、IP Range を precompile してる
  • 最初は、func init()で IP Range を Parse するコードを書いてた
  • けどそれって初期化に時間かかるんじゃね?
  • → ということで生の構造体を生成するソースを書いた 詳しくは次を参照 → <https://github.com/nyarlabo/go-cidr_mobilejp/blob/master/source.go https://github.com/nyarlabo/go-cidr_mobilejp/blob/master/source.go>

とりあえず以上

よかったら使ってみてくらさい。

あんまり使い道思いつかんけど(w

#FIXME