X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=twitter_renderer.py;h=23c36f87131d64a12591f84f5c2e7b012a2479c8;hb=5ea88ab72e175e2d4f57ae8645ca6f825549a7a9;hp=1c9dbeebcf31e924f0ffb75e730921f3d04a3940;hpb=5e241dc47e497c547463cecc07946ea6882835a7;p=kiosk.git diff --git a/twitter_renderer.py b/twitter_renderer.py index 1c9dbee..23c36f8 100644 --- a/twitter_renderer.py +++ b/twitter_renderer.py @@ -1,19 +1,28 @@ -import file_writer +#!/usr/bin/env python3 + +import logging import random -import renderer -import profanity_filter import re -import secrets -import tweepy +from typing import Dict, List, Optional + +import tweepy # type: ignore +from scottutilz import profanity_filter + +import file_writer +import renderer +import kiosk_secrets as secrets -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() +logger = logging.getLogger(__name__) + + +class twitter_renderer(renderer.abstaining_renderer): + def __init__(self, name_to_timeout_dict: Dict[str, int]) -> None: + super().__init__(name_to_timeout_dict) + self.debug = True + self.tweets_by_author: Dict[str, List[tweepy.models.Status]] = {} + self.handles_by_author: Dict[str, str] = {} + self.filter = profanity_filter.ProfanityFilter() self.urlfinder = re.compile( "((http|https)://[\-A-Za-z0-9\\.]+/[\?\&\-A-Za-z0-9_\\.]+)" ) @@ -38,64 +47,95 @@ class twitter_renderer(renderer.debuggable_abstaining_renderer): auth.set_access_token(access_token, access_token_secret) self.api = tweepy.API(auth) - def debug_prefix(self): + def debug_prefix(self) -> str: return "twitter" - def linkify(self, value): + def linkify(self, value: str) -> str: return self.urlfinder.sub(r'\1', value) - def periodic_render(self, key): + def periodic_render(self, key: str) -> bool: if key == "Fetch Tweets": return self.fetch_tweets() elif key == "Shuffle Tweets": return self.shuffle_tweets() else: - raise error("Unexpected operation") + raise Exception("Unexpected operation") - def fetch_tweets(self): + def fetch_tweets(self) -> bool: try: tweets = self.api.home_timeline(tweet_mode="extended", count=200) - except: + except Exception as e: + logger.exception(e) print("Exception while fetching tweets!") return False for tweet in tweets: + # j = tweet._json + # import json + # print(json.dumps(j, indent=4, sort_keys=True)) + # print("------") + 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) + self.tweets_by_author[author] = [] + x = self.tweets_by_author[author] + x.append(tweet) return True - def shuffle_tweets(self): + def get_hashtags(self, tweet) -> str: + ret = " " + if "entities" in tweet._json: + entities = tweet._json["entities"] + if "hashtags" in entities: + for x in entities["hashtags"]: + ret += f'#{x["text"]}, ' + ret = re.sub(", $", "", ret) + return ret + + def get_media_url(self, tweet) -> Optional[str]: + if "entities" in tweet._json: + entities = tweet._json["entities"] + if "media" in entities: + media = entities["media"] + for x in media: + if "media_url_https" in x: + return x["media_url_https"] + return None + + def shuffle_tweets(self) -> bool: 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() + with file_writer.file_writer("twitter_10_3600.html") as f: + f.write("\n" % (author, handle)) + f.write('
") + f.write("

%s (@%s)

') + f.write('
\n') + f.write("
\n\n") return True @@ -105,7 +145,7 @@ class twitter_renderer(renderer.debuggable_abstaining_renderer): # "Shuffle Tweets" : 1}) # x = "bla bla bla https://t.co/EjWnT3UA9U bla bla" # x = t.linkify(x) -# print x +# print(x) # if t.fetch_tweets() == 0: # print("Error fetching tweets, none fetched.") # else: