Twitter流API在生产服务器上没有响应,但在开发服务器上没有问题



我一直在用Twython听Twitter公共流,没有任何问题,但生产服务器已经停止接收任何tweet几天了。

我已经创建了一个简单的测试用例:
>>> from twython import TwythonStreamer
>>> 
>>> class TestStreamer(TwythonStreamer):
...     def on_success(self, data):
...         print data
... 
>>> stream = TestStreamer(KEY, SECRET, TOKEN, TOKEN_SECRET)
>>> 
>>> stream.statuses.filter(track='clinton,trump')

这个代码片段在开发服务器上运行。tweet立即开始涌入。在生产中,它似乎再次在倾听,没有抛出错误,但没有tweet。

我想可能是服务器上的防火墙,或者服务器可能在Twitter上被列入黑名单。但是,当我使用Twitter签名生成器开发工具生成的curl命令使用相同的令牌集尝试相同的查询时,该命令立即开始在开发和生产服务器上接收tweet ,没有任何问题。我认为这个curl测试消除了这些防火墙,黑名单或令牌问题选项。

你认为问题可能是什么?非常感谢任何帮助。谢谢。

为了更深入地了解问题和您的解决方案,我希望人们注意到Twitter身份验证机制使用OAuth,它要求查询的DateTime作为任何请求头(oauth_timestamp)的一部分提供。

当Twitter收到查询时,他们将验证oauth_timestamp不是太老或无效。当他们完成后,他们将验证oauth_signature

大多数库将使用当前机器的DateTime并使用它来创建请求。因此,当使用第三方工具访问Twitter API时,请确保机器的DateTime设置正确。

一些更高级的库将允许您指定一个函数,该函数将被调用以访问DateTime。如果您的软件分发到无法确保DateTime有效性的机器上,这一点特别有用。

原来是AWS EC2服务器上的服务器时钟漂移导致认证失败,因为使用了过期的时间戳。它也Twython抑制异常,这使得情况更加模糊。

我尝试使用Twitter客户端Birdy并获得"未经授权"的响应。然后我看到了这篇文章。

所以我做了一个时钟同步,一切又恢复正常了:

sudo ntpdate -s time.nist.gov

相关内容

  • 没有找到相关文章

最新更新