Twitter 流式传输 API 在生产环境中没有响应,但在开发服务器上正常
Twitter streaming API not responding on production, but OK on dev server
我一直在使用 Twython 收听 Twitter public 流,没有任何问题,但生产服务器有几天停止接收任何推文。
我创建了一个简单的测试用例:
>>> 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')
此代码段在开发服务器上运行。推文立即开始涌入。在生产中,它似乎又在倾听,没有抛出任何错误,但没有推文。
我认为可能是服务器上的防火墙,或者服务器可能在推特方面黑名单。但是当我使用 Twitter 签名生成器开发工具生成的 curl 命令尝试相同的查询时,使用相同的令牌集,该命令立即开始接收推文 both on the development和生产服务器 没有任何问题。我认为这个 curl 测试消除了这些防火墙、黑名单或令牌问题选项。
您认为问题可能出在哪里?任何帮助是极大的赞赏。谢谢
事实证明是 AWS EC2 服务器上的 服务器时钟漂移 由于使用了过期的时间戳。也是 Twython 抑制了使情况更加模糊的异常。
我尝试使用 Twitter 客户端 Birdy 并获得 "Unauthorized" 响应。然后我遇到了this post。
所以我进行了时钟同步,一切又恢复正常了:
sudo ntpdate -s time.nist.gov
为了更深入地了解问题和您的解决方案,我希望人们注意到 Twitter 身份验证机制使用 OAuth,它要求在任何请求中提供查询的日期时间 header(oauth_timestamp
).
当 Twitter 收到查询时,他们将验证 oauth_timestamp
是否太旧或是否无效。当他们完成后,他们将验证 oauth_signature
.
大多数图书馆将使用当前机器日期时间并使用它来创建他们的请求。因此,当使用第三方工具访问 Twitter 时 API 确保机器的日期时间设置正确。
一些更高级的库将允许您指定将被调用以访问 DateTime 的函数。如果您的软件分发到您无法确保 DateTime 有效性的计算机,这将特别有用。
我希望这是有道理的。
我一直在使用 Twython 收听 Twitter public 流,没有任何问题,但生产服务器有几天停止接收任何推文。
我创建了一个简单的测试用例:
>>> 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')
此代码段在开发服务器上运行。推文立即开始涌入。在生产中,它似乎又在倾听,没有抛出任何错误,但没有推文。
我认为可能是服务器上的防火墙,或者服务器可能在推特方面黑名单。但是当我使用 Twitter 签名生成器开发工具生成的 curl 命令尝试相同的查询时,使用相同的令牌集,该命令立即开始接收推文 both on the development和生产服务器 没有任何问题。我认为这个 curl 测试消除了这些防火墙、黑名单或令牌问题选项。
您认为问题可能出在哪里?任何帮助是极大的赞赏。谢谢
事实证明是 AWS EC2 服务器上的 服务器时钟漂移 由于使用了过期的时间戳。也是 Twython 抑制了使情况更加模糊的异常。
我尝试使用 Twitter 客户端 Birdy 并获得 "Unauthorized" 响应。然后我遇到了this post。
所以我进行了时钟同步,一切又恢复正常了:
sudo ntpdate -s time.nist.gov
为了更深入地了解问题和您的解决方案,我希望人们注意到 Twitter 身份验证机制使用 OAuth,它要求在任何请求中提供查询的日期时间 header(oauth_timestamp
).
当 Twitter 收到查询时,他们将验证 oauth_timestamp
是否太旧或是否无效。当他们完成后,他们将验证 oauth_signature
.
大多数图书馆将使用当前机器日期时间并使用它来创建他们的请求。因此,当使用第三方工具访问 Twitter 时 API 确保机器的日期时间设置正确。
一些更高级的库将允许您指定将被调用以访问 DateTime 的函数。如果您的软件分发到您无法确保 DateTime 有效性的计算机,这将特别有用。
我希望这是有道理的。