概要: というのを作りました。
これは何?
- ある IP アドレスが
- 日本の携帯キャリアの IP アドレスかどうかを判定するための
- Go 言語用のライブラリ
なぜ作ったか
- しばらく前から、Go 言語で 2ch 互換掲示板作れないかと画策してた
- よろしい、次は ID だ! となって作業を開始した
- しかしながら ID 生成のアルゴリズムがわからんとなった
- で、これはゼロちゃんねるプラスのソースみて解決した
- そしたら、モバイルキャリア判別とかあるけど、Go 言語にそんなのない
- 以上の理由により、よろしい、ならば作成だ! となった
- だいたいそんな感じ
使い方
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>
小ネタ集
- ソースコード内の
source.go
は、実は Perl スクリプトで生成してる
- リポジトリ内の
mksrc.pl
がソレ - 自分で IP 範囲調べて云々は面倒なので Perl で書いた。反省はしない(キリ
- ちなみにスクレイパーには
WWW::MobileCarrierJP
使ってる
- あと
WWW::MobileCarrierJP
のパッチを tokuhirom さんに pull-req とかした
- rt.cpan.org で issue 立てたら patches welcome ;)と言われたので(ry
- あと色々わからんことがあったけどなんとかなった
- あと今回の件と関係ない live tests がこけてたような気がするけど見てないふりしてる
- それと
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