2013-01-05 68 views
6

我使用tweepy來傳輸一些tweet。這是我的程序:tweepy在幾個小時後停止

import tweepy 
import json 

consumer_key = "***" 
consumer_secret = "***" 
access_token_key="***" 
access_token_secret="***" 

auth1 = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth1.set_access_token(access_token_key, access_token_secret) 
api = tweepy.API(auth1) 

class StreamListener(tweepy.StreamListener): 
    def on_status(self, status): 
     try: 
      print status.text 
     except Exception, e: 
      print 'Encountered Exception Tweet:', e 
      pass 
     return True 

    def on_error(self, status_code): 
     print 'Encountered error with status code:' + repr(status_code) 
     return True 

    def on_data(self, data): 
     if 'in_reply_to_status_id' in data: 
      status = tweepy.Status.parse(self.api, json.loads(data)) 
      if self.on_status(status) is False: 
       return True 
     elif 'delete' in data: 
      delete = json.loads(data)['delete']['status'] 
      if self.on_delete(delete['id'], delete['user_id']) is False: 
       return True 
     elif 'limit' in data: 
      if self.on_limit(json.loads(data)['limit']['track']) is False: 
       return True 
     return True 

    def on_timeout(self): 
     print 'Timeout...' 
     return True 

l = StreamListener() 
streamer = tweepy.Stream(auth=auth1, listener=l, timeout=36000000) 

setTerms = ['enbrel'] 
streamer.filter(follow=None,track = setTerms) 

兩三個小時後,此過程停止。沒有信號錯誤,超時等。它只是沒有得到更多的鳴叫。我在哪裏做錯了?

+0

你已經能夠重現這種行爲?這可能是你的網絡連接有問題,或者Twitter的API有問題。 –

回答

7

嘗試添加on_disconnect方法到您的班級。這可能是Twitter斷開你(不是一個錯誤,也不是一個超時),你不處理這個。如果您願意,您可以以不同方式處理不同的Twitter錯誤。

def on_disconnect(self, notice): 
    """Called when twitter sends a disconnect notice 

    Disconnect codes are listed here: 
    https://dev.twitter.com/docs/streaming-apis/messages#Disconnect_messages_disconnect 
    """ 
    return 

退房tweepy的streaming module更多信息。

您還可以嘗試在您的streamer.filter()中啓用失速警告。下面是全部來自Tweepy源的選項,它們的默認值:

+0

我知道一箇舊的答案,但你能詳細解釋一下嗎?我想重新連接on_disconnect,但我不確定如何最好地做到這一點。 –

+0

我想通了:在我自己的循環中,檢查'stream.running'。如果不是,則刪除該流並在'n'秒後啓動一個新流。 –

1

您可能要開始通過API使用時間來開始

api = tweepy.API(auth1,timeout=60)