2013-01-05 18 views
6

मैं कुछ ट्वीट स्ट्रीमिंग के लिए tweepy का उपयोग करता हूं। यह मेरी प्रक्रिया है:कुछ घंटों के बाद 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

साथ शुरू करने के लिए आप इस व्यवहार पुन: पेश करने में सक्षम किया गया है चाहते हो सकता है? यह आपके नेटवर्क कनेक्शन, या ट्विटर की एपीआई में समस्याएं हो सकती है। –

उत्तर

7

अपनी कक्षा में on_disconnect विधि जोड़ने का प्रयास करें। यह हो सकता है कि ट्विटर आपको डिस्कनेक्ट कर रहा है (कोई त्रुटि नहीं, टाइमआउट भी नहीं) और आप इसे संभाल नहीं सकते हैं। यदि आप चाहें तो अलग-अलग ट्विटर त्रुटियों को अलग-अलग संभाल सकते हैं। अधिक जानकारी के लिए बाहर tweepy की streaming module

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 

चेक।

आप अपने streamer.filter() में स्टाल चेतावनियां सक्षम करने का भी प्रयास कर सकते हैं। नीचे सभी विकल्प और Tweepy स्रोत से उनके डिफ़ॉल्ट मानों हैं:

+0

मुझे पता है कि एक पुराना जवाब है, लेकिन क्या आप इस पर थोड़ा विस्तार कर सकते हैं? मैं on_disconnect को फिर से कनेक्ट करना चाहता हूं, लेकिन मुझे यह सुनिश्चित नहीं है कि यह कैसे करना है। –

+0

मैंने इसे समझ लिया: अपने स्वयं के पाश में, 'stream.running' की जांच करें। यदि ऐसा नहीं है, तो स्ट्रीम हटाएं और 'n' सेकंड के बाद एक नया प्रारंभ करें। –

1

आप एक समय बाहर के साथ आरंभ करने के लिए एपीआई

api = tweepy.API(auth1,timeout=60) 
संबंधित मुद्दे