Module: BaiduApi::Geocoding::V2::Geocoder
Constant Summary collapse
- API_HOST =
'http://api.map.baidu.com'- GEOCODER_PATH =
'/geocoder/v2/'
Instance Method Summary collapse
- #calculate_ak_sn(queries, sk) ⇒ Object
- #debug(subject, msg) ⇒ Object
- #geocode(address, options) ⇒ Object
- #to_query(arr) ⇒ Object
Instance Method Details
#calculate_ak_sn(queries, sk) ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 30 def calculate_ak_sn(queries, sk) query_str = ERB::Util.url_encode("#{GEOCODER_PATH}?#{to_query(queries)}#{sk}") debug('unencrypted query', query_str) sn = Digest::MD5.hexdigest(query_str) debug('sn', sn) sn end |
#debug(subject, msg) ⇒ Object
46 47 48 |
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 46 def debug(subject, msg) puts "#{subject}: #{msg}" if BaiduApi::Geocoding.config.debug end |
#geocode(address, options) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 16 def geocode(address, ) queries = [ [:address, address], [:output, 'json'], [:ak, [:ak]] ] url = "#{API_HOST}#{GEOCODER_PATH}?#{to_query(queries)}" url << "&sn=#{calculate_ak_sn(queries, [:sk])}" if [:sk] debug('url', url) open(url) do |http| ret = JSON.parse(http.read) end end |
#to_query(arr) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/baidu_api/geocoding/v2/geocoder.rb', line 38 def to_query(arr) query_str = arr.map do |k, v| "#{CGI.escape(k.to_s)}=#{CGI.escape(v)}" end.join('&') debug('query_str', query_str) query_str end |