September 01, 2008

モバイルサイトマップの追加 と MT4iの改造

僕の携帯には電話が滅多にかかってこないどころか、メールもほとんど全くこない(せいぜい2日に1通ペースのでメールが来たことすら気づかないことが多い)と、携帯的には圏外な生活をしています。ところが、近頃携帯でブラウザをする頻度が多くなってきました。電車に乗っているちょっとした時間に『はてな』でブックマークコメントを流し読みしたり、アキバにて過去の自分の行動をこのサイトのモバイル版で遡ったりする(特に過去の回路図とかパーツ情報)のが結構多くなりました。そういうわけで、このサイトのモバイル版も使いやすくしようという気になり、2つほど作業をしてみました。なおモバイル版は、MT4iというMovableTypeのデータベースを直接叩いて携帯向けHTMLを生成してくれるcgiを有難く使わせていただいています。

まず一つ目はGoogle先生からモバイルの記事も検索対象になるように、モバイル版のサイトマップを仕込んでみることにしました。方法はGoogle先生のサイトにあるとおりのXMLを作成、登録すればよいのですが、このサイトを生成してくれているMovableTypeにテンプレートを足すことでモバイル版サイトマップも自動生成しようと思います。

MovableType 2.661では管理画面を開いて[Templateの編集]で『新しいインデックステンプレートを作る』を選択、テンプレートの名前、出力ファイル名、自動的に再構築、リンクするファイルをそれぞれ Google Mobile SiteMap、sitemap_mobile.xml、チェック有、空欄にし、テンプレートの中身を以下のようにしました。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0">
<url>
<loc><$MTBlogURL encode_xml="1"$>cgi/mt4i/mt4i.cgi</loc>
<mobile:mobile />
</url>
<MTEntries lastn="9999">
<url>
<loc><$MTBlogURL encode_xml="1"$>cgi/mt4i/mt4i.cgi?mode=individual&eid=<$MTEntryID$></loc>
<mobile:mobile/>
</url>
</MTEntries>
</urlset>

あとは保存、再構築でGoogleのウェブマスターツールからこのXMLのURLを登録すれば完了です。少しつまずいたのは、locタグのURLをXMLエンコード(アンド記号&などが使えない)しなければならないことでした。

もう一つ行った改造は、MT4iのリダイレクト機能についてです。MT4iではリンクが本文中に含まれていると、そのリンクのURLを修正しゲートウェイを通すことでPC向けサイトでも携帯で見られるようにする機能があります。外部のサイトなら勿論これで問題がないのですが、自身のサイトでもこの機能が働いてしまい、自身の携帯記事から自身のPC記事へ飛んでしまうのが不快でした。そこでこの機能を実現している部分のプログラムを書き換えことで、この問題を修正しました。MT4i.cgiを修正します。

MT4i.cgiの_conv_url_to_redirector関数(修正前、3553行目)
# Convert sorce URL to redirector
my $tmpurl = &make_href("redirect", $rowid, 0, 0, $eid);
# URL encode
$url = MT4i::Func::url_encode($url);
$url = $tmpurl . '&url=' . $url;

MT4i.cgiの_conv_url_to_redirector関数(修正後)
my $archive_url = $blog->archive_url;
if($url =~ /^$archive_url(\d{6})\.html/){
    $url = &make_href("individual", $rowid, 0, $1 + 0, 0);
}else{

    # Convert sorce URL to redirector
    my $tmpurl = &make_href("redirect", $rowid, 0, 0, $eid);
    # URL encode
    $url = MT4i::Func::url_encode($url);
    $url = $tmpurl . '&url=' . $url;
}

このサイトのPC記事は(アーカイブディレクトリ)/(6桁のID番号).htmlで保存されているので、その形式のリンクに突き当たった際は、PC記事のURLから携帯記事をURLを割り出すようにしました。PC記事の保存方法が異なる場合でも似たような方法がとれると思います。

今後もモバイル版ともどもよろしくお願いします。

※後になって、最近のコメントがうまく表示されない問題があることに気づきました。その場合は以下の修正を試みてください。

MT4i.cgiのget_comments関数の一部(修正前、1564行目付近)
$args{'limit'} = ((!$_[0] || $cfg{NonDispCat}) && $_[1])
    ? $_[1] * 10 # Limit for recent comment and non-display category specified.
    : ($_[1] && !$cfg{NonDispCat}) ? $_[1] : '';

MT4i.cgiの_conv_url_to_redirector関数の一部(修正後)
$args{'limit'} = $_[1] ? ($_[1] * ($cfg{NonDispCat} ? 10 : 1)) : '';

MT4i.cgiのget_comments関数の一部(修正前、1574行目付近)
if ($_[0] && !$cfg{NonDispCat}) {

MT4i.cgiの_conv_url_to_redirector関数の一部(修正後)
if (!$cfg{NonDispCat}) {

00:27 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/659
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。