我写了一些ruby代码来存档推文,但我有几个问题。
我的代码似乎效率低下,你能帮我重构一下吗?
我真的不明白如何处理推特错误。我想打印出它抛出的具体错误,而不仅仅是我的标准文本
3.我不明白如何使用速率限制状态代码。我的代码总是吐出完全相同的事情:“在接下来的59分59秒内剩下150个Twitter API请求”
谢谢!
require 'twitter'
count = 1
query = "hello"
res = Twitter.search(query, :rpp => 1, :result_type => "recent", :page => 1).results
search_id = res.first.id
loop do
begin
res = Twitter.search(query, :rpp => 100, :result_type => "recent", :page => 1, :max_id => search_id).results
res.each do |status|
puts "#{status.id}, #{status.created_at}, #{status.from_user}, #{status.text}"
puts count.to_s
count = count+1
end
search_id = res.last.id-1
rescue Twitter::Error => e
rate_limit_status = Twitter.rate_limit_status
puts "#{rate_limit_status.remaining_hits} Twitter API request(s) remaining for the next #{((rate_limit_status.reset_time - Time.now) / 60).floor} minutes and #{((rate_limit_status.reset_time - Time.now) % 60).round} seconds"
puts "Error: No more tweets to collect."
puts e.inspect
puts "Last tweet collected at #{res.last.created_at}"
break
end
end
答案 0 :(得分:1)
好的,我不打算为你重写你的代码(你也不应该指望任何人这样做),但我会指出一些问题,并尝试解释一些事情:
Twitter.search
,然后立即再次调用它,丢弃此过程中的第一批结果。sleep(x)
的调用放入循环中。滥用API可能会阻止您的IP,这也是不礼貌的。要获取异常的详细信息,请尝试以下操作:
rescue Twitter::Error => e
puts "Oops I messed up"
puts e.inspect
end
当你接触它时,请阅读ruby exceptions。