Python Tweepy-尽管资源已满,但超出了速率限制

时间:2018-08-17 03:52:45

标签: tweepy

我不想从头开始研究代码,而是想从输出开始,显示相关代码,然后然后问我的问题。

接收直接消息时,每15分钟限制为15 dm呼叫。每个developer.twitter

15分钟Windows

  

费率上限分为15分钟间隔。所有端点都需要身份验证,因此没有未经身份验证的呼叫和速率限制的概念。   最初有两个存储段可用于GET请求:每15分钟15个呼叫,每15分钟180个呼叫。

以下是显示我所在位置的输出

[D]irect Message Read Tries left:       300/300

[*] Exception           | Hit rate limit. Waiting 15m before trying again       | [{u'message': u'Rate limit exceeded.', u'code': 88}]
 |  4.75m/15m complete  | Attetmpt 2

要接收消息,请运行以下命令:

def make_dm(_count):
    dm_obj = api.direct_messages(count=_count)
    cr_at  = []
    for _m in dm_obj:
        cr_at.append(str(_m.__dict__['created_at']))
    return dm_obj,cr_at

make_dm(5)[0]

使接收错误变得有趣的是,我准备好了这两部分,可以防止我超出限制。首先在这里定义api,并显式设置它以等待速率限制

api = tweepy.API(auth, wait_on_rate_limit=True)

然后在这里,我捕获到输出中看到的速率限制异常,并等待超过15m的时间段,此时我对direct_messages()可用的尝试次数应重新设置。

    except tweepy.error.RateLimitError as e:
        print '[*] Exception\t\t| Hit rate limit. Waiting 15m before trying again \t| {}'.format(e)
        send_attempts += 1
        counter = float(0)
        while counter < 15.25:

            time.sleep(15)
            counter += .25
            c = '\r |  {}m/15m complete\t| Attetmpt {}'.format(counter,send_attempts)
            sys.stdout.write(str('\r'+' '*60))
            sys.stdout.flush()
            sys.stdout.write(str(c))
            sys.stdout.flush()
        print
        continue

在这里,while循环的顶部是try语句,该语句获取直接消息资源值

while True:
    os.system('cls')
    res_left = api.rate_limit_status()['resources']['direct_messages']['/direct_messages']
    print '\n[D]irect Message Read Tries left:\t{}/{}\n'.format(res_left['remaining'],res_left['limit'])
    try:

[D]irect Message Read Tries left: 300/300的来源。

我所说的所有问题是, 还有其他我可能错过的原因可以解释为什么出现限速例外吗?如果没有,那么我到目前为止显示的内容有问题吗?

我尝试阅读API文档并查看了类似的问题,但是它们似乎没有答案,或者对我而言没有用。

代码中未显示的是make_dm()在15分钟的等待时间结束后被调用,并且 before 开始了循环。最初的direct_messages会预先加载,然后会侦听任何新内容。在等待期过后再次调用它以刷新结果(无论结果如何都存在等待),并且在15分钟之前再次运行循环时,它的确显示剩余的GET调用减少了。

没有包括try:中的任何内容,因为它所做的只是与dm_obj进行交互,但自身不会进行任何GET调用

更新 我将其运行了一个小时,并得到一个指示,表明它不再收到错误。我不确定是什么问题,但这是一个大约6个小时的问题。

0 个答案:

没有答案