import file_writer import random import renderer import profanity_filter import re import secrets import tweepy class twitter_renderer(renderer.debuggable_abstaining_renderer): def __init__(self, name_to_timeout_dict): super(twitter_renderer, self).__init__(name_to_timeout_dict, False) self.debug = 1 self.tweets_by_author = dict() self.handles_by_author = dict() self.filter = profanity_filter.profanity_filter() self.urlfinder = re.compile( "((http|https)://[\-A-Za-z0-9\\.]+/[\?\&\-A-Za-z0-9_\\.]+)") # == OAuth Authentication == # # This mode of authentication is the new preferred way # of authenticating with Twitter. # The consumer keys can be found on your application's Details # page located at https://dev.twitter.com/apps (under "OAuth settings") consumer_key=secrets.twitter_consumer_key consumer_secret=secrets.twitter_consumer_secret # The access tokens can be found on your applications's Details # page located at https://dev.twitter.com/apps (located # under "Your access token") access_token=secrets.twitter_access_token access_token_secret=secrets.twitter_access_token_secret auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret) self.api = tweepy.API(auth) def debug_prefix(self): return "twitter" def linkify(self, value): return self.urlfinder.sub(r'\1', value) def periodic_render(self, key): if key == "Fetch Tweets": return self.fetch_tweets() elif key == "Shuffle Tweets": return self.shuffle_tweets() else: raise error('Unexpected operation') def fetch_tweets(self): try: tweets = self.api.home_timeline(tweet_mode='extended', count=200) except: print("Exception while fetching tweets!") return False for tweet in tweets: author = tweet.author.name author_handle = tweet.author.screen_name self.handles_by_author[author] = author_handle if author not in self.tweets_by_author: self.tweets_by_author[author] = list() l = self.tweets_by_author[author] l.append(tweet) return True def shuffle_tweets(self): authors = list(self.tweets_by_author.keys()) author = random.choice(authors) handle = self.handles_by_author[author] tweets = self.tweets_by_author[author] already_seen = set() f = file_writer.file_writer('twitter_10_none.html') f.write('\n' % (author, handle)) f.write('
') f.write('

%s (@%s)

') f.write('
\n') f.write('
\n\n') f.close() return True # Test t = twitter_renderer( {"Fetch Tweets" : 1, "Shuffle Tweets" : 1}) #x = "bla bla bla https://t.co/EjWnT3UA9U bla bla" #x = t.linkify(x) #print x if t.fetch_tweets() == 0: print("Error fetching tweets, none fetched.") else: t.shuffle_tweets()