Twitter'ın kullanıcı akışlarından güçlü bir şekilde faydalanmak için Requests kullanmaya çalışıyorum. Şimdiye kadar aşağıdaki temel çalışma örneği üretilen ettik:Python'u kullanma Twitter'ın kullanıcı akışlarını tüketmek için kitaplık istekler kitaplığı - bağlantının kesilmesi nasıl algılanır?
"""
Example of connecting to the Twitter user stream using Requests.
"""
import sys
import json
import requests
from oauth_hook import OAuthHook
def userstream(access_token, access_token_secret, consumer_key, consumer_secret):
oauth_hook = OAuthHook(access_token=access_token, access_token_secret=access_token_secret,
consumer_key=consumer_key, consumer_secret=consumer_secret,
header_auth=True)
hooks = dict(pre_request=oauth_hook)
config = dict(verbose=sys.stderr)
client = requests.session(hooks=hooks, config=config)
data = dict(delimited="length")
r = client.post("https://userstream.twitter.com/2/user.json", data=data, prefetch=False)
# TODO detect disconnection somehow
# https://github.com/kennethreitz/requests/pull/200/files#L13R169
# Use a timeout? http://pguides.net/python-tutorial/python-timeout-a-function/
for chunk in r.iter_lines(chunk_size=1):
if chunk and not chunk.isdigit():
yield json.loads(chunk)
if __name__ == "__main__":
import pprint
import settings
for obj in userstream(access_token=settings.ACCESS_TOKEN, access_token_secret=settings.ACCESS_TOKEN_SECRET, consumer_key=settings.CONSUMER_KEY, consumer_secret=settings.CONSUMER_SECRET):
pprint.pprint(obj)
Ancak, incelikle bağlantı kesintileri idare edebilmek gerekir. Şu anda, akış kesildiğinde, yukarıdaki yalnızca kilitleniyor ve istisnalar oluşmuyor.
Bunu başarmanın en iyi yolu ne olurdu? Bunu urllib3 bağlantı havuzu üzerinden algılamanın bir yolu var mı? Zaman aşımı kullanmalı mıyım?