2016-08-13 16 views
0

我一直在用Twython聽Twitter的公共流,但生產服務器停止接收任何推文幾天。Twitter流媒體API沒有響應生產,但在開發服務器上確定

我創建了一個簡單的測試案例:

>>> 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的側列入黑名單。但是當我使用相同的標記集嘗試使用Twitter簽名生成器開發工具生成的curl命令執行相同的查詢時,該命令立即開始在開發和生產服務器上立即接收tweet ,沒有任何問題。我認爲這個捲曲測試消除了這些防火牆,黑名單或令牌問題選項。

您認爲問題可能是什麼?任何幫助是極大的讚賞。謝謝。

回答

0

它原來是服務器時鐘上AWS EC2漂移導致該認證由於過期的時間標記的使用,以失敗服務器。這也是Twython鎮壓例外,使案件更加模糊。

我試着與Twitter客戶端小鳥並獲得「未經授權」的迴應。然後我碰到this post

所以我做了一個時鐘同步和一切都恢復正常了:

sudo ntpdate -s time.nist.gov 
1

爲了讓更多的有識之士對這個問題和您的解決方案,我希望人們注意的是Twitter的認證機制使用OAuth要求查詢的日期時間作爲任何請求標頭的一部分提供(oauth_timestamp)。

當Twitter收到查詢時,他們將驗證oauth_timestamp不是太舊或不無效。當他們這樣做時,他們將驗證oauth_signature

大多數圖書館將使用當前機器的日期時間並用它來創建他們的請求。因此,當使用第三方工具訪問Twitter API時,請確保機器的DateTime正確設置。

一些更高級的庫將允許您指定一個將被調用來訪問DateTime的函數。如果您的軟件分發到不能確保DateTime有效的機器,這一點尤其有用。

我希望這是有道理的。

相關問題