Пример потоковой передачи запросов не работает в моей среде
Я пытался использовать API потоковой передачи Twitter, используя запросы Python.
Там естьпростой пример в документации:
import requests
import json
r = requests.post('https://stream.twitter.com/1/statuses/filter.json',
data={'track': 'requests'}, auth=('username', 'password'))
for line in r.iter_lines():
if line: # filter out keep-alive new lines
print json.loads(line)
Когда я выполню это, вызовrequests.post()
никогда не вернется. Я экспериментировал и доказал, что он определенно подключается к Twitter и получает данные от API. Однако вместо того, чтобы возвращать объект ответа, он просто сидит там и потребляет столько данных, сколько отправляет Twitter. Судя по приведенному выше коду, я бы ожидалrequests.post()
вернуть объект ответа с открытым подключением к Твиттеру, по которому я мог бы продолжать получать результаты в реальном времени.
(Чтобы доказать, что он получает данные, я подключился к Twitter, используя те же учетные данные в другой оболочке, после чего Twitter закрыл первое соединение, и вызов вернул объект ответа.r.content
Атрибут содержит все данные резервной копии, полученные при открытом соединении.)
В документации не упоминаются какие-либо другие шаги, необходимые дляrequests.post
вернуть, прежде чем использовать все предоставленные данные. Другие люди, кажется, используют подобный код, не сталкиваясь с этой проблемой, например,Вот.
Я использую:
Python 2.7 Ubuntu 11.04 Requests 0.14.0