読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

言及

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


これは何?

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

なぜ作ったか

  1. しばらく前から、Go言語で2ch互換掲示板作れないかと画策してた
  2. んで、実際に2chのトリップを求めるライブラリは作った
  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. → ということで生の構造体を生成するソースを書いた

とりあえず以上

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

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