3

我编写了一个脚本来遍历 Twitter 用户 ID 列表并将 follower_id 列表保存到文件中。我已经使用了几次,没有任何问题。对于长列表,我添加了这段代码来检查每个 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 简介:

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)。

如何调整我的速率限制检查器以再次实际检查应用程序的速率限制?

4

1 回答 1

0

重复创建Cursor实例不会用完任何 API 报价,因为它实际上并没有向 twitter 发出请求。ACursor只是围绕不同分页方法的 Tweepy 包装器。调用nextprev迭代它的方法会导致实际的 API 调用。

Twitter 不再有未经身份验证的 API 调用的概念(v1.1 API 始终需要身份验证)。我认为问题在于您使用Cursor. 尝试只创建一次实例,并next重复调用该方法(确保捕获StopIteration异常,就像next生成器一样)。

于 2014-03-13T10:43:37.677 回答