Class: Jpmobile::Mobile::Docomo

Inherits:
AbstractMobile show all
Defined in:
lib/jpmobile/mobile/docomo.rb

Overview

DoCoMo携帯電話

Constant Summary collapse

USER_AGENT_REGEXP =

対応するUser-Agentの正規表現

/^DoCoMo/
MAIL_ADDRESS_REGEXP =

対応するメールアドレスの正規表現

/[email protected]\.ne\.jp/
MAIL_CHARSET =

メールのデフォルトのcharset

"Shift_JIS"
MAIL_CONTENT_TRANSFER_ENCODING =

テキスト部分の content-transfer-encoding

'8bit'

Instance Method Summary collapse

Methods inherited from AbstractMobile

add_user_agent_regexp, #apply_filter?, #apply_params_filter?, carrier, check_carrier, #content_transfer_encoding, #decode_transfer_encoding, #decorated=, #decorated?, #display, #ident, #initialize, ip_address_class, #mail_charset, #mail_variants, #smart_phone?, #tablet?, #to_mail_subject, #to_mail_subject_encoded?, user_agent_regexp, #utf8_to_mail_encode, #valid_ip?, valid_ip?, #variants

Constructor Details

This class inherits a constructor from Jpmobile::Mobile::AbstractMobile

Instance Method Details

#areacodeObject

オープンiエリアがあればエリアコードを String で返す。無ければ nil を返す。


17
18
19
20
21
22
23
# File 'lib/jpmobile/mobile/docomo.rb', line 17

def areacode
  if params["ACTN"] == "OK"
    return params["AREACODE"]
  else
    return nil
  end
end

#decoratable?Boolean


119
120
121
# File 'lib/jpmobile/mobile/docomo.rb', line 119

def decoratable?
  true
end

#default_charsetObject


97
98
99
# File 'lib/jpmobile/mobile/docomo.rb', line 97

def default_charset
  "Shift_JIS"
end

#guidObject

iモードIDを返す。


61
62
63
# File 'lib/jpmobile/mobile/docomo.rb', line 61

def guid
  @env['HTTP_X_DCMGUID']
end

#iccObject

FOMAカード製造番号があれば返す。無ければ nil を返す。


55
56
57
58
# File 'lib/jpmobile/mobile/docomo.rb', line 55

def icc
  @env['HTTP_USER_AGENT'] =~ /icc([0-9a-zA-Z]{20})\)/
  return $1
end

#ident_subscriberObject

iモードID, FOMAカード製造番号の順で調べ、あるものを返す。なければ nil を返す。


66
67
68
# File 'lib/jpmobile/mobile/docomo.rb', line 66

def ident_subscriber
  guid || icc
end

#imode_browser_versionObject

i-mode ブラウザのバージョンを返す。 labs.unoh.net/2009/07/i_20.html


128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/jpmobile/mobile/docomo.rb', line 128

