カラクリスタ

「輝かしい青春」なんて失かった人のブログ

言及 (2013-08-05)

https://github.com/nyarlabo/go-cidr_mobilejpgo-cidr_mobilejp

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


これは何?

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

なぜ作ったか

  1. しばらく前から、Go 言語で 2ch 互換掲示板作れないかと画策してた

  2. んで、実際に 2ch のトリップを求めるライブラリは作った → <https://github.com/nyarlabo/go-ch2trip https://github.com/nyarlabo/go-ch2trip>

  3. よろしい、次は ID だ! となって作業を開始した

  4. しかしながら ID 生成のアルゴリズムがわからんとなった

  5. で、これはゼロちゃんねるプラスのソースみて解決した
  6. そしたら、モバイルキャリア判別とかあるけど、Go 言語にそんなのない

  7. 以上の理由により、よろしい、ならば作成だ! となった

  8. だいたいそんな感じ

使い方

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
}

細かいドキュメント等

小ネタ集

  1. ソースコード内のsource.goは、実は Perl スクリプトで生成してる

  2. リポジトリ内のmksrc.plがソレ

  3. 自分で IP 範囲調べて云々は面倒なので Perl で書いた。反省はしない(キリ
  4. ちなみにスクレイパーにはWWW::MobileCarrierJP使ってる

  5. あとWWW::MobileCarrierJPのパッチを tokuhirom さんに pull-req とかした

  6. rt.cpan.org で issue 立てたら patches welcome ;)と言われたので(ry

  7. あと色々わからんことがあったけどなんとかなった
  8. あと今回の件と関係ない live tests がこけてたような気がするけど見てないふりしてる

  9. それとsource.goでは、IP Range を precompile してる

  10. 最初は、func init()で IP Range を Parse するコードを書いてた

  11. けどそれって初期化に時間かかるんじゃね?
  12. → ということで生の構造体を生成するソースを書いた 詳しくは次を参照 → <https://github.com/nyarlabo/go-cidr_mobilejp/blob/master/source.go https://github.com/nyarlabo/go-cidr_mobilejp/blob/master/source.go>

とりあえず以上

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

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

FIXME