携帯電話向けサイトを構築する際に役立ちそうな機能を提供する(ことが目標の)ミドルウェアです。
-
携帯電話キャリア判別
-
端末名の取得
-
ユーザID、端末IDの取得
-
ディスプレイ情報(サイズ、色数)の取得
-
Cookie使用の可否
-
キャッシュサイズの取得
-
IPアドレス帯域の正当性チェック
-
入出力文字コード変換(DoCoMo、auのみ)
-
絵文字キャリア間変換
-
PCでの絵文字表示(TypePadの絵文字使用)
テスト環境もまともにないので、万年αテスト中です。自己責任で、よくテストを行ってご利用下さい。
適当テストを通ったバージョンです。
CRuby 1.8.5, 1.8.6, 1.8.7, 1.9.1
JRuby 1.4.0
require 'rubygems' require 'sinatra' require 'rack/ketai' use Rack::Ketai get '/' do case request.env['rack.ketai'] when Rack::Ketai::Carrier::Docomo "こんにちは、DoCoMo世界!" when Rack::Ketai::Carrier::Au "こんにちは、Au世界!" when Rack::Ketai::Carrier::Softbank "こんにちは、Softbank世界!" else "こんにちは、その他の世界!" end end
単に携帯電話でのアクセスか識別するのであれば、#mobile?
を使います。
env['rack.ketai'].mobile?
互換性のため、携帯電話からのアクセスでないときには、特異メソッド#mobile? => false
を定義したnil
が設定されます。
env['rack.ketai'].name # => "SO903i"
各キャリアの利用者の識別に関する情報の扱いを一元化します。これにより、携帯サイトでのユーザ認証等が容易になります。(後述のIPアドレス帯域チェックと併用すること)
ketai = env['rack.ketai'] ketai.subscriberid # ユーザID:iモードID or FOMAカード製造番号/EZ番号/x-jphone-uid ketai.deviceid # 端末ID:端末製造番号(DoCoMo)/端末シリアル(SoftbankMobile) ketai.ident # ユーザか端末を識別する情報(ユーザID or 端末製造番号)
環境変数もしくは ke-tai.org/ で公開されている携帯端末スペック一覧のデータから縦横ピクセル数及び色数を取得できます。
ketai = env['rack.ketai'] display = ketai.display display.colors # 色数 取得できなければ nil display.width # 横サイズ 取得できなければ nil display.height # 縦サイズ 取得できなければ nil
DoCoMoの場合はiモードブラウザ2.0、SoftBankは現行の全機種、auも全機種(WAP1.0端末はSSL通信時利用不可)っぽいのでそれを判別してくれます。(できるだけ…)
if env['rack.ketai'].supports_cookie? # Cookie 使用可能 else # Cookie 使用不可 end
環境変数や端末名からブラウザのキャッシュサイズ(Bytes)を取得します。取得できない場合は、それっぽい最小の値を返します。
env['rack.ketai'].cache_size # => 100000 (100KB)
ユーザのアクセス元のIPアドレスがキャリアが公開するアドレス帯に含まれているか確認できます。ユーザID等の偽装防止等に役立ちます。
ketai = env['rack.ketai'] unless ketai.mobile? && ketai.valid_addr? # 携帯からのアクセスでない end
DoCoMoまたはauの携帯電話との通信でShift_JISを使うようになります。Content-typeも便宜書き換えます。
入力された絵文字を、emoji4unicodeによる変換テーブルを元に [e:XXX] という文字列に置き換えます。(XXX はemoji4unicodeによる絵文字のID)文字列に置き換えるようにしたのは、PCからの絵文字の入力・表示への対応を容易にするためです。出力時にキャリアに応じた絵文字コードに変換します。
なお、文字コード変換及び絵文字変換を行いたくない場合は、:disable_filter
オプションを設定します。
use Rack::Ketai, :disable_filter => true
SixApartが公開している絵文字アイコン画像を別途ダウンロード・配置し、簡単なコードを追加することで携帯キャリア以外でのアクセスの際に絵文字画像を表示できます。
TypePadの絵文字アイコン画像と、携帯コンテンツ表示モジュールをフリー(自由)ライセンスで公開start.typepad.jp/typecast/
絵文字アイコンをダウンロードし、public/images/emoticons/*.gif に配置した場合の例
use Rack::Static, :urls => ['/images'], :root => 'public' use Rack::Ketai, :emoticons_path => '/images/emoticons' run MyApp.new
Copyright 2009-2010 © Yuichi Takeuchi, under MIT License
Yuichi Takeuchi <[email protected]>