みずの日記

ボカロとかニコ動とか忘備録とか

携帯をIPベースで判定

最近よくCodeIgniterを使っているんだけど*1、結構おもしろい。
ZendFrameworkはあらかじめ用意されている部品が多くて、至れり尽くせりだけど重かった。*2
CIは軽いんだけどシンプルなので、必要になったら自分で作れって事らしい。*3

練習がてら*4にIP判定クラスを作ってみた。

MobileIP

http://miscast.org/files/mobileip.zip

上記ファイルをCIにぶち込んでください。

使い方は

$this->load->library('mobileip');
print $this->mobileip->get_remote_carrier();
if($this->mobileip->ismobile()){
  〜〜
}

で使えます。

当然、携帯だけでテストなんてやってられないので

$this->mobileip->set_remote_ip('202.229.176.199');

でRemoteIPを上書きしてテストできます。

Config説明

キャッシュフォルダ

// cache directory
$config['mobileip_cache_dir'] = '../system/cache/';

index.php から見た相対表記になります。
CIはユーザーにCacheを直接触ることを考慮してないらしく、
変数がなかったので追記してます。

// cache directory
$config['mobileip_cache_dir'] = BASEPATH . 'cache/';

index.php から見た相対表記になります。
BASEPATHは思いっきりあちこちに書いてありました・・・(..;)
IPリストの生成場所はキャッシュディレクトリにしてあります。

キャッシュファイル生成
// carrier URL
$config['mobileip_carrier_url']['au'] = 'http://www.au.kddi.com/ezfactory/tec/spec/ezsava_ip.html';
$config['mobileip_carrier_url']['docomo'] = 'http://www.nttdocomo.co.jp/service/imode/make/content/ip/';
$config['mobileip_carrier_url']['softbank'] = 'http://creation.mb.softbank.jp/web/web_ip.html';
$config['mobileip_carrier_url']['willcom'] = 'http://www.willcom-inc.com/ja/service/contents_service/create/center_info/';
$config['mobileip_carrier_url']['em'] = 'http://developer.emnet.ne.jp/ipaddress.html';

各キャリアのIP一覧が載ってるURLです。
上記URLからIPアドレス一覧を抜いてきて、キャッシュフォルダにIPリストを生成してます。
キャリアが増えたり減ったり、上記URLが変更になったときは書き換えてください。
書き換えた後は、キャッシュフォルダ内の ip_xxxx.txt を削除してください。
次回アクセス時に自動生成します。

キャリア名
// carrier name
$config['mobileip_carrier_name']['au'] = 'au';
$config['mobileip_carrier_name']['docomo'] = 'docomo';
$config['mobileip_carrier_name']['softbank'] = 'softbank';
$config['mobileip_carrier_name']['willcom'] = 'willcom';
$config['mobileip_carrier_name']['em'] = 'em';

$this->mobileip->get_remote_carrier();
したときに帰ってくる名前です。
Vodafone -> Softbank みたいに名前変わったときくらいしか使わないですけどね・・・。

キャッシュファイルの更新
// ip list reload time
$config['mobileip_reload_time'] = 60*60*24;

アクセス時にキャッシュファイルが上記以上古ければ、自動生成しなおします。
1日1回更新しておけば問題ないでしょう・・・きっと・・・。
IPの変更ってどれくらいの頻度で行われるんですかね?

所感

各キャリアによってIPアドレスの書き方が違うかと思ったけど

IP/マスク範囲

で統一されていたおかげで考えやすかった。
なぜかauだけはTABLE分けられていたので泥臭い方法で別処理。
1日で作ったんだからこんなモンだろう・・・。

たぶん使えると思うんですが、問題あったらコメントに残してもらえるとありがたいです。

*1:使い始めてまだ2ヶ月くらい

*2:Debugもやりづらかった

*3:と、勝手に思っているだけかもしれない。

*4:このはてな日記の投稿も練習