Ho un comando di gestione Django, lanciato tramite supervisord, che utilizza tweepy per utilizzare l'API di streaming di Twitter.Tweepy SSLError
L'agente funziona abbastanza bene, tuttavia, ho notato nei registri che c'è un errore SSLE ogni 10-15 minuti e supervisord sta rilanciando l'agente.
Il pacchetto tweepy è l'ultima versione 1.11. Il server è ubuntu 12.04 LTS. Ho provato a installare il cacert nella catena di chiavi come indicato nel link sottostante, ma senza fortuna.
Twitter API SSL Root CA Certificate
Qualche suggerimento?
[2012-08-26 19:28:15,656: ERROR] Error establishing the connection
Traceback (most recent call last):.../.../datasinks.py", line 102, in start
stream.filter(locations=self.locations)
File "/site/pythonenv/local/lib/python2.7/site-packages/tweepy/streaming.py", line 228, in filter
self._start(async)
File "/site/pythonenv/local/lib/python2.7/site-packages/tweepy/streaming.py", line 172, in _start
self._run()
File "/site/pythonenv/local/lib/python2.7/site-packages/tweepy/streaming.py", line 117, in _run
self._read_loop(resp)
File "/site/pythonenv/local/lib/python2.7/site-packages/tweepy/streaming.py", line 150, in _read_loop
c = resp.read(1)
File "/usr/lib/python2.7/httplib.py", line 541, in read
return self._read_chunked(amt)
File "/usr/lib/python2.7/httplib.py", line 574, in _read_chunked
line = self.fp.readline(_MAXLINE + 1)
File "/usr/lib/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
File "/usr/lib/python2.7/ssl.py", line 241, in recv
return self.read(buflen)
File "/usr/lib/python2.7/ssl.py", line 160, in read
return self._sslobj.read(len)
SSLError: The read operation timed out
Di seguito è riportato uno schema del codice.
from tweepy import API, OAuthHandler
from tweepy.streaming import StreamListener, Stream
# snip other imports
class TwitterSink(StreamListener, TweetSink):
def __init__(self):
self.auth = OAuthHandler(settings.TWITTER_OAUTH_CONSUMER_KEY, settings.TWITTER_OAUTH_CONSUMER_SECRET)
self.auth.set_access_token(settings.TWITTER_OAUTH_ACCESS_TOKEN_KEY, settings.TWITTER_OAUTH_ACCESS_TOKEN_SECRET)
self.locations = '' # Snip for brevity
def start(self):
try:
stream = Stream(self.auth, self,timeout=60, secure=True)
stream.filter(locations=self.locations)
except SSLError as e:
logger.exception("Error establishing the connection")
except IncompleteRead as r:
logger.exception("Error with HTTP connection")
# snip on_data()
# snip on_timeout()
# snip on_error()
Che cosa succede se si imposta 'timeout' a qualcosa di molto più grande? Sospetto che il tuo 'Stream' stia scadendo perché occasionalmente supera i 60 secondi senza ricevere un aggiornamento. –
È necessario prendere in considerazione l'apertura di un problema su [GitHub] (https://github.com/tweepy/tweepy) se non lo si è già fatto. –