{"id":21285563,"url":"https://github.com/takeyuweb/rack-ketai","last_synced_at":"2025-07-11T11:32:29.264Z","repository":{"id":607134,"uuid":"244123","full_name":"takeyuweb/rack-ketai","owner":"takeyuweb","description":"携帯電話向けサイトの構築に便利な諸機能を追加するための、Rackミドルウェア","archived":false,"fork":false,"pushed_at":"2020-06-25T00:37:34.000Z","size":227,"stargazers_count":38,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-04-19T09:46:17.944Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"ssrl/gon","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/takeyuweb.png","metadata":{"files":{"readme":"README.rdoc","changelog":null,"contributing":null,"funding":null,"license":"MIT-LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-07-06T08:09:56.000Z","updated_at":"2020-08-22T17:03:03.000Z","dependencies_parsed_at":"2022-07-05T03:01:36.530Z","dependency_job_id":null,"html_url":"https://github.com/takeyuweb/rack-ketai","commit_stats":null,"previous_names":[],"tags_count":9,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Frack-ketai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Frack-ketai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Frack-ketai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/takeyuweb%2Frack-ketai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/takeyuweb","download_url":"https://codeload.github.com/takeyuweb/rack-ketai/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225717334,"owners_count":17513155,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-21T11:21:08.777Z","updated_at":"2024-11-21T11:21:09.367Z","avatar_url":"https://github.com/takeyuweb.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"= rack-ketai: A Rack Middleware for Japanese mobile-phones\n\n== rack-ketaiとは\n携帯電話向けサイトを構築する際に役立ちそうな機能を提供する（ことが目標の）Rackミドルウェアです。が、jpmobileがRails以外でも使えるようになったので、そっちを使った方がきっとよいです。\n\n* 携帯電話キャリア判別\n* 端末名の取得\n* ユーザID、端末IDの取得\n* GPSによる位置情報の取得\n* ディスプレイ情報（サイズ、色数）の取得\n* Cookie使用の可否\n* キャッシュサイズの取得\n* IPアドレス帯域の正当性チェック\n* 入出力文字コード変換（DoCoMo、auのみ）\n* 絵文字キャリア間変換\n* PCでの絵文字表示（TypePadの絵文字使用）\n\nテスト環境もまともにないので、万年αテスト中です。自己責任で、よくテストを行ってご利用下さい。\n\n== 使えそうなRubyのバージョン\n適当テストを通ったバージョンです。\n\nCRuby 1.8.5, 1.8.6, 1.8.7, 1.9.1, 1.9.2, 1.9.3\n\nJRuby 1.4.0\n\n== 使用例\n\n=== Rails 3.0\nconfig/application.rb\n  module Example\n    class Application \u003c Rails::Application\n      \n      # 省略\n\n      config.middleware.use \"::Rack::Ketai\"\n    end\n  end\n\napp/controllers/example_controller.rb\n  class ExampleController \u003c ApplicationController\n    def index\n      render :text =\u003e (request.env['rack.ketai'].mobile? ? \"mobile\" : \"PC\")\n    end\n  end\n\n=== Sinatra\n  require 'rubygems'\n  require 'sinatra'\n\n  require 'rack/ketai'\n  use Rack::Ketai\n\n  get '/' do\n    case request.env['rack.ketai']\n    when Rack::Ketai::Carrier::Docomo\n      \"こんにちは、DoCoMo世界！\"\n    when Rack::Ketai::Carrier::Au\n      \"こんにちは、Au世界！\"\n    when Rack::Ketai::Carrier::Softbank\n      \"こんにちは、Softbank世界！\"\n    else\n      \"こんにちは、その他の世界！\"\n    end\n  end\n\n単に携帯電話でのアクセスか識別するのであれば、\u003ctt\u003e#mobile?\u003c/tt\u003eを使います。\n  env['rack.ketai'].mobile?\n\n互換性のため、携帯電話からのアクセスでないときには、特異メソッド\u003ctt\u003e#mobile? =\u003e false\u003c/tt\u003eを定義した\u003ctt\u003enil\u003c/tt\u003eが設定されます。\n\n=== 端末名の取得\n  env['rack.ketai'].name # =\u003e \"SO903i\"\n\n=== ユーザID、端末IDの取得\n各キャリアの利用者の識別に関する情報の扱いを一元化します。\nこれにより、携帯サイトでのユーザ認証等が容易になります。（後述のIPアドレス帯域チェックと併用すること）\n  ketai = env['rack.ketai']\n  ketai.subscriberid  # ユーザID：iモードID or FOMAカード製造番号/EZ番号/x-jphone-uid\n  ketai.deviceid      # 端末ID：端末製造番号(DoCoMo)/端末シリアル(SoftbankMobile)\n  ketai.ident         # ユーザか端末を識別する情報（ユーザID or 端末製造番号）\n\n=== GPSによる位置情報の取得\n位置情報取得の為のリクエストは各自で行って下さい。\n\n  # 位置情報が送られていない\n  env['rack.ketai'].position # =\u003e nil\n\n  # 位置情報を取得\n  position = env['rack.ketai'].position # =\u003e #\u003cRack::Ketai::Position:0xb76bf6a4 @lng=135.693222222222, @lat=35.0098888888889\u003e\n  position.lat # =\u003e 35.0098888888889\n  position.lng # =\u003e 135.693222222222\n  # 測地系を指定（世界測地系から日本測地系に変換した値を返します）\n  position.lat(:wgs84)   # =\u003e 35.0098888888889\n  position.lng(:wgs84)   # =\u003e 135.693222222222\n  position.lat(:tokyo97) # =\u003e 35.0066762382277\n  position.lng(:tokyo97) # =\u003e 135.696079543154\n  # おまけ 度分秒単位で取得\n  Rack::Ketai::Position.d2dms(position.lat) # =\u003e [35, 0, 35.35]\n\n測地系の変換には、Yoji Shidara氏が公開しているjpmobileい含まれるdatum_conv.rbを、MIT Licenseに従って利用しています。\n\n=== ディスプレイ情報の取得\n環境変数もしくは http://ke-tai.org/ で公開されている携帯端末スペック一覧のデータから縦横ピクセル数及び色数を取得できます。\n  ketai = env['rack.ketai']\n  display = ketai.display\n  display.colors # 色数 取得できなければ nil\n  display.width  # 横サイズ 取得できなければ nil\n  display.height # 縦サイズ 取得できなければ nil\n\n=== Cookie使用の可否\nDoCoMoの場合はiモードブラウザ2.0、SoftBankは現行の全機種、auも全機種（WAP1.0端末はSSL通信時利用不可）っぽいのでそれを判別してくれます。（できるだけ...）\n  if env['rack.ketai'].supports_cookie?\n    # Cookie 使用可能\n  else\n    # Cookie 使用不可\n  end\n\n=== キャッシュサイズの取得\n環境変数や端末名からブラウザのキャッシュサイズ（Bytes）を取得します。取得できない場合は、それっぽい最小の値を返します。\n  env['rack.ketai'].cache_size # =\u003e 100000 (100KB)\n\n=== IPアドレス帯域の正当性チェック\nユーザのアクセス元のIPアドレスがキャリアが公開するアドレス帯に含まれているか確認できます。\nユーザID等の偽装防止等に役立ちます。\n  ketai = env['rack.ketai']\n  unless ketai.mobile? \u0026\u0026 ketai.valid_addr?\n    # 携帯からのアクセスでない\n  end\n\n=== 入出力文字コード変換\nDoCoMoまたはauの携帯電話との通信でShift_JISを使うようになります。\nContent-typeも便宜書き換えます。\n\n=== 絵文字キャリア間変換\n入力された絵文字を、emoji4unicodeによる変換テーブルを元に [e:XXX] という文字列に置き換えます。\n（XXX はemoji4unicodeによる絵文字のID）\n文字列に置き換えるようにしたのは、PCからの絵文字の入力・表示への対応を容易にするためです。\n出力時にキャリアに応じた絵文字コードに変換します。\n\nなお、文字コード変換及び絵文字変換を行いたくない場合は、\u003ctt\u003e:disable_filter\u003c/tt\u003eオプションを設定します。\n  use Rack::Ketai, :disable_filter =\u003e true\n\n=== PCでの絵文字表示\nSixApartが公開している絵文字アイコン画像を別途ダウンロード・配置し、簡単なコードを追加することで携帯キャリア以外でのアクセスの際に絵文字画像を表示できます。\n\nTypePadの絵文字アイコン画像と、携帯コンテンツ表示モジュールをフリー（自由）ライセンスで公開\nhttp://start.typepad.jp/typecast/\n\n絵文字アイコンをダウンロードし、public/images/emoticons/*.gif に配置した場合の例\n  use Rack::Static, :urls =\u003e ['/images'], :root =\u003e 'public'\n  use Rack::Ketai, :emoticons_path =\u003e '/images/emoticons'\n  run MyApp.new\n\n=== UA判定\n\n  if env['rack.ketai'].smartphone?\n    # スマートフォン\n  elsif env['rack.ketai'].featurephone?\n    # フィーチャーフォン\n  elsif env['rack.ketai'].tablet?\n    # タブレット（Android or iPad）\n  else\n    # その他PCなど\n  end\n\nまたは\n\n  case env['rack.ketai']\n  when Rack::Ketai::Carrier::IPhone\n    # iPhone\n  when Rack::Ketai::Carrier::Android\n    # Android\n  end\n\nmobile?は携帯端末かどうかの判定になりました。（タブレットも一応携帯端末扱いとしてます）\n\n端末名の取得などは未実装です。また、#valid_addr?は常に偽です。\n\n=== 作者\n\nCopyright 2009-2010 (c) Yuichi Takeuchi, under MIT License\n\nYuichi Takeuchi \u003cmizincogrammer@gmail.com\u003e\n\nhttp://d.hatena.ne.jp/mizincogrammer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakeyuweb%2Frack-ketai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftakeyuweb%2Frack-ketai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftakeyuweb%2Frack-ketai/lists"}