Я относительно новичок в программировании, но просто пытаюсь понять, как работать с 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()
По сути, прямо сейчас я даже не пытаюсь что-то сделать с твитами, потому что я просто хочу посмотреть, смогу ли я заставить это работать без ошибки.