def imode_browser_version
  ver = '1.0'
  case @request.env['HTTP_USER_AGENT']
  when %r{^DoCoMo/1.0/}
    # 必ずv1.0
  when %r{^DoCoMo/2.0 }
    @request.env['HTTP_USER_AGENT'] =~ / (\w+)\(c(\d+);/
    model = $1
    cache_size = $2.to_i

    ver = cache_size >= 500 ? (%w(P03B P05B L01B).member?(model) ? '2.0LE' : '2.0') : '1.0'
  else
    # DoCoMo/3.0以降等は、とりあえず非v1.0扱い
    ver = '2.0'
  end

  ver
end

#model_nameObject

モデル名を返す。


148
149
150
151
152
153
154
155
# File 'lib/jpmobile/mobile/docomo.rb', line 148

def model_name
  if @env["HTTP_USER_AGENT"] =~ /^DoCoMo\/2.0 (.+)\(/
    return $1
  elsif @env["HTTP_USER_AGENT"] =~ /^DoCoMo\/1.0\/(.+?)\//
    return $1
  end
  return nil
end

#positionObject

位置情報があれば Position のインスタンスを返す。無ければ nil を返す。


26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/jpmobile/mobile/docomo.rb', line 26

def position
  return @__position if defined? @__position
  lat = params["lat"] || params["LAT"]
  lon = params["lon"] || params["LON"]
  geo = params["geo"] || params["GEO"]
  return @__position = nil if ( lat.nil? || lat == '' || lon.nil? || lon == '' )
  raise "Unsuppoted datum" if geo.downcase != "wgs84"
  pos = Jpmobile::Position.new
  raise "Unsuppoted" unless lat =~ /^([+-]\d+)\.(\d+)\.(\d+\.\d+)/
  pos.lat = Jpmobile::Position.dms2deg($1,$2,$3)
  raise "Unsuppoted" unless lon =~ /^([+-]\d+)\.(\d+)\.(\d+\.\d+)/
  pos.lon = Jpmobile::Position.dms2deg($1,$2,$3)
  return @__position = pos
end

122
123
124
# File 'lib/jpmobile/mobile/docomo.rb', line 122

def require_related_part?
  true
end

#serial_numberObject Also known as: ident_device

端末製造番号があれば返す。無ければ nil を返す。


42
43
44
45
46
47
48
49
50
51
# File 'lib/jpmobile/mobile/docomo.rb', line 42

def serial_number
  case @env["HTTP_USER_AGENT"]
  when /ser([0-9a-zA-Z]{11})$/ # mova
    return $1
  when /ser([0-9a-zA-Z]{15});/ # FOMA
    return $1
  else
    return nil
  end
end

#supports_cookie?Boolean

cookieに対応しているか?


71
72
73
# File 'lib/jpmobile/mobile/docomo.rb', line 71

def supports_cookie?
  imode_browser_version != '1.0'
end

#to_external(str, content_type, charset) ⇒ Object


84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/jpmobile/mobile/docomo.rb', line 84

def to_external(str, content_type, charset)
  # UTF-8を数値参照に
  str = Jpmobile::Emoticon.utf8_to_unicodecr(str)
  # 文字コードを Shift_JIS に変換
  if [nil, "text/html", "application/xhtml+xml"].include?(content_type)
    str = Jpmobile::Util.utf8_to_sjis(str)
    charset = default_charset unless str.empty?
  end
  # 数値参照を絵文字コードに変換
  str = Jpmobile::Emoticon.unicodecr_to_external(str, Jpmobile::Emoticon::CONVERSION_TABLE_TO_DOCOMO, true)

  [str, charset]
end

#to_internal(str) ⇒ Object

文字コード変換


76
77
78
79
80
81
82
83
# File 'lib/jpmobile/mobile/docomo.rb', line 76

def to_internal(str)
  # 絵文字を数値参照に変換
  str = Jpmobile::Emoticon.external_to_unicodecr_docomo(Jpmobile::Util.sjis(str))
  # 文字コードを UTF-8 に変換
  str = Jpmobile::Util.sjis_to_utf8(str)
  # 数値参照を UTF-8 に変換
  Jpmobile::Emoticon.unicodecr_to_utf8(str)
end

#to_mail_body(str) ⇒ Object

メール送信用


102
103
104
# File 'lib/jpmobile/mobile/docomo.rb', line 102

def to_mail_body(str)
  to_external(str, nil, nil).first
end

#to_mail_body_encoded?(str) ⇒ Boolean


116
117
118
# File 'lib/jpmobile/mobile/docomo.rb', line 116

def to_mail_body_encoded?(str)
  Jpmobile::Util.shift_jis?(str)
end

#to_mail_encoding(str) ⇒ Object


105
106
107
# File 'lib/jpmobile/mobile/docomo.rb', line 105

def to_mail_encoding(str)
  to_external(str, nil, nil).first
end

#to_mail_internal(str, charset) ⇒ Object


108
109
110
111
112
113
114
115
# File 'lib/jpmobile/mobile/docomo.rb', line 108

def to_mail_internal(str, charset)
  if Jpmobile::Util.shift_jis?(str) or Jpmobile::Util.ascii_8bit?(str) or charset == mail_charset
    # 絵文字を数値参照に変換
    str = Jpmobile::Emoticon.external_to_unicodecr_docomo(Jpmobile::Util.sjis(str))
  end

  str
end