【问题标题】:Twitter rate limit hit while requesting friends with ruby gem使用 ruby​​ gem 请求好友时,Twitter 速率限制被击中
【发布时间】:2013-05-13 03:39:57
【问题描述】:

我无法打印出我在 Twitter 上关注的人的列表。此代码在 250 处有效,但由于我关注了 320 个人,所以现在失败了。

失败说明: 代码请求超出推特限速。代码休眠到重置限制所需的时间,然后重试。

我认为它的编写方式只是不断重试相同的整个可拒绝请求,而不是从中断的地方继续。

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

谢谢!

【问题讨论】:

  • "fails" 对软件问题的描述不充分。
  • 你完全正确!对不起,这是我第一次。 :) 代码达到了 twitter 速率限制,特别是提供了异常“Error::TooManyRequests”。代码休眠,直到速率限制重置并再次尝试。然后它再次失败,再次等待,并重复,直到它放弃。

标签: ruby api twitter gem


【解决方案1】:

以下代码将返回一个用户名数组。绝大多数代码由以下作者编写: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

使用以下两行第二次收集您的 twitter 朋友

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

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2016-03-31
    • 2013-01-27
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多