PEAR::Net_UserAgent_Mobile を学習目的にコピってみた
お前の予定!はケータイ向けサイトの練習として作り始めたサイトです。
で、ケータイ向けのサイトを作ってみようと思ったけど、何が必要かわからないので、OpenPNEのソースを眺めてみた。携帯電話からのwebアクセスで「かんたんログイン」で使用する固有IDは各社まちまちで、UserAgentに入れてくるDoCoMo, SoftBank とhttp拡張ヘッダで渡してくるauがある。さらに2008/4/1からDoCoMoは iモードIDとかいう固有IDを提供することになった。
OpenPNEのやり方はシンプルで良いのだけれど、細切れになっていて把握しづらい。なのでPEARを参考にすることにした。パターンとかいうやつの勉強にもなりそうなのでこっちのほうが良さそうだ。
- PEAR::Net_UserAgent_Mobile
しかし、PEARのほうだと、いわゆる固有IDに対応するようなプロパティやメソッドが一貫して在るというわけではないので、携帯電話向けのwebサービスの作成時に必要になりそうなインタフェースを備えたクラスを作ってみようと考えた。
- シングルトン・パターン
- ファクトリメソッド・パターン
- 携帯の固有IDを取得する
- 携帯キャリアのGWからのアクセスか判定する
DoCoMoについては、一部仕様が変わった。こちらのページを参考に手を加えた。
使い方
<?php require_once('Keitai.class.php'); $ua =& Keitai::singleton(); // インスタンス生成 if ( !$ua->isError() ) { if ( !$ua->isValidIp() ) { die("携帯以外のGateWay シミュレータ等\n"); } if ( $ua->isNonMobile() ) { die("フルブラウザでのアクセスなど\n"); } /* * 固有IDの取得する無ければNULLを返す。 * DoCoMo : iモードIDがあればiモードIDが入る。なければシリアル番号。 * KDDI : サブスクライバ番号。 * SoftBank: シリアル番号。 */ $id = $ua->getKeitaiId(); if ( $ua->isDoCoMo() ) { $id = $ua->_serialId(); // これまでのシリアル番号には直接プロパティを触りにいく。(ダメだね) } } else { // パースエラー if ( PEAR::isError($ua) ) { die($ua->toString()."\n"); } else { die("Unknown error. Cannot parse your UserAgent.\n"); } } ?>