sql >> Base de Datos >  >> NoSQL >> MongoDB

Error al obtener Tweets con Tweepy

Esta IncompleteRead El error generalmente tiende a ocurrir cuando su consumo de tweets entrantes comienza a quedarse atrás , lo que tiene sentido en su caso dada su larga lista de términos para rastrear. El enfoque general que la mayoría de la gente parece estar tomando (incluido yo mismo) es simplemente suprimir este error y continuar con su colección (vea el enlace de arriba).

No puedo recordar completamente si IncompleteRead cerrará su conexión (creo que podría hacerlo, porque mi solución personal vuelve a conectar mi transmisión), pero puede considerar algo como lo siguiente (Solo voy a improvisar, probablemente necesite volver a trabajar para su situación ):

# 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
...

Una vez más, solo lo estoy improvisando, pero la moraleja de la historia es que el enfoque general adoptado aquí es suprimir el error y continuar.

EDITAR (11/10/2016): Solo un dato útil para cualquiera que maneje grandes volúmenes de tweets:una forma de manejar este caso sin perder el tiempo de conexión o los tweets sería dejar caer los tweets entrantes en una solución de cola (RabbitMQ, Kafka, etc.) para que una aplicación los ingiera o procese leyendo desde esa cola.

Esto mueve el cuello de botella de la API de Twitter a su cola, que no debería tener problemas para esperar a que consuma los datos.

Esta es más una solución de software de "producción", por lo que si no le importa perder tweets o volver a conectarse, la solución anterior sigue siendo perfectamente válida.