jpmobile 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +41 -4
- data/Rakefile +11 -9
- data/lib/jpmobile.rb +0 -6
- data/lib/jpmobile/emoticon.rb +105 -0
- data/lib/jpmobile/emoticon/au.rb +644 -0
- data/lib/jpmobile/emoticon/conversion_table.rb +3908 -0
- data/lib/jpmobile/emoticon/docomo.rb +255 -0
- data/lib/jpmobile/emoticon/softbank.rb +477 -0
- data/lib/jpmobile/emoticon/z_combine.rb +20 -0
- data/lib/jpmobile/filter.rb +73 -51
- data/lib/jpmobile/helpers.rb +4 -4
- data/lib/jpmobile/hook_abstract_request.rb +6 -2
- data/lib/jpmobile/hook_action_controller.rb +10 -0
- data/lib/jpmobile/hook_action_view.rb +7 -0
- data/lib/jpmobile/mobile/abstract_mobile.rb +5 -1
- data/lib/jpmobile/mobile/au.rb +1 -1
- data/lib/jpmobile/mobile/docomo.rb +2 -5
- data/lib/jpmobile/mobile/softbank.rb +9 -1
- data/lib/jpmobile/mobile/z_display_info_docomo.rb +32 -10
- data/lib/jpmobile/mobile/z_ip_addresses.rb +6 -6
- data/lib/jpmobile/mobile/z_ip_addresses_au.rb +2 -1
- data/lib/jpmobile/mobile/z_ip_addresses_willcom.rb +6 -1
- data/lib/jpmobile/trans_sid.rb +5 -2
- data/lib/jpmobile/version.rb +1 -1
- data/test/au_test.rb +1 -0
- data/test/docomo_test.rb +8 -0
- data/test/emoticon_functional_test.rb +166 -0
- data/test/emoticon_test.rb +58 -0
- data/test/filter_functional_test.rb +146 -0
- data/test/filter_test.rb +8 -8
- data/test/softbank_test.rb +18 -0
- data/tools/generate_au_emoticon_table.rb +25 -0
- data/tools/{update_emoji_docomo.rb → generate_docomo_emoticon_table.rb} +4 -8
- data/tools/generate_emoticon_conversion_table.rb +107 -0
- data/tools/generate_softbank_emoticon_table.rb +32 -0
- data/tools/update_display_info_docomo.rb +3 -5
- metadata +18 -75
- data/NOTES +0 -21
- data/TODO +0 -16
- data/doc/classes/ActionController.html +0 -107
- data/doc/classes/ActionController/AbstractRequest.html +0 -216
- data/doc/classes/ActionView.html +0 -101
- data/doc/classes/DatumConv.html +0 -324
- data/doc/classes/Jpmobile/Display.html +0 -333
- data/doc/classes/Jpmobile/Filter.html +0 -119
- data/doc/classes/Jpmobile/Filter/Base.html +0 -269
- data/doc/classes/Jpmobile/Filter/Emoji.html +0 -130
- data/doc/classes/Jpmobile/Filter/Emoji/Inner.html +0 -183
- data/doc/classes/Jpmobile/Filter/Emoji/Outer.html +0 -187
- data/doc/classes/Jpmobile/Filter/FilterTable.html +0 -178
- data/doc/classes/Jpmobile/Filter/HankakuKana.html +0 -170
- data/doc/classes/Jpmobile/Filter/Sjis.html +0 -244
- data/doc/classes/Jpmobile/Helpers.html +0 -558
- data/doc/classes/Jpmobile/Mobile.html +0 -141
- data/doc/classes/Jpmobile/Mobile/AbstractMobile.html +0 -324
- data/doc/classes/Jpmobile/Mobile/Au.html +0 -415
- data/doc/classes/Jpmobile/Mobile/Ddipocket.html +0 -138
- data/doc/classes/Jpmobile/Mobile/Docomo.html +0 -366
- data/doc/classes/Jpmobile/Mobile/Jphone.html +0 -212
- data/doc/classes/Jpmobile/Mobile/Softbank.html +0 -300
- data/doc/classes/Jpmobile/Mobile/Vodafone.html +0 -176
- data/doc/classes/Jpmobile/Mobile/Willcom.html +0 -210
- data/doc/classes/Jpmobile/Position.html +0 -384
- data/doc/created.rid +0 -1
- data/doc/files/CHANGELOG.html +0 -110
- data/doc/files/NOTES.html +0 -163
- data/doc/files/README.html +0 -345
- data/doc/files/TODO.html +0 -138
- data/doc/files/lib/jpmobile/datum_conv_rb.html +0 -110
- data/doc/files/lib/jpmobile/filter_rb.html +0 -115
- data/doc/files/lib/jpmobile/helpers_rb.html +0 -105
- data/doc/files/lib/jpmobile/hook_abstract_request_rb.html +0 -109
- data/doc/files/lib/jpmobile/hook_action_view_rb.html +0 -119
- data/doc/files/lib/jpmobile/mobile/abstract_mobile_rb.html +0 -108
- data/doc/files/lib/jpmobile/mobile/au_rb.html +0 -112
- data/doc/files/lib/jpmobile/mobile/display_rb.html +0 -111
- data/doc/files/lib/jpmobile/mobile/docomo_rb.html +0 -105
- data/doc/files/lib/jpmobile/mobile/softbank_rb.html +0 -115
- data/doc/files/lib/jpmobile/mobile/willcom_rb.html +0 -108
- data/doc/files/lib/jpmobile/mobile/z_display_info_docomo_rb.html +0 -114
- data/doc/files/lib/jpmobile/mobile/z_emoji_docomo_rb.html +0 -119
- data/doc/files/lib/jpmobile/mobile/z_ip_addresses_au_rb.html +0 -114
- data/doc/files/lib/jpmobile/mobile/z_ip_addresses_rb.html +0 -117
- data/doc/files/lib/jpmobile/mobile/z_ip_addresses_willcom_rb.html +0 -114
- data/doc/files/lib/jpmobile/position_rb.html +0 -105
- data/doc/files/lib/jpmobile/trans_sid_rb.html +0 -114
- data/doc/files/lib/jpmobile/version_rb.html +0 -101
- data/doc/files/lib/jpmobile_rb.html +0 -101
- data/doc/fr_class_index.html +0 -50
- data/doc/fr_file_index.html +0 -50
- data/doc/fr_method_index.html +0 -113
- data/doc/index.html +0 -24
- data/doc/rdoc-style.css +0 -208
- data/lib/jpmobile/mobile/z_emoji_docomo.rb +0 -508
- data/test/firefox_test.rb +0 -8
- data/test/transitsid_test.rb +0 -86
@@ -0,0 +1,20 @@
|
|
1
|
+
$KCODE='u'
|
2
|
+
module Jpmobile
|
3
|
+
module Emoticon
|
4
|
+
SJIS_TO_UNICODE = {}
|
5
|
+
SJIS_TO_UNICODE.update(DOCOMO_SJIS_TO_UNICODE)
|
6
|
+
SJIS_TO_UNICODE.update(AU_SJIS_TO_UNICODE)
|
7
|
+
SJIS_TO_UNICODE.freeze
|
8
|
+
UNICODE_TO_SJIS = SJIS_TO_UNICODE.invert.freeze
|
9
|
+
|
10
|
+
SJIS_REGEXP = Regexp.union(*SJIS_TO_UNICODE.keys.map{|s| Regexp.compile(Regexp.escape([s].pack('n'),"s"),nil,'s')})
|
11
|
+
SOFTBANK_WEBCODE_REGEXP = Regexp.union(*([/(?!)/n]+SOFTBANK_WEBCODE_TO_UNICODE.keys.map{|x| "\x1b\x24#{x}\x0f"}))
|
12
|
+
|
13
|
+
DOCOMO_SJIS_REGEXP = Regexp.union(*DOCOMO_SJIS_TO_UNICODE.keys.map{|s| Regexp.compile(Regexp.escape([s].pack('n'),"s"),nil,'s')})
|
14
|
+
AU_SJIS_REGEXP = Regexp.union(*AU_SJIS_TO_UNICODE.keys.map{|s| Regexp.compile(Regexp.escape([s].pack('n'),"s"),nil,'s')})
|
15
|
+
SOFTBANK_UNICODE_REGEXP = Regexp.union(*SOFTBANK_UNICODE_TO_WEBCODE.keys.map{|x| [x].pack('U')}).freeze
|
16
|
+
|
17
|
+
EMOTICON_UNICODES = UNICODE_TO_SJIS.keys|SOFTBANK_UNICODE_TO_WEBCODE.keys.map{|k|k+0x1000}
|
18
|
+
UTF8_REGEXP = Regexp.union(*EMOTICON_UNICODES.map{|x| [x].pack('U')}).freeze
|
19
|
+
end
|
20
|
+
end
|
data/lib/jpmobile/filter.rb
CHANGED
@@ -5,10 +5,18 @@ require 'scanf'
|
|
5
5
|
|
6
6
|
class ActionController::Base #:nodoc:
|
7
7
|
def self.mobile_filter(options={})
|
8
|
-
|
8
|
+
options = {:emoticon=>true, :hankaku=>false}.update(options)
|
9
|
+
|
10
|
+
if options[:emoticon]
|
11
|
+
around_filter Jpmobile::Filter::Emoticon::Outer.new # 外部エンコーディング<->数値文字参照
|
12
|
+
end
|
9
13
|
around_filter Jpmobile::Filter::Sjis.new
|
10
|
-
|
11
|
-
|
14
|
+
if options[:emoticon]
|
15
|
+
around_filter Jpmobile::Filter::Emoticon::Inner.new # 数値文字参照<->UTF-8
|
16
|
+
end
|
17
|
+
if options[:hankaku]
|
18
|
+
around_filter Jpmobile::Filter::HankakuKana.new
|
19
|
+
end
|
12
20
|
end
|
13
21
|
end
|
14
22
|
|
@@ -26,7 +34,7 @@ module Jpmobile
|
|
26
34
|
return unless @counter == 1
|
27
35
|
if respond_to?(:to_internal) && apply_incoming?(controller)
|
28
36
|
deep_each(controller.params) do |value|
|
29
|
-
value = to_internal(value)
|
37
|
+
value = to_internal(value, controller)
|
30
38
|
end
|
31
39
|
end
|
32
40
|
end
|
@@ -35,7 +43,7 @@ module Jpmobile
|
|
35
43
|
@counter -= 1
|
36
44
|
return unless @counter.zero?
|
37
45
|
if respond_to?(:to_external) && apply_outgoing?(controller)
|
38
|
-
controller.response.body = to_external(controller.response.body)
|
46
|
+
controller.response.body = to_external(controller.response.body, controller)
|
39
47
|
after_after(controller) if respond_to? :after_after
|
40
48
|
end
|
41
49
|
end
|
@@ -59,33 +67,51 @@ module Jpmobile
|
|
59
67
|
end
|
60
68
|
end
|
61
69
|
|
70
|
+
# 携帯電話の場合にのみ適用したい場合に Jpmobile::Base の派生クラスに include する。
|
71
|
+
module ApplyOnlyForMobile
|
72
|
+
def apply_incoming?(controller)
|
73
|
+
controller.request.mobile?
|
74
|
+
end
|
75
|
+
def apply_outgoing?(controller)
|
76
|
+
[nil, "text/html", "application/xhtml+xml"].include?(controller.response.content_type) &&
|
77
|
+
controller.request.mobile?
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
62
81
|
# Shift_JISとUnicodeのフィルタ(NKFを使用)
|
63
82
|
class Sjis < Base
|
64
|
-
|
83
|
+
# UTF-8からShift_JISに変換する。
|
84
|
+
def to_external(str, controller)
|
65
85
|
NKF.nkf('-m0 -x -Ws', str)
|
66
86
|
end
|
67
|
-
|
68
|
-
|
87
|
+
# Shift_JISからUTF-8に変換する。
|
88
|
+
def to_internal(str, controller)
|
89
|
+
NKF.nkf('-m0 -x -Sw', str)
|
69
90
|
end
|
91
|
+
# afterfilterを実行した後に実行する。
|
70
92
|
def after_after(controller)
|
71
93
|
controller.response.charset = "Shift_JIS"
|
72
94
|
end
|
95
|
+
# to_internalを適用するべきかどうかを返す。
|
73
96
|
def apply_incoming?(controller)
|
74
97
|
# Vodafone 3G/Softbank(Shift-JISにすると絵文字で不具合が生じる)以外の
|
75
98
|
# 携帯電話の場合に適用する。
|
76
99
|
mobile = controller.request.mobile
|
77
100
|
mobile && !(mobile.instance_of?(Jpmobile::Mobile::Vodafone)||mobile.instance_of?(Jpmobile::Mobile::Softbank))
|
78
101
|
end
|
79
|
-
|
102
|
+
def apply_outgoing?(controller)
|
103
|
+
[nil, "text/html", "application/xhtml+xml"].include?(controller.response.content_type) &&
|
104
|
+
apply_incoming?(controller)
|
105
|
+
end
|
80
106
|
end
|
81
107
|
|
82
108
|
# テーブルに基づくフィルタ
|
83
109
|
class FilterTable < Base
|
84
110
|
cattr_reader :internal, :external
|
85
|
-
def to_internal(str)
|
111
|
+
def to_internal(str, controller)
|
86
112
|
filter(str, external, internal)
|
87
113
|
end
|
88
|
-
def to_external(str)
|
114
|
+
def to_external(str, controller)
|
89
115
|
filter(str, internal, external)
|
90
116
|
end
|
91
117
|
private
|
@@ -100,60 +126,56 @@ module Jpmobile
|
|
100
126
|
|
101
127
|
# 半角カナと全角カナのフィルタ
|
102
128
|
class HankakuKana < FilterTable
|
129
|
+
include ApplyOnlyForMobile
|
103
130
|
@@internal = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ゛ ゜ ー ).freeze
|
104
131
|
@@external = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ゙ ゚ ー).freeze
|
105
|
-
def apply_incoming?(controller)
|
106
|
-
# 携帯電話の場合に適用する。
|
107
|
-
controller.request.mobile?
|
108
|
-
end
|
109
|
-
alias apply_outgoing? apply_incoming?
|
110
132
|
end
|
111
133
|
|
112
|
-
|
113
|
-
|
114
|
-
\xf9[\x40-\x49\x50-\x52\x55-\x57\x5b-\x5e\x72-\x7e\x80-\xfc]/x.freeze
|
115
|
-
DOCOMO_EMOJI_UTF8_REGEXP = /\xee(?:\x98[\xbe-\xbf]|
|
116
|
-
\x99[\x80-\xbf]|
|
117
|
-
\x9a[\x80-\xa5\xac-\xae\xb1-\xb3\xb7-\xba]|
|
118
|
-
\x9b[\x8e-\xbf]|
|
119
|
-
\x9c[\x80-\xbf]|
|
120
|
-
\x9d[\x80-\x97])/x.freeze
|
121
|
-
|
134
|
+
# 絵文字変換フィルタ
|
135
|
+
module Emoticon
|
122
136
|
# 絵文字Outer
|
123
|
-
#
|
137
|
+
# 外部エンコーディング(携帯電話側)とUnicode数値文字参照を相互に変換。
|
124
138
|
class Outer < Base
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
139
|
+
include ApplyOnlyForMobile
|
140
|
+
def to_internal(str, controller)
|
141
|
+
method_name = "external_to_unicodecr_" +
|
142
|
+
controller.request.mobile.class.name[/::(\w*)$/, 1].downcase
|
143
|
+
if Jpmobile::Emoticon.respond_to?(method_name)
|
144
|
+
Jpmobile::Emoticon.send(method_name, str)
|
145
|
+
else
|
146
|
+
str # 対応する変換メソッドが定義されていない場合は素通し
|
131
147
|
end
|
132
148
|
end
|
133
|
-
def to_external(str)
|
134
|
-
#
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
149
|
+
def to_external(str, controller)
|
150
|
+
# 使用する変換テーブルの決定
|
151
|
+
table = nil
|
152
|
+
to_sjis = false
|
153
|
+
case controller.request.mobile
|
154
|
+
when Jpmobile::Mobile::Docomo
|
155
|
+
table = Jpmobile::Emoticon::CONVERSION_TABLE_TO_DOCOMO
|
156
|
+
to_sjis = true
|
157
|
+
when Jpmobile::Mobile::Au
|
158
|
+
table = Jpmobile::Emoticon::CONVERSION_TABLE_TO_AU
|
159
|
+
to_sjis = true
|
160
|
+
when Jpmobile::Mobile::Jphone
|
161
|
+
table = Jpmobile::Emoticon::CONVERSION_TABLE_TO_SOFTBANK
|
162
|
+
to_sjis = true
|
163
|
+
when Jpmobile::Mobile::Softbank
|
164
|
+
table = Jpmobile::Emoticon::CONVERSION_TABLE_TO_SOFTBANK
|
139
165
|
end
|
166
|
+
|
167
|
+
Jpmobile::Emoticon::unicodecr_to_external(str, table, to_sjis)
|
140
168
|
end
|
141
169
|
end
|
142
|
-
|
143
170
|
# 絵文字Inner
|
171
|
+
# Unicode数値文字参照とUTF-8を相互に変換
|
144
172
|
class Inner < Base
|
145
|
-
|
146
|
-
|
147
|
-
str
|
148
|
-
unicode = $1.scanf("%x").first
|
149
|
-
DOCOMO_UNICODE_TO_SJIS[unicode] ? [unicode].pack('U') : match
|
150
|
-
end
|
173
|
+
include ApplyOnlyForMobile
|
174
|
+
def to_internal(str, controller)
|
175
|
+
Jpmobile::Emoticon::unicodecr_to_utf8(str)
|
151
176
|
end
|
152
|
-
def to_external(str)
|
153
|
-
|
154
|
-
str.gsub(DOCOMO_EMOJI_UTF8_REGEXP) do |match|
|
155
|
-
"&#x%04x;" % match.unpack('U').first
|
156
|
-
end
|
177
|
+
def to_external(str, controller)
|
178
|
+
Jpmobile::Emoticon::utf8_to_unicodecr(str)
|
157
179
|
end
|
158
180
|
end
|
159
181
|
end
|
data/lib/jpmobile/helpers.rb
CHANGED
@@ -45,7 +45,7 @@ module Jpmobile
|
|
45
45
|
def docomo_foma_gps_link_to(str, options={})
|
46
46
|
options = options.symbolize_keys
|
47
47
|
options[:only_path] = false
|
48
|
-
return %{<a href="#{url_for(options)}" lcs>#{
|
48
|
+
return %{<a href="#{url_for(options)}" lcs>#{str}</a>}
|
49
49
|
end
|
50
50
|
|
51
51
|
# DoCoMoでオープンiエリアを取得するためのURLを返す。
|
@@ -64,7 +64,7 @@ module Jpmobile
|
|
64
64
|
def docomo_utn_link_to(str, options={})
|
65
65
|
options = options.symbolize_keys
|
66
66
|
options[:only_path] = false
|
67
|
-
return %{<a href="#{url_for(options)}" utn>#{
|
67
|
+
return %{<a href="#{url_for(options)}" utn>#{str}</a>}
|
68
68
|
end
|
69
69
|
|
70
70
|
# au GPS位置情報を取得するためのURLを返す。
|
@@ -97,7 +97,7 @@ module Jpmobile
|
|
97
97
|
def jphone_location_link_to(str,options={})
|
98
98
|
options = options.symbolize_keys
|
99
99
|
options[:only_path] = false
|
100
|
-
return %{<a z href="#{url_for(options)}">#{
|
100
|
+
return %{<a z href="#{url_for(options)}">#{str}</a>}
|
101
101
|
end
|
102
102
|
|
103
103
|
# Softbank(含むVodafone 3G)で位置情報を取得するためのURLを返す。
|
@@ -128,7 +128,7 @@ module Jpmobile
|
|
128
128
|
private
|
129
129
|
# 外部へのリンク
|
130
130
|
def link_to_url(str, url)
|
131
|
-
%{<a href="#{url}">#{
|
131
|
+
%{<a href="#{url}">#{str}</a>}
|
132
132
|
end
|
133
133
|
end
|
134
134
|
end
|
@@ -4,12 +4,16 @@ class ActionController::AbstractRequest
|
|
4
4
|
def user_agent
|
5
5
|
env['HTTP_USER_AGENT']
|
6
6
|
end
|
7
|
-
|
7
|
+
# 環境変数 HTTP_USER_AGENT を設定する。
|
8
|
+
def user_agent=(str)
|
9
|
+
self.env["HTTP_USER_AGENT"] = str
|
10
|
+
end
|
11
|
+
|
8
12
|
# 携帯電話からであれば +true+を、そうでなければ +false+ を返す。
|
9
13
|
def mobile?
|
10
14
|
mobile != nil
|
11
15
|
end
|
12
|
-
|
16
|
+
|
13
17
|
# 携帯電話の機種に応じて Mobile::xxx を返す。
|
14
18
|
# 携帯電話でない場合はnilを返す。
|
15
19
|
def mobile
|
@@ -1,3 +1,8 @@
|
|
1
|
+
#:stopdoc:
|
2
|
+
# helperを追加
|
3
|
+
ActionView::Base.class_eval { include Jpmobile::Helpers }
|
4
|
+
#:startdoc:
|
5
|
+
|
1
6
|
# ActionView::Base を拡張して携帯からのアクセスの場合に携帯向けビューを優先表示する。
|
2
7
|
# Vodafone携帯(request.mobile == Jpmobile::Mobile::Vodafone)の場合、
|
3
8
|
# index_mobile_vodafone.rhtml
|
@@ -5,6 +10,8 @@
|
|
5
10
|
# index_mobile.rhtml
|
6
11
|
# index.rhtml
|
7
12
|
# の順にテンプレートが検索される。
|
13
|
+
# BUG: 現状、上記の例では index.rhtml が存在しない場合に振り分けが行われない
|
14
|
+
# (ダミーファイルを置くことで回避可能)。
|
8
15
|
class ActionView::Base #:nodoc:
|
9
16
|
alias render_file_without_mobile render_file #:nodoc:
|
10
17
|
def render_file(template_path, use_full_path = true, local_assigns = {})
|
@@ -14,7 +14,11 @@ module Jpmobile::Mobile
|
|
14
14
|
def position; return nil; end
|
15
15
|
|
16
16
|
# 契約者又は端末を識別する文字列があれば返す。
|
17
|
-
def ident;
|
17
|
+
def ident; ident_subscriber || ident_device; end
|
18
|
+
# 契約者を識別する文字列があれば返す。
|
19
|
+
def ident_subscriber; nil; end
|
20
|
+
# 端末を識別する文字列があれば返す。
|
21
|
+
def ident_device; nil; end
|
18
22
|
|
19
23
|
# IPアドレスデータ
|
20
24
|
IP_ADDRESSES = nil
|
data/lib/jpmobile/mobile/au.rb
CHANGED
@@ -38,17 +38,14 @@ module Jpmobile::Mobile
|
|
38
38
|
return nil
|
39
39
|
end
|
40
40
|
end
|
41
|
+
alias :ident_device :serial_number
|
41
42
|
|
42
43
|
# FOMAカード製造番号があれば返す。無ければ +nil+ を返す。
|
43
44
|
def icc
|
44
45
|
@request.user_agent =~ /icc([0-9a-zA-Z]{20})\)/
|
45
46
|
return $1
|
46
47
|
end
|
47
|
-
|
48
|
-
# Docomo#icc、Docomo#serial_number の順で有効なものが有れば返す。無ければ +nil+ を返す。
|
49
|
-
def ident
|
50
|
-
icc || serial_number
|
51
|
-
end
|
48
|
+
alias :ident_subscriber :icc
|
52
49
|
|
53
50
|
# 画面情報を +Display+ クラスのインスタンスで返す。
|
54
51
|
def display
|
@@ -15,6 +15,14 @@ module Jpmobile::Mobile
|
|
15
15
|
@request.user_agent =~ /SN(.+?) /
|
16
16
|
return $1
|
17
17
|
end
|
18
|
+
alias :ident_device :serial_number
|
19
|
+
|
20
|
+
# UIDを返す。
|
21
|
+
def x_jphone_uid
|
22
|
+
@request.env["HTTP_X_JPHONE_UID"]
|
23
|
+
end
|
24
|
+
alias :ident_subscriber :x_jphone_uid
|
25
|
+
|
18
26
|
# 位置情報があれば Position のインスタンスを返す。無ければ +nil+ を返す。
|
19
27
|
def position
|
20
28
|
if params["pos"] =~ /^([NS])(\d+)\.(\d+)\.(\d+\.\d+)([WE])(\d+)\.(\d+)\.(\d+\.\d+)$/
|
@@ -28,6 +36,7 @@ module Jpmobile::Mobile
|
|
28
36
|
return nil
|
29
37
|
end
|
30
38
|
end
|
39
|
+
|
31
40
|
# 画面情報を +Display+ クラスのインスタンスで返す。
|
32
41
|
def display
|
33
42
|
p_w = p_h = col_p = cols = nil
|
@@ -47,7 +56,6 @@ module Jpmobile::Mobile
|
|
47
56
|
end
|
48
57
|
Jpmobile::Display.new(p_w, p_h, nil, nil, col_p, cols)
|
49
58
|
end
|
50
|
-
alias :ident :serial_number
|
51
59
|
|
52
60
|
# cookieに対応しているか?
|
53
61
|
def supports_cookie?
|
@@ -5,6 +5,8 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
5
5
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>266},
|
6
6
|
"P703imyu"=>
|
7
7
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
8
|
+
"SH704i"=>
|
9
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>320},
|
8
10
|
"F503iS"=>
|
9
11
|
{:color_p=>true, :colors=>4096, :browser_width=>120, :browser_height=>130},
|
10
12
|
"F505i"=>
|
@@ -59,6 +61,8 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
59
61
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>252},
|
60
62
|
"F703i"=>
|
61
63
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
64
|
+
"N704imyu"=>
|
65
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
62
66
|
"N505iS"=>
|
63
67
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
64
68
|
"P903iX"=>
|
@@ -71,10 +75,14 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
71
75
|
{:color_p=>true, :colors=>65536, :browser_width=>176, :browser_height=>198},
|
72
76
|
"P253i"=>
|
73
77
|
{:color_p=>true, :colors=>65536, :browser_width=>132, :browser_height=>144},
|
78
|
+
"SO903iTV"=>
|
79
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>368},
|
74
80
|
"F903iX"=>
|
75
81
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
76
82
|
"SH702iD"=>
|
77
83
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>240},
|
84
|
+
"P704i"=>
|
85
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
78
86
|
"SH851i"=>
|
79
87
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>252},
|
80
88
|
"N211iS"=>
|
@@ -101,6 +109,8 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
101
109
|
{:color_p=>true, :colors=>65536, :browser_width=>230, :browser_height=>240},
|
102
110
|
"P821i"=>
|
103
111
|
{:color_p=>false, :colors=>4, :browser_width=>118, :browser_height=>128},
|
112
|
+
"L602i"=>
|
113
|
+
{:color_p=>true, :colors=>65536, :browser_width=>170, :browser_height=>189},
|
104
114
|
"D251i"=>
|
105
115
|
{:color_p=>true, :colors=>262144, :browser_width=>132, :browser_height=>144},
|
106
116
|
"D251iS"=>
|
@@ -199,12 +209,12 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
199
209
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>256},
|
200
210
|
"F881iES"=>
|
201
211
|
{:color_p=>true, :colors=>65536, :browser_width=>240, :browser_height=>256},
|
212
|
+
"N904i"=>
|
213
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>352},
|
202
214
|
"P2002"=>
|
203
215
|
{:color_p=>true, :colors=>65536, :browser_width=>118, :browser_height=>128},
|
204
216
|
"R691i"=>
|
205
217
|
{:color_p=>false, :colors=>4, :browser_width=>96, :browser_height=>72},
|
206
|
-
"N904i"=>
|
207
|
-
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>352},
|
208
218
|
"N902iL"=>
|
209
219
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
210
220
|
"P252i"=>
|
@@ -213,6 +223,8 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
213
223
|
{:color_p=>false, :colors=>4, :browser_width=>96, :browser_height=>87},
|
214
224
|
"P703i"=>
|
215
225
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
226
|
+
"SH904i"=>
|
227
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>320},
|
216
228
|
"SH902iSL"=>
|
217
229
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>240},
|
218
230
|
"N506iS"=>
|
@@ -221,8 +233,6 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
221
233
|
{:color_p=>false, :colors=>2, :browser_width=>96, :browser_height=>120},
|
222
234
|
"SO212i"=>
|
223
235
|
{:color_p=>true, :colors=>65536, :browser_width=>120, :browser_height=>112},
|
224
|
-
"SH904i"=>
|
225
|
-
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>320},
|
226
236
|
"F661i"=>
|
227
237
|
{:color_p=>true, :colors=>65536, :browser_width=>132, :browser_height=>136},
|
228
238
|
"F671iS"=>
|
@@ -234,7 +244,7 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
234
244
|
"N2051"=>
|
235
245
|
{:color_p=>true, :colors=>65536, :browser_width=>176, :browser_height=>198},
|
236
246
|
"L601i"=>
|
237
|
-
{:color_p=>true, :colors=>65536, :browser_width=>
|
247
|
+
{:color_p=>true, :colors=>65536, :browser_width=>170, :browser_height=>189},
|
238
248
|
"N703iD"=>
|
239
249
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
240
250
|
"SH902iS"=>
|
@@ -273,6 +283,10 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
273
283
|
{:color_p=>true, :colors=>262144, :browser_width=>176, :browser_height=>198},
|
274
284
|
"SH505i"=>
|
275
285
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>252},
|
286
|
+
"D704i"=>
|
287
|
+
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
288
|
+
"SO704i"=>
|
289
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>368},
|
276
290
|
"SH251i"=>
|
277
291
|
{:color_p=>true, :colors=>65536, :browser_width=>120, :browser_height=>130},
|
278
292
|
"N902iX"=>
|
@@ -285,6 +299,8 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
285
299
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
286
300
|
"R209i"=>
|
287
301
|
{:color_p=>false, :colors=>4, :browser_width=>96, :browser_height=>72},
|
302
|
+
"L704i"=>
|
303
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>280},
|
288
304
|
"P210i"=>
|
289
305
|
{:color_p=>true, :colors=>256, :browser_width=>96, :browser_height=>91},
|
290
306
|
"M702iG"=>
|
@@ -319,14 +335,14 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
319
335
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
320
336
|
"P902iS"=>
|
321
337
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
338
|
+
"N703imyu"=>
|
339
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
322
340
|
"D901iS"=>
|
323
341
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
324
342
|
"P213i"=>
|
325
343
|
{:color_p=>true, :colors=>65536, :browser_width=>132, :browser_height=>144},
|
326
344
|
"SO902i"=>
|
327
345
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>256},
|
328
|
-
"N703imyu"=>
|
329
|
-
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
330
346
|
"N601i"=>
|
331
347
|
{:color_p=>true, :colors=>65536, :browser_width=>240, :browser_height=>270},
|
332
348
|
"F506i"=>
|
@@ -361,6 +377,8 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
361
377
|
{:color_p=>true, :colors=>65536, :browser_width=>160, :browser_height=>180},
|
362
378
|
"D800iDS"=>
|
363
379
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
380
|
+
"F704i"=>
|
381
|
+
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
364
382
|
"D211i"=>
|
365
383
|
{:color_p=>true, :colors=>4096, :browser_width=>100, :browser_height=>91},
|
366
384
|
"SO211i"=>
|
@@ -382,13 +400,15 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
382
400
|
"N900iS"=>
|
383
401
|
{:color_p=>true, :colors=>65536, :browser_width=>240, :browser_height=>269},
|
384
402
|
"L600i"=>
|
385
|
-
{:color_p=>true, :colors=>65536, :browser_width=>
|
403
|
+
{:color_p=>true, :colors=>65536, :browser_width=>170, :browser_height=>189},
|
386
404
|
"SA700iS"=>
|
387
405
|
{:color_p=>true, :colors=>65536, :browser_width=>240, :browser_height=>252},
|
388
406
|
"F671i"=>
|
389
407
|
{:color_p=>true, :colors=>256, :browser_width=>120, :browser_height=>126},
|
390
408
|
"P503i"=>
|
391
409
|
{:color_p=>true, :colors=>256, :browser_width=>120, :browser_height=>130},
|
410
|
+
"F883iES"=>
|
411
|
+
{:color_p=>true, :colors=>65536, :browser_width=>240, :browser_height=>256},
|
392
412
|
"P900i"=>
|
393
413
|
{:color_p=>true, :colors=>65536, :browser_width=>240, :browser_height=>266},
|
394
414
|
"P251iS"=>
|
@@ -415,14 +435,16 @@ Jpmobile::Mobile::Docomo::DISPLAY_INFO =
|
|
415
435
|
{:color_p=>true, :colors=>262144, :browser_width=>120, :browser_height=>130},
|
416
436
|
"D209i"=>
|
417
437
|
{:color_p=>true, :colors=>256, :browser_width=>96, :browser_height=>90},
|
438
|
+
"SO703i"=>
|
439
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>368},
|
418
440
|
"SO506iS"=>
|
419
441
|
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>256},
|
420
442
|
"D703i"=>
|
421
443
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
422
|
-
"SO703i"=>
|
423
|
-
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>368},
|
424
444
|
"D702iBCL"=>
|
425
445
|
{:color_p=>true, :colors=>262144, :browser_width=>230, :browser_height=>240},
|
446
|
+
"P704imyu"=>
|
447
|
+
{:color_p=>true, :colors=>262144, :browser_width=>240, :browser_height=>270},
|
426
448
|
"D501i"=>
|
427
449
|
{:color_p=>false, :colors=>2, :browser_width=>96, :browser_height=>72},
|
428
450
|
"P701iD"=>
|