Skip to content

携帯電話向けサイトの構築に便利な諸機能を追加するための、Rackミドルウェア

License

Notifications You must be signed in to change notification settings

kyanagi/rack-ketai

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rack-ketai: A Rack Middleware for Japanese mobile-phones

rack-ketaiとは

携帯電話向けサイトを構築する際に役立ちそうな機能を提供する(ことが目標の)ミドルウェアです。

  • 携帯電話キャリア判別

  • 端末名の取得

  • ユーザID、端末IDの取得

  • ディスプレイ情報(サイズ、色数)の取得

  • Cookie使用の可否

  • キャッシュサイズの取得

  • IPアドレス帯域の正当性チェック

  • 入出力文字コード変換(DoCoMo、auのみ)

  • 絵文字キャリア間変換

  • PCでの絵文字表示(TypePadの絵文字使用)

テスト環境もまともにないので、万年αテスト中です。自己責任で、よくテストを行ってご利用下さい。

使えそうなRubyのバージョン

適当テストを通ったバージョンです。

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"

ユーザID、端末IDの取得

各キャリアの利用者の識別に関する情報の扱いを一元化します。これにより、携帯サイトでのユーザ認証等が容易になります。(後述の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アドレス帯域の正当性チェック

ユーザのアクセス元の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

PCでの絵文字表示

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]>

d.hatena.ne.jp/mizincogrammer

About

携帯電話向けサイトの構築に便利な諸機能を追加するための、Rackミドルウェア

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%