以前、携帯振り分けについてそのうち書くと書いておきながらそのままになってました。
昨日、携帯表示用プログラムをMT4iに変更して振り分けコードを直した時に思い出したので今日はそれを書いておきます。
携帯電話でのアクセスかPCでのアクセスか、はたまた他の端末からのアクセスかはブラウザがはき出す変数の一種であるUserAgentを見ればブラウザのバージョンなどが取得できます。
もちろん、この値はいくらでも自称可能なので商業サービスだとかで完全なチェックをしたい場合にはもっときちんとやるべきですが、個人ブログを携帯からのアクセスの時だけ携帯用ページで表示する程度の用途ならUAのチェックだけで全然十分です。
今回利用するMT4iには、MovableTypeの以下のアーカイブに相当するモードがあります。
- インデックスページ
- 個別エントリのページ
- カテゴリアーカイブ
日別アーカイブや月別アーカイブに相当するページは搭載されていないので、対応する振り分け先がありません。
ですから、これらのアーカイブに携帯電話でアクセスされた場合にはインデックスページに飛ばす事とします。
インデックスページ、個別エントリ、カテゴリページへ携帯電話でアクセスされた場合には対応するページへ誘導できます。
これらの処理をすることによって携帯電話でGoogle検索してブログにたどり着いた場合に、きちんと対応するエントリの携帯用ページが表示されるようになりユーザの利便性が向上します。
具体的なコードです。
まず、MTのテンプレート・モジュールから以下の名前の三つのテンプレートを作成します。
携帯振り分けインデックス
<?php $link = "Location: http://インストール先のURL/mt4i.cgi"; $ua = $_SERVER["HTTP_USER_AGENT"]; if(ereg("DoCoMo",$ua)){ header($link);exit; } elseif(ereg("J-PHONE",$ua)){ header($link);exit; } elseif(ereg("Vodafone",$ua)){ header($link);exit; } elseif(ereg("SoftBank",$ua)){ header($link);exit; } elseif(ereg("MOT-",$ua)){ header($link);exit; } elseif(ereg("KDDI",$ua)){ header($link);exit; } elseif(ereg("UP\.Browser",$ua)){ header($link);exit; } elseif(ereg("PDXGW",$ua)){ header($link);exit; } elseif(ereg("DDIPOCKET",$ua)){ header($link);exit; } elseif(ereg("WILLCOM",$ua)){ header($link);exit; } elseif(ereg("Google Wireless Transcoder",$ua)){ header($link);exit; } ?>
携帯振り分け個別エントリ
<?php $link = "Location: http://インストール先のURL/mt4i.cgi?id=1&mode=individual&eid=<$MTEntryID$>"; $ua = $_SERVER["HTTP_USER_AGENT"]; if(ereg("DoCoMo",$ua)){ header($link);exit; } elseif(ereg("J-PHONE",$ua)){ header($link);exit; } elseif(ereg("Vodafone",$ua)){ header($link);exit; } elseif(ereg("SoftBank",$ua)){ header($link);exit; } elseif(ereg("MOT-",$ua)){ header($link);exit; } elseif(ereg("KDDI",$ua)){ header($link);exit; } elseif(ereg("UP\.Browser",$ua)){ header($link);exit; } elseif(ereg("PDXGW",$ua)){ header($link);exit; } elseif(ereg("DDIPOCKET",$ua)){ header($link);exit; } elseif(ereg("WILLCOM",$ua)){ header($link);exit; } elseif(ereg("Google Wireless Transcoder",$ua)){ header($link);exit; } ?>
携帯振り分けカテゴリ
<?php $link = "Location: http://インストール先のURL/mt4i.cgi?cat=<$MTCategoryID$>&id=1"; $ua = $_SERVER["HTTP_USER_AGENT"]; if(ereg("DoCoMo",$ua)){ header($link);exit; } elseif(ereg("J-PHONE",$ua)){ header($link);exit; } elseif(ereg("Vodafone",$ua)){ header($link);exit; } elseif(ereg("SoftBank",$ua)){ header($link);exit; } elseif(ereg("MOT-",$ua)){ header($link);exit; } elseif(ereg("KDDI",$ua)){ header($link);exit; } elseif(ereg("UP\.Browser",$ua)){ header($link);exit; } elseif(ereg("PDXGW",$ua)){ header($link);exit; } elseif(ereg("DDIPOCKET",$ua)){ header($link);exit; } elseif(ereg("WILLCOM",$ua)){ header($link);exit; } elseif(ereg("Google Wireless Transcoder",$ua)){ header($link);exit; } ?>
インストール先のURLの部分はMT4iのインストールされているパスに書き換えてください。
プログラム1行目でlink変数にジャンプ先のURLを格納しています。
インデックスページの場合はMT4iのCGIを直接呼び出すだけです。
カテゴリアーカイブ、個別エントリへのジャンプの時にはカテゴリID、エントリIDを渡して呼び出しています。
2行目以降は完全にコードが共通しています。
上から順番にUserAgentがドコモか、Jフォンか、ボーダフォンか…(略)…ウィルコムかって感じでチェックし、もしヒットしたらlink変数に格納したURLへとジャンプしています。
ドコモ以外の携帯では結構UAにバリエーションがあったりしますね。
そして、実際にテンプレートにこれらのモジュールを組み込みます。
インデックス・テンプレート - メインページ<$MTInclude module="携帯振り分けインデックス"$>アーカイブ・テンプレート - エントリー・アーカイブ
<$MTInclude module="携帯振り分け個別エントリ"$>アーカイブ・テンプレート - カテゴリー・アーカイブ
<$MTInclude module="携帯振り分けカテゴリ"$>
テンプレートの一番最初の部分に(<!DOCTYPE の前)にこれらのコードを追加します。
こうする事でテンプレートの内容がブラウザに渡され表示される前に携帯振り分けのPHPプログラムが実行され、携帯でのアクセスの場合はジャンプ、それ以外の場合は何もしないでテンプレートの内容を表示します。
対応するジャンプ先のない日別アーカイブ・月別アーカイブではメインページと同じコードを挿入することで携帯用ページのインデックスにジャンプします。
これだけの処理で携帯電話からのアクセスをMT4iの対応する携帯用ページに振り分けることが可能です。
同じようにUserAgentにWiiが含まれていればWiiのインターネットチャンネル用ページに飛ばす…ってことも可能です。
文章が読みにくいですが、参考になるでしょうか?
Comments and Trackbacks