2

因此,我试图将推文从 Twitter 中提取出来,并将它们放入 rails 应用程序(注意,因为这是一项我不能使用 Twitter Gem 的任务),我很困惑。我可以以 JSON 字符串的形式获得我需要的推文,但我不确定从那里去哪里。我知道我正在进行的 Twitter API 调用会返回一个带有一堆 Tweet 对象的 JSON 数组,但我不知道如何获取 tweet 对象。我尝试了 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

谢谢!

4

1 回答 1

6

JSON.parse 方法返回表示 json 对象的 ruby​​ 哈希或数组。在您的情况下,Json 被解析为散列,带有“results”键(里面有您的推文)和一些元数据:“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
于 2013-01-21T15:27:36.747 回答