MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Errore durante il recupero dei Tweet con Tweepy

Questo IncompleteRead l'errore generalmente tende a verificarsi quando il consumo di tweet in arrivo inizia a rimanere indietro , il che ha senso nel tuo caso dato il lungo elenco di termini da monitorare. L'approccio generale che la maggior parte delle persone sembra adottare (me compreso) è semplicemente quello di sopprimere questo errore e continuare la tua raccolta (vedi il link sopra).

Non riesco a ricordare completamente se IncompleteRead chiuderà la tua connessione (penso che potrebbe, perché la mia soluzione personale riconnette il mio stream), ma potresti prendere in considerazione qualcosa di simile al seguente (lo farò semplicemente al volo, probabilmente ha bisogno di essere rielaborato per la tua situazione ):

# from httplib import IncompleteRead # Python 2
from http.client import IncompleteRead # Python 3
...
while True:
    try:
        # Connect/reconnect the stream
        stream = Stream(auth, listener)
        # DON'T run this approach async or you'll just create a ton of streams!
        stream.filter(terms)
    except IncompleteRead:
        # Oh well, reconnect and keep trucking
        continue
    except KeyboardInterrupt:
        # Or however you want to exit this loop
        stream.disconnect()
        break
...

Ancora una volta, mi limito a spiegarlo, ma la morale della storia è che l'approccio generale adottato qui è quello di sopprimere l'errore e continuare.

MODIFICA (11/10/2016): Solo un bocconcino utile per chiunque abbia a che fare con volumi molto grandi di tweet:un modo per gestire questo caso senza perdere tempo di connessione o tweet significherebbe far cadere i tuoi tweet in arrivo in una soluzione di coda (RabbitMQ, Kafka, ecc.) da ingerire/elaborare da un'applicazione che legge da quella coda.

Questo sposta il collo di bottiglia dall'API di Twitter alla tua coda, che non dovrebbe avere problemi ad aspettare che tu consumi i dati.

Questa è più una soluzione software di "produzione", quindi se non ti interessa perdere tweet o riconnetterti, la soluzione sopra è ancora perfettamente valida.