【问题标题】:Avoid 420s with Streaming API?使用 Streaming API 避免 420?
【发布时间】:2012-11-06 11:58:49
【问题描述】:

我有一个 python 脚本,它使用基本身份验证和 tweetstream 模块连接到 Twitter Streaming API

我每分钟收集大约 10 条推文。
我遇到了断断续续的情况,因此目前正在记录它们发生的频率。

我一直在达到我的速率限制并收到 420 个 HTTP 错误。

我知道对于搜索 API,使用 OAuth 身份验证可以获得更高的配额。对于流媒体,我找不到任何关于基本和 OAuth 之间速率限制差异的参考。无论如何,我正在使用的 python Tweetstream 似乎不支持流 API。

我注意到Ruby version of Tweetstream 支持 OAuth,但我做这个项目是为了学习 python。

通过阅读Twitter help,它谈到了“退避策略”并提到:

必须在几分钟内停止进一步的连接尝试 如果收到 HTTP 420 响应。

我不再收到错误,但一直在尝试在我的代码中制定更好的逻辑以避免永久出现这些错误。

我目前的建议如下,现在它会等待 200 秒,然后再尝试重新连接。

while True:
    try:
        with tweetstream.FilterStream(uname, passwd, locations=extent) as stream:
            # do stuff
    except tweetstream.ConnectionError as e:
     print e.message + " time: " + datetime.now
     time.sleep(200)
     pass
    except tweetstream.AuthenticationError as e:
     now = datetime.datetime.now()
     print e.message  + " time: " + str(now)
     pass

我的问题是 - 这是避免从 Twitter 接收 420 错误的好方法吗?对 Twitter API 比较熟悉的朋友,能推荐一下方法吗?

【问题讨论】:

    标签: python twitter tweetstream twitter-streaming-api


    【解决方案1】:

    420

    利率有限。可能的原因有:

    短时间内登录尝试次数过多。跑太多 使用同一帐户进行身份验证的同一应用程序的副本 名字。

    对于如此低的推文流传输速率(每分钟 10 条推文),您不应该遇到速率限制错误,实际上速率限制不适用于流媒体,因为 twitter 不会为您提供比您所能拥有的更多的推文,大多数可能由于短时间内登录尝试次数过多,您会收到此错误。所以等待一段时间是个好主意(我确实在每次断开连接之间等待 10 秒,这种情况很少发生)。确保您的流媒体不会因为内部编程异常而不是 Twitter 异常而中断。此外,您还应该查看以下建议。

    您应该检查只有一个流通过相同的 ip 运行。 Twitter 允许一个流媒体以每个 ip 和每个基本身份验证运行。因此,请确保您正在运行来自特定 ip 的唯一流,并且您为 oauth 身份验证提供的凭据仅用于此流。这样就不会出现 420 错误。

    但由于某种原因,如果您的流媒体因 Twitter 异常或内部编程异常而中断,您应该等待一段时间再重新连接,以防止出现更多异常。 Twitter 还会在响应代码标头中返回您在重新连接之前需要等待多长时间(下面的用于搜索,但也应包含在流中)。

    超出 Search API 速率限制的应用程序 将收到 HTTP 420 响应代码。观看是最佳实践 对于这种错误情况并尊重 Retry-After 标头,它是 回来。 Retry-After 标头的值是您的秒数 应用程序应在从 Search API 请求日期之前等待 再次。

    【讨论】:

    • 回复。 Retry-After 标头 - 流式传输时不存在,因为客户端不断接收块,并且它接收的唯一标头来自原始流设置响应。我维持当前的Twitter library for Node,并且让流媒体遵守未记录的速率限制一直是一个持续的挑战。
    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 2014-02-14
    • 2019-06-08
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多