从Rails 3中的JSON响应中获取数据

时间:2013-01-20 23:41:31

标签: ruby-on-rails ruby ruby-on-rails-3 xmlhttprequest

因此,我试图将Twitter上的推文放入rails应用程序(注意,因为这是一项我不能使用Twitter Gem的作业)而且我很困惑。 我可以以JSON字符串的形式获取我需要的推文,但我不知道从那里去哪里。我知道我正在制作的Twitter API调用返回一个带有一堆Tweet对象的JSON数组,但我不知道如何获取推文对象。我尝试过JSON.parse,但仍无法获取所需的数据(我不确定返回的是什么)。这是我到目前为止的代码,我已经用注释/字符串清楚地表达了我正在尝试的内容。我是Rails的新手,所以这可能是我想要做的事情。

def get_tweets
require 'net/http'
uri = URI("http://search.twitter.com/search.json?q=%23bieber&src=typd")

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)

case response
when Net::HTTPSuccess then #to get: text -> "text", date: "created_at", tweeted by: "from_user", profile img url: "profile_img_url"
  JSON.parse(response.body)
  # Here I need to loop through the JSON array and make n tweet objects with the indicated fields
  t = Tweet.new(:name => "JSON array item i with field from_user",  :text  "JSON array item i with field text", :date => "as before" ) 
  t.save
when Net::HTTPRedirection then
  location = response['location']
  warn "redirected to #{location}"
  fetch(location, limit - 1)
else
  response.value
end
end

谢谢!

1 个答案:

答案 0 :(得分:6)

JSON.parse方法返回表示json对象的ruby散列或数组。 在你的情况下,Json被解析为一个哈希,带有“结果”键(里面有你的推文)和一些元数据:“max_id”,“since_id”,“refresh_url”等。参考twitter文档有关返回字段的说明。 再次以你的例子为例:

  parsed_response = JSON.parse(response.body)
  parsed_response["results"].each do |tweet|
    t = Tweet.new(:name => tweet["from_user_name"], :text => tweet["text"], :date => tweet["created_at"]) 
    t.save
  end