Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

antipop をモバイルフォン対応してみた

僕も晴れて携帯電話ユーザになったんで、ちょっとそこら辺もどうにかしようかなってんでこのぶろっぎを携帯電話っていうかそういったアレっていうか mobile phpne に対応した…かも。

モバイルフォンに対応する手段には、例えばそれ用のテンプレートを作るとか、そもそも「携帯電話なんかで読ませるかよ!」とアクセスを禁じるとか、はたまたなんにもしないとか、まぁいろいろあるかと思いますが、今回は MT4i というぷるぐらむをお借りして対処してみることにしました。

MT4iは、(MovableTypeAPIを利用して)MovableTypeのデータベースからデータを直接読み込み、文字コードShift_JISに変換、携帯電話向けにレイアウトして出力します。

[talk to oneself 2:About MT4i]

というわけで、いろいろ便利なものであるようです! 携帯電話のことはよくわからんので、なんのことかあんまりわかりません…。

んで、問題はどうやってモバイルフォンからのアクセスを上記 CGI へ誘導するかということで、これにもいくつか手段があって、例えばモバイルフォン用の URI をあらかじめ周知するとか(面倒くさい)、ブログトップページの URI(http://antipop.zapto.org/mt/) の DirectoryIndex に指定されてるファイルにブラウザ判別コードだけ書いてそれぞれ違う方向にとばすとか、mod_rewrite でリクエストを書き変えるとか、はたまたなんにもしないとか等あるわけですが、もともとこのブログの各ページは PHP を用いてちょっとしたあれこれをやってるので、PHP でふりわけることにしました。ほんとは mod_rewrite とか使う方がいいような気がするけど…。

んで、テケトウなブラウザ判別クラスでも書こうかと思ったけどその前に PEAR を漁ってみたら Net_UserAgent_Mobile なんつっていかにもそれっぽいパッケージがあったので、ありがたく使わせていだだくことに。

antipop の場合は、Main Index テンプレートの最初のあたりに以下を追記。激しくテケトウですが、とりあえず DoCoMo P505iS ではうまくいったっぽいです。他の機種ましてやキャリアのことなんか知りません。ははは。

require_once('Net/UserAgent/Mobile.php');

$agent = &Net_UserAgent_Mobile::singleton($_SERVER['HTTP_USER_AGENT']);
if (!$agent->isNonMobile()) {
  header("Location: http://antipop.zapto.org/mt/mt4i.cgi");
  exit();
}

しかしなんか僕の持ってる DoCoMo P505iS だと、普通にアクセスするとページ上部に HTTP ヘッダが表示されてしまう…。なんで? 「#順列都市」の面々にあれこれ見てもらったところ、N503iS だとまったくなんにも表示されないようです…(これは、MT4i の問題ではなく、location でぶっとばすのがマズい気がする)。直ったような気がする。

ていうかまぁ、どうせ僕自身は携帯電話で Web 巡回とかしないんで、こんなもんでいいです! おしまし!

「au じゃ見られないよ」といわれたので(MT4i のせいではなく、おそらくはリダイレクトのせいで)、とりあえず DoCoMo 端末のみモバイルパゲにとばすようにしました。その他の端末をお使いの方は http://antipop.zapto.org/mt/mt4i.cgi に直接アクセスするか、あるいはそのままで…。

ていうか、そもそも HTTP ヘッダが出てないよ? という指摘を受け、さらに見直してみたところ、どうも mod_perl が原因だったみたい? ちゃんと検証してないのでわかりませんが、とりあえず mod_perl から mt4i.cgi をはずしたら、まともに動くようになったっぽい。

というわけで、DoCoMo 端末以外も含む、携帯電話と思われる端末全部を mt4i.cgi に飛ばすように変更しました。