twitter: handle twitter API errors better

i think i need to make this client (re)connect on demand or something,
though, i'm getting a lot of timeouts
This commit is contained in:
Brian S. Stephan 2015-07-11 08:10:35 -05:00
parent 6bf2732d7f
commit bf0445149b
1 changed files with 22 additions and 9 deletions

View File

@ -6,6 +6,7 @@ import logging
import thread import thread
import time import time
import requests
import twython import twython
from django.conf import settings from django.conf import settings
@ -25,7 +26,9 @@ class Twitter(Plugin):
"""Initialize some stuff.""" """Initialize some stuff."""
self.authed = False self.authed = False
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) self.twit_args = {'timeout': 30.0}
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
client_args=self.twit_args)
self.temp_token = None self.temp_token = None
self.temp_token_secret = None self.temp_token_secret = None
@ -54,14 +57,17 @@ class Twitter(Plugin):
twittersettings = TwitterClient.objects.get(pk=1) twittersettings = TwitterClient.objects.get(pk=1)
if twittersettings.oauth_token != '' and twittersettings.oauth_token_secret != '': if twittersettings.oauth_token != '' and twittersettings.oauth_token_secret != '':
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
twittersettings.oauth_token, twittersettings.oauth_token_secret) twittersettings.oauth_token, twittersettings.oauth_token_secret,
client_args=self.twit_args)
if self.twit.verify_credentials(): if self.twit.verify_credentials():
self.authed = True self.authed = True
log.debug("Logged in to Twitter with saved token.") log.debug("Logged in to Twitter with saved token.")
else: else:
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
client_args=self.twit_args)
else: else:
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
client_args=self.twit_args)
except TwitterClient.DoesNotExist: except TwitterClient.DoesNotExist:
log.error("twitter settings module does not exist") log.error("twitter settings module does not exist")
@ -127,6 +133,8 @@ class Twitter(Plugin):
tweet = tweets[-1*index] tweet = tweets[-1*index]
return self._return_tweet_or_retweet_text(event, tweet=tweet, print_source=print_source, return self._return_tweet_or_retweet_text(event, tweet=tweet, print_source=print_source,
print_id=print_id) print_id=print_id)
except requests.exceptions.SSLError as ssle:
return self.bot.reply(event, "Couldn't obtain status: {0:s}, you can maybe try again".format(ssle))
except twython.exceptions.TwythonError as e: except twython.exceptions.TwythonError as e:
return self.bot.reply(event, "Couldn't obtain status: {0:s}".format(e)) return self.bot.reply(event, "Couldn't obtain status: {0:s}".format(e))
except ValueError as e: except ValueError as e:
@ -178,10 +186,12 @@ class Twitter(Plugin):
try: try:
if not self.twit.verify_credentials(): if not self.twit.verify_credentials():
self.authed = False self.authed = False
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
client_args=self.twit_args)
except twython.TwythonError: except twython.TwythonError:
self.authed = False self.authed = False
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
client_args=self.twit_args)
auth = self.twit.get_authentication_tokens() auth = self.twit.get_authentication_tokens()
self.temp_token = auth['oauth_token'] self.temp_token = auth['oauth_token']
@ -194,11 +204,13 @@ class Twitter(Plugin):
oauth_verifier = match.group(1) oauth_verifier = match.group(1)
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
self.temp_token, self.temp_token_secret) self.temp_token, self.temp_token_secret,
client_args=self.twit_args)
final_step = self.twit.get_authorized_tokens(oauth_verifier) final_step = self.twit.get_authorized_tokens(oauth_verifier)
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET, self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
final_step['oauth_token'], final_step['oauth_token_secret']) final_step['oauth_token'], final_step['oauth_token_secret'],
client_args=self.twit_args)
try: try:
twittersettings = TwitterClient.objects.get(pk=1) twittersettings = TwitterClient.objects.get(pk=1)
@ -212,7 +224,8 @@ class Twitter(Plugin):
# print timeline stuff. this will set up the appropriate timer # print timeline stuff. this will set up the appropriate timer
return self.bot.reply(event, "The bot is now logged in.") return self.bot.reply(event, "The bot is now logged in.")
else: else:
self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET) self.twit = twython.Twython(settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET,
client_args=self.twit_args)
return self.bot.reply(event, "The bot was not able to authenticate.") return self.bot.reply(event, "The bot was not able to authenticate.")
except TwitterClient.DoesNotExist: except TwitterClient.DoesNotExist:
log.error("twitter settings object does not exist") log.error("twitter settings object does not exist")