Twitter api速率限制的解决方法

Bra*_*cil 4 ruby twitter

我收集了一大堆用户并将它们放在变量'users'中.我正在遍历它们并尝试使用我的新Twitter帐户关注它们.然而,在大约15岁之后,我因为超出限制而被Twitter拦截.我想再次运行它,但没有我已经关注的用户.如何跟踪"用户"数组中的"i",或以某种方式从我尚未关注的用户那里返回一个新数组?我知道像pop和unshift等方法,但我不确定''''来自'用户'数组.我是一个永久的新手,所以请尽可能多地包含细节

不是,用户实际上是一个'游标'而不是一个数组,因此,它没有长度方法

>> users.each do |i|
?> myuseraccount.twitter.follow(i)
>> end
Run Code Online (Sandbox Code Playgroud)

Twitter ::错误:: TooManyRequests:超出了速率限制

Ada*_*lin 7

一个简单的黑客可以使用以下呼叫sleep(n):

>> users.each do |i|
?>   myuseraccount.twitter.follow(i)
?>   sleep(3)
>> end
Run Code Online (Sandbox Code Playgroud)

增加睡眠计数直到twitter-api停止抛出错误.

通过以下方式实现对该问题的适当解决方案rate-limiting.

用于方法调用率限制的可能的ruby解决方案将是glutton_ratelimit.

编辑 - 而且,正如凯尔指出的那样,这个问题一个记录在案的解决方案.

以下是该解决方案的增强版本:

def rate_limited_follow (account, user)
  num_attempts = 0
  begin
    num_attempts += 1
    account.twitter.follow(user)
  rescue Twitter::Error::TooManyRequests => error
    if num_attempts % 3 == 0
      sleep(15*60) # minutes * 60 seconds
      retry
    else
      retry
    end
  end
end

>> users.each do |i|
?>   rate_limited_follow(myuseraccount, i)
>> end
Run Code Online (Sandbox Code Playgroud)

  • @ user1647484然后为什么问题的标题是指从数组中删除东西?:) (2认同)