我收集了一大堆用户并将它们放在变量'users'中.我正在遍历它们并尝试使用我的新Twitter帐户关注它们.然而,在大约15岁之后,我因为超出限制而被Twitter拦截.我想再次运行它,但没有我已经关注的用户.如何跟踪"用户"数组中的"i",或以某种方式从我尚未关注的用户那里返回一个新数组?我知道像pop和unshift等方法,但我不确定''''来自'用户'数组.我是一个永久的新手,所以请尽可能多地包含细节
不是,用户实际上是一个'游标'而不是一个数组,因此,它没有长度方法
>> users.each do |i|
?> myuseraccount.twitter.follow(i)
>> end
Run Code Online (Sandbox Code Playgroud)
Twitter ::错误:: TooManyRequests:超出了速率限制
一个简单的黑客可以使用以下呼叫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)