のみまくし日記

毎日が文化祭の前日、そんな環境っていいですよね。この日記は未来の自分へのメッセージです。

2003年12月10日 ()

Sledge::MobileGate

Sledge::MobileGateという3キャリア対応(もどき)の仕組みをつくってみました。各キャリアから一般に公開されている情報だけで作るのが目的です。

Hookされる順番を気にしたくなかったので、これは、PluginではなくSledge::Pages::Base を継承していくつか機能を追加しています。こんな風に、Pagesクラスに定義します。

package Project::Pages;

use Sledge::MobileGate::Pages::Compat;
use Sledge::MobileGate::Charset;

sub create_charset {
    my $self = shift;

    return Sledge::MobileGate::Charset->new($self);
}

ちょと絵文字の処理がごちゃごちゃしていて、気にくわないけどとりあえず晒します。ご意見パッチ大歓迎でッス。

ちょっと試したかぎりでは、基本的に、テンプレートは1つで3キャリアで表示できました。絵文字の処理だけですね。ezのダウンロードなど特殊なもののみ、それようのテンプレート作って、自動的にテンプレートを変更しています。

機能としては以下のような感じ。

diapatch の追加

アクセス端末ごとに、(i|ez|j)_dipatch_page が存在した場合(post_)dispatch_PAGE の前に実行します。

絵文字の処理入力された絵文字は自動的に、i-mode の場合 &#*****;の形式に変換します。vodafone の絵文字は i-mode に類する絵文字があった場合は、対応する&#*****; という形に変換します。無かった場合は&#v[**]; という形式に変換します。

&#v[**]; という形式は、Sledge::MobileGate 独自の形式です。

FillInFormされる直前、入力されたデータを上記の形式からバイナリコードに戻します。

HTMLとして出力前に上記の形式から、アクセスしている、端末のエージェント判断して、バイナリコードに戻します。その、エージェントで対応する絵文字が存在しない場合は、削除されます。

テンプレート以下の優先順位で、各キャリアごとのテンプレートを検索し そのファイルがあれば、それを優先して使用。

  • ファイルの末尾($TMPL_PATH/$DIR/foo.html.ez)
  • ディレクトリ($TMPL_PATH/ez/$DIR/foo.html)
  • 通常($TMPL_PATH/$DIR/foo.html)

mobile メソッドの追加

mobile というメソッドを追加します。

idアクセス端末の端末固有ID(ez, vodafoneのみ)を返します。

$self->mobile->id;

agent

HTTP::MobileAgent manpage のオブジェクトを返します。

if ($self->mobile->agent->is_ezweb) {
 .....  
}

career

アクセス端末の キャリア(i, ez, jという文字列)返します。

$self->mobile->career;

download

各端末にあわせたダウンロードの処理を行います。 Content-Type は$self->r->uri の末尾が .mld .mmf .pmd .gif .jpg .qcp .pngの場合は自動的に正しい Content-Type を出力します。それ以外の拡張子の場合は "application/x-up-download"になります。

$self->mobile->download($content_data, [MIME_TYPE]);

Perl posted by takefumi | この日記へリンク | コメント(0) | トラックバック(0)

この日記へのトラックバック

この日記へのコメント