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_3600.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()