Потоковые твиты с использованием Twython продолжают прерываться с помощью chunkedencodingerror

Я относительно новичок в программировании, но просто пытаюсь понять, как работать с API/данными, извлекая твиты из твиттера с помощью обертки твиттера Twython. каждый раз, когда я делаю это, я получаю следующие сообщения об ошибках около 5000 твитов. Я могу использовать потоковую передачу с другими оболочками, такими как python-twitter, и получить гораздо больше ~800 000 твитов без подобной ошибки.

--------------------------------------------------------------------------
ChunkedEncodingError                      Traceback (most recent call last)
<ipython-input-5-fdcf34f23648> in <module>()
      1 #[stream.statuses.filter(track='twitter')]
----> 2 stream.statuses.sample()

/Users/myusername/anaconda/lib/python2.7/site-packages/twython/streaming/types.pyc in sample(self, **params)
     75         url = 'https://stream.twitter.com/%s/statuses/sample.json' \
     76               % self.streamer.api_version
---> 77         self.streamer._request(url, params=params)
     78 
     79     def firehose(self, **params):

/Users/myusername/anaconda/lib/python2.7/site-packages/twython/streaming/api.pyc in _request(self, url, method, params)
    132             response = _send(retry_counter)
    133 
--> 134             for line in response.iter_lines(self.chunk_size):
    135                 if not self.connected:
    136                     break

/Users/myusername/anaconda/lib/python2.7/site-packages/requests/models.pyc in iter_lines(self, chunk_size, decode_unicode)
    643 
    644         for chunk in self.iter_content(chunk_size=chunk_size,
--> 645                                        decode_unicode=decode_unicode):
    646 
    647             if pending is not None:

/Users/myusername/anaconda/lib/python2.7/site-packages/requests/models.pyc in generate()
    616                         yield chunk
    617                 except IncompleteRead as e:
--> 618                     raise ChunkedEncodingError(e)
    619             except AttributeError:
    620                 # Standard file-like object.

ChunkedEncodingError: IncompleteRead(0 bytes read, 1 more expected)

Код, который я использую для его создания, выглядит следующим образом. Я уверен, что многого не хватает, включая способ обработки этого конкретного исключения.

from twython import TwythonStreamer
import numpy as np
import pandas as pd
from requests.exceptions import ChunkedEncodingError

counter = 0
class MyStreamer(TwythonStreamer):
    def on_success(self, data):
        global counter
        #if 'text' in data:
            #print data['text'].encode('utf-8')
        counter+=1
        print counter

    def on_error(self, status_code, data):
        print status_code

        # Want to stop trying to get data because of the error?
        # Uncomment the next line!
        # self.disconnect()

stream = MyStreamer(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
stream.statuses.sample()

По сути, прямо сейчас я даже не пытаюсь что-то сделать с твитами, потому что я просто хочу посмотреть, смогу ли я заставить это работать без ошибки.


person imightlose    schedule 27.08.2014    source источник


Ответы (1)


Ну, я не понял, в чем причина ошибки, но если я изменю последние строки кода, это может сработать. Так:

def streamed():
    while True:
        try:
            stream = MyStreamer(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
            stream.statuses.filter(track='twitter', stall_warnings=True)
        except  ChunkedEncodingError:
            continue

streamed()

Это заставляет стример снова работать, когда он ошибается. Я также должен был добавить

return True

к функциям в классе mystreamer.

Этот ответ также помог раньше: Как перезапустить скрипт tweepy ошибки?

person imightlose    schedule 27.08.2014
comment
Согласно обсуждению на странице Twython Github, это, вероятно, указывает на то, что ваш процесс отстает, и Twitter сбрасывает очередь. Поэтому, хотя ваше решение будет работать, вы, вероятно, пропустите некоторые твиты из потока. См. github.com/ryanmcgrath/twython/issues/288. - person Martin; 04.01.2015