I use tweepy for streaming some tweet. This is my procedure:
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)
After two / three hours this procedure stops. No signal error, timeout, etc.. It just does not get more tweet. Where am I doing wrong?
Try adding an on_disconnect
method to your class. It could be that Twitter is disconnecting you (not an error, also not a timeout) and you do not handle this. You can handle different Twitter errors differently, if you wish.
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
Check out the streaming
module of tweepy for more info.
You can also try to enable stall warnings in your streamer.filter()
. Below are all the options and their default values from the Tweepy source:
def filter(self, follow=None, track=None, async=False, locations=None,
stall_warnings=False, languages=None, encoding='utf8'):
You may want to initiate the api with a time out to start with
api = tweepy.API(auth1,timeout=60)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With