2016-08-13 1 views
0

Ich habe den twitter öffentlichen Stream mit Twython ohne Probleme angehört, aber der Produktionsserver hörte auf, Tweets für ein paar Tage zu erhalten.Twitter-Streaming-API reagiert nicht auf die Produktion, aber OK auf dem Dev-Server

Ich habe einen einfachen Testfall erstellt:

>>> 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') 

Dieser Code-Schnipsel läuft auf dem Entwicklungsserver. Tweets fangen sofort an zu fließen. Bei der Produktion scheint es wieder zuzuhören, es werden keine Fehler geworfen, aber keine Tweets.

Ich dachte, es könnte die Firewall auf dem Server sein, oder der Server könnte auf Twitter Seite eine schwarze Liste gesetzt werden. Aber wenn ich die gleiche Abfrage mit curl Befehl von der Twitter-Signatur-Generator-Entwickler-Tool generiert, mit dem gleichen Token-Set, der Befehl beginnt sofort Tweets sowohl auf dem Entwicklungs- und Produktionsserver ohne irgendein Problem zu erhalten. Ich denke, dieser Curl-Test eliminiert diese Firewall-, Blacklist- oder Token-Probleme.

Was denken Sie, das Problem könnte sein? Jede Hilfe wird sehr geschätzt. Vielen Dank.

Antwort

0

Es stellte sich heraus Server-Uhr auf der AWS EC2 Server driften sein, der die Authentifizierung verursacht durch die Verwendung eines abgelaufenen Zeitstempel zum Scheitern verurteilt. Es war auch Twython unterdrücken die Ausnahme, die den Fall obskurer machte.

Ich versuchte mit dem Twitter-Client Birdy und erhalten Sie die "nicht autorisierte" Antwort. Dann bin ich auf this post gestoßen.

So machte ich einen Takt-Sync und alles ist wieder normal:

sudo ntpdate -s time.nist.gov 
1

mehr Einblick über das Problem und Ihre Lösung zu geben, würde ich die Leute beachten Sie gerne, dass Twitter-Authentifizierungsmechanismus OAuth verwendet, die erfordert die DateTime der Abfrage, die als Teil eines beliebigen Anfrage-Headers bereitgestellt werden soll (oauth_timestamp).

Wenn Twitter die Abfrage empfängt, werden sie überprüfen, dass die oauth_timestamp nicht zu alt oder nicht ungültig ist. Wenn sie das getan haben, werden sie die oauth_signature verifizieren.

Die meisten Bibliotheken verwenden die aktuelle Maschine DateTime und verwenden sie zum Erstellen ihrer Anforderung. Wenn Sie ein Drittanbieter-Tool für den Zugriff auf die Twitter-API verwenden, stellen Sie daher sicher, dass die DateTime des Computers korrekt eingerichtet ist.

Einige erweiterte Bibliotheken erlauben Ihnen, eine Funktion anzugeben, die aufgerufen wird, um auf DateTime zuzugreifen. Dies ist besonders nützlich, wenn Ihre Software auf Computer verteilt wird, für die Sie die Gültigkeit von DateTime nicht sicherstellen können.

Ich hoffe, das macht Sinn.

Verwandte Themen