我编写了一个脚本来遍历Twitter用户ID列表,并将follower_ids列表保存到文件中。我已经多次使用它没有问题。对于长列表,我已经添加了这段代码来检查每个GET请求之前的速率限制,如果我要进行速率限制则会睡眠:
rate_limit_json = api.rate_limit_status()
remaining_hits = rate_limit_json["remaining_hits"]
print 'you have', remaining_hits, 'API calls remaining until next hour'
if remaining_hits < 2:
dtcode = datetime.utcnow()
unixtime = calendar.timegm(dtcode.utctimetuple())
sleeptime = rate_limit_json['reset_time_in_seconds'] - unixtime + 10
print 'waiting ', sleeptime, 'seconds'
time.sleep(sleeptime)
else:
pass
我在脚本的顶部设置了这个Oauth blurb:
auth = tweepy.OAuthHandler('xxxx', 'xxxx')
auth.set_access_token('xxxx', 'xxxxx')
api = tweepy.API(auth)
我反复提出的电话是:
follower_cursors = tweepy.Cursor(api.followers_ids)
所以现在,无论我拨打多少电话,我的“剩余点击”都会保持在150,直到Twitter返回“超出限额。客户每小时可能不会超过350个请求。”
似乎速率限制检查程序报告了我的未经授权的IP地址的速率限制(150),但是我的呼叫正在计算我的应用程序的速率限制(350)。
如何调整我的速率限制检查程序以实际检查应用程序的速率限制?
答案 0 :(得分:0)
重复创建Cursor
实例不会消耗任何API引用,因为它实际上并未向twitter发出请求。 Cursor
只是围绕不同分页方法的Tweepy包装器。调用next
或prev
方法迭代它会导致实际的API调用。
Twitter不再具有未经身份验证的API调用的概念(v1.1 API始终需要身份验证)。我认为问题在于您使用Cursor
。尝试只创建一次实例,并重复调用next
方法(确保捕获StopIteration
异常,因为next
是生成器。)