2013-05-17 43 views
0

我无法打印出我在Twitter上关注的人员列表。此代码工作在250,但现在失败,我跟随320人。用红宝石宝石请求朋友时Twitter速率限制点击

失败描述:该代码请求超过了Twitter的速率限制。代码会在限制重置所需的时间内休眠,然后再次尝试。

我认为它被写入的方式,它只是不断重试同一个完整的可拒绝请求,而不是继续停止它的位置。

MAX_ATTEMPTS = 3 
num_attempts = 0 
begin 
    num_attempts += 1 
    @client.friends.each do |user| 
     puts "#{user.screen_name}" 
    end 
rescue Twitter::Error::TooManyRequests => error 
    if num_attempts <= MAX_ATTEMPTS 
     sleep error.rate_limit.reset_in 
     retry 
    else 
     raise 
    end 
end 

谢谢!

+1

* “失败” 收集您的Twitter好友*是一个软件问题的不足描述。 – Borodin

+0

你是对的!对不起,这是我第一次。 :)代码击中Twitter速率限制,并特别提供“Error :: TooManyRequests”异常。代码会休眠直到速率限制重置并再次尝试。然后它再次失败,再次等待,并重复,直到它放弃。 – user1476028

回答

3

下面的代码将返回的用户名的阵列。绝大多数代码是由作者编写的:http://workstuff.tumblr.com/post/4556238101/a-short-ruby-script-to-pull-your-twitter-followers-who

首先创建以下定义。

def get_cursor_results(action, items, *args) 
    result = [] 
    next_cursor = -1 
    until next_cursor == 0 
    begin 
     t = @client.send(action, args[0], args[1], {:cursor => next_cursor}) 
     result = result + t.send(items) 
     next_cursor = t.next_cursor 
    rescue Twitter::Error::TooManyRequests => error 
     puts "Rate limit error, sleeping for #{error.rate_limit.reset_in} seconds...".color(:yellow) 
     sleep error.rate_limit.reset_in 
     retry 
    end 
    end 
    return result 
end 

其次使用以下两行

friends = get_cursor_results('friends', 'users', 'twitterusernamehere') 
screen_names = friends.collect{|x| x.screen_name}