# -*- coding: utf-8 -*- # =位置情報等を要求するヘルパー module Jpmobile # 携帯電話端末に位置情報を要求するための、特殊なリンクを出力するヘルパー群。 # 多くのキャリアでは特殊なFORMでも位置情報を要求できる。 module Helpers # 位置情報(緯度経度がとれるもの。オープンiエリアをのぞく)要求するリンクを作成する。 # 位置情報を受け取るページを +url_for+ に渡す引数の形式で +options+ に指定する。 # :show_all => +true+ とするとキャリア判別を行わず全てキャリアのリンクを返す。 # 第1引数に文字列を与えるとその文字列をアンカーテキストにする。 # 第1引数がHashの場合はデフォルトのアンカーテキストを出力する。 def get_position_link_to(str=nil, options={}) if str.is_a?(Hash) options = str str = nil end show_all = nil if options.is_a?(Hash) options = options.symbolize_keys show_all = options.delete(:show_all) end # TODO: コード汚い s = [] if show_all || request.mobile.instance_of?(Mobile::Docomo) s << docomo_foma_gps_link_to(str||"DoCoMo FOMA(GPS)", options) end if show_all || request.mobile.instance_of?(Mobile::Au) if show_all || request.mobile.supports_gps? s << au_gps_link_to(str||"au(GPS)", options) end if show_all || (!(request.mobile.supports_gps?) && request.mobile.supports_location?) s << au_location_link_to(str||"au(antenna)", options) end end if show_all || request.mobile.instance_of?(Mobile::Vodafone) || request.mobile.instance_of?(Mobile::Softbank) s << softbank_location_link_to(str||"Softbank 3G(GPS)", options) end if show_all || request.mobile.instance_of?(Mobile::Willcom) s << willcom_location_link_to(str||"Willcom", options) end return s.join("
\n").html_safe end # DoCoMo FOMAでGPS位置情報を取得するためのリンクを返す。 def docomo_foma_gps_link_to(str, options={}) url = options if options.is_a?(Hash) options = options.symbolize_keys options[:only_path] = false url = url_for(options) end return %{#{str}}.html_safe end # DoCoMoでオープンiエリアを取得するためのURLを返す。 def docomo_openiarea_url_for(options={}) url = options if options.is_a?(Hash) options = options.symbolize_keys options[:only_path] = false posinfo = options.delete(:posinfo) || "1" # 基地局情報を元に測位した緯度経度情報を要求 url = url_for(options) else posinfo = "1" end return "http://w1m.docomo.ne.jp/cp/iarea?ecode=OPENAREACODE&msn=OPENAREAKEY&posinfo=#{posinfo}&nl=#{CGI.escape(url)}" end # DoCoMoでオープンiエリアを取得するためのリンクを返す。 def docomo_openiarea_link_to(str, options={}) link_to_url(str, docomo_openiarea_url_for(options)) end # DoCoMoで端末製造番号等を取得するためのリンクを返す。 def docomo_utn_link_to(str, options={}) url = options if options.is_a?(Hash) options = options.symbolize_keys options[:only_path] = false url = url_for(options) end return %{#{str}}.html_safe end # DoCoMoでiモードIDを取得するためのリンクを返す。 def docomo_guid_link_to(str, options={}) url = options if options.is_a?(Hash) options = options.symbolize_keys options[:guid] = "ON" url = url_for(options) end return link_to_url(str, url) end # au GPS位置情報を取得するためのURLを返す。 def au_gps_url_for(options={}) url = options datum = 0 # 0:wgs84, 1:tokyo unit = 0 # 0:dms, 1:deg if options.is_a?(Hash) options = options.symbolize_keys options[:only_path] = false datum = (options.delete(:datum) || 0 ).to_i # 0:wgs84, 1:tokyo unit = (options.delete(:unit) || 0 ).to_i # 0:dms, 1:deg url = url_for(options) end return "device:gpsone?url=#{CGI.escape(url)}&ver=1&datum=#{datum}&unit=#{unit}&acry=0&number=0" end # au GPS位置情報を取得するためのリンクを返す。 def au_gps_link_to(str, options={}) link_to_url(str, au_gps_url_for(options)) end # au 簡易位置情報を取得するためのURLを返す。 def au_location_url_for(options={}) url = options if options.is_a?(Hash) options = options.symbolize_keys options[:only_path] = false url = url_for(options) end return "device:location?url=#{CGI.escape(url)}" end # au 簡易位置情報を取得するためのリンクを返す。 def au_location_link_to(str, options={}) link_to_url(str, au_location_url_for(options)) end # Softbank(含むVodafone 3G)で位置情報を取得するためのURLを返す。 def softbank_location_url_for(options={}) url = options mode = "auto" if options.is_a?(Hash) options = options.symbolize_keys mode = options.delete(:mode) || "auto" options[:only_path] = false url = url_for(options) end url.sub!(/\?/, '&') return "location:#{mode}?url=#{url}" end # Softbank(含むVodafone 3G)で位置情報を取得するためのリンクを返す。 def softbank_location_link_to(str,options={}) link_to_url(str,softbank_location_url_for(options)) end # Willcom 基地局位置情報を取得するためのURLを返す。 def willcom_location_url_for(options={}) url = options if options.is_a?(Hash) options = options.symbolize_keys options[:only_path] = false url = url_for(options) end return "http://location.request/dummy.cgi?my=#{url}&pos=$location" end # Willcom 基地局位置情報を取得するためのリンクを返す。 def willcom_location_link_to(str,options={}) link_to_url(str, willcom_location_url_for(options)) end private # 外部へのリンク def link_to_url(str, url) %{#{html_escape(str)}}.html_safe end end end