言及 (2013-08-05)
読了まで:約2分
概要: と
これは何?
- ある
IP アドレスが - 日本の
携帯キャリアの IP アドレスか どうかを 判定する ための - Go 言語用の
ライブラリ
なぜ作ったか
- しばらく
前から、 Go 言語で 2ch 互換掲示板作れないかと 画策してた
- んで、
実際に 2ch の トリップを 求める ライブラリは 作った → <https://github.com/nyarlabo/go-ch2trip https://github.com/nyarlabo/go-ch2trip>
- よろしい、
次は 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>
とりあえず以上
よかったら
あんまり
#FIXME