私のコントローラーには次のコードがあります...
response = HTTParty.get('https://graph.facebook.com/zuck')
logger.debug(response.body.id)
NoMethodError/undefined method `id 'が発生します
私が行った場合...
logger.debug(response.body)
本来のとおりに出力されます...
{"id":"4","name":"Mark Zuckerberg","first_name":"Mark","last_name":"Zuckerberg","link":"http:\/\/www.facebook.com\/zuck","username":"zuck","gender":"male","locale":"en_US"}
response.body.idだと思うかもしれませんが、明らかに機能していません。前もって感謝します!
次のようにHTTParty.get
を使用して、応答を強制的にJSONとして扱うことができます。
response = HTTParty.get("http://iTunes.Apple.com/search",
{query: {term: 'tame impala'}, format: :json})
response['results'][0]['trackName']
=> "Let It Happen"
応答_response['id']
_が_Content-Type
_または_application/json
_の場合、_response.parse_response
_を使用して、JSONペイロードから生成されたハッシュを取得できます。
_response = HTTParty.get('https://graph.facebook.com/zuck')
payload = response.parsed_response
logger.debug(payload['id'])
_
注:_parsed_response
_がハッシュであるのは、応答_Content-Type
_が_application/json
_の場合のみです。それ以外の場合、HTTParty
は文字列として返します。ハッシュを適用する場合、レスポンスが_application/json
_を返さない場合、format
をパラメータHTTParty.get(url, format: :json)
として渡すことができます。
HTTPartyは、返されたコンテンツタイプに基づいてコンテンツを自動的に解析する必要があります。 zuckのjsonで何か怪しいことが起こっているようです。
pry(main)> HTTParty.get('https://graph.facebook.com/zuck')
=> "{\"id\":\"4\",\"first_name\":\"Mark\",\"gender\":\"male\",\"last_name\":\"Zuckerberg\",\"link\":\"https:\\/\\/www.facebook.com\\/zuck\",\"locale\":\"en_US\",\"name\":\"Mark Zuckerberg\",\"username\":\"zuck\"}"
しかし、これはうまくいきます:
pry(main)> HTTParty.get('http://echo.jsontest.com/foo/bar/baz/foo')
=> {"baz"=>"foo", "foo"=>"bar"}
コンソールで自分で試そうとしている場合は、require 'httparty'
を忘れないでください。