2012-09-14 13 views
6

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?

cevap

İlgili konular