2

外部 API を使用して情報を取得しようとしています

  address=self.address
  response = HTTParty.get("http://api.map.baidu.com/geocoder/v2/?address=#{address}&output=json&ak=5dfe24c4762c0370324d273bc231f45a")
  decode_response =  ActiveSupport::JSON.decode(response)

ただし、address中国語なので、UTF-8 コードに変換する必要がありますURI::InvalidURIError (bad URI(is not URI?):

試してみaddress=self.address.force_encoding('utf-8')ましたが、うまくいきません。代わりに他の方法を使用する必要がありますか?

アップデート:

  uri = "http://api.map.baidu.com/geocoder/v2/?address=#{address}&output=json&ak=5dfe24c4762c0370324d273bc231f45a"
  encoded_uri = URI::encode(uri)
  response = HTTParty.get(encoded_uri)
  decode_response =  ActiveSupport::JSON.decode(response)
  self.latitude = decode_response['result']['location']['lat']

そして私は得るcan't convert HTTParty::Response into String。どうしたの?

ここで何かを見つけました。JSON で解析するように Httparty に明示的に指示する必要があると思いますか?

4

1 に答える 1

2

これをファイル「geo.rb」に保存して実行できますruby geo.rb

require 'uri'
require 'httparty'

address = "中国上海"
uri = "http://api.map.baidu.com/geocoder/v2/?address=#{address}&output=json&ak=5dfe24c4762c0370324d273bc231f45a"
encoded_uri = URI::encode uri
puts HTTParty.get(encoded_uri)
于 2013-08-10T09:16:16.933 に答える