X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=stranger_renderer.py;h=0c566d93e3123a5e18f52a5960475140b84ac66c;hb=da3a11e9fcea80a7700eb54605512d331a9ec612;hp=a68c88df72c812b8afc8257247d53f8b9f4da4cb;hpb=c06bfef53f70551e7920bc4facce27f47b89e2ba;p=kiosk.git diff --git a/stranger_renderer.py b/stranger_renderer.py index a68c88d..0c566d9 100644 --- a/stranger_renderer.py +++ b/stranger_renderer.py @@ -1,37 +1,41 @@ #!/usr/bin/env python3 -from bs4 import BeautifulSoup import datetime import http.client -import random +import logging import re -from typing import Dict, List +from typing import Dict + +from bs4 import BeautifulSoup # type: ignore import file_writer import grab_bag import page_builder import profanity_filter import renderer -import renderer_catalog -class stranger_events_renderer(renderer.debuggable_abstaining_renderer): +logger = logging.getLogger(__file__) + + +class stranger_events_renderer(renderer.abstaining_renderer): def __init__(self, name_to_timeout_dict: Dict[str, int]): - super(stranger_events_renderer, self).__init__(name_to_timeout_dict, True) + super().__init__(name_to_timeout_dict) self.feed_site = "everout.com" self.events = grab_bag.grab_bag() + self.pfilter = profanity_filter.ProfanityFilter() def debug_prefix(self) -> str: return "stranger" def periodic_render(self, key: str) -> bool: - self.debug_print("called for action %s" % key) + logger.debug("called for action %s" % key) if key == "Fetch Events": return self.fetch_events() elif key == "Shuffle Events": return self.shuffle_events() else: - raise error("Unknown operaiton") + raise Exception("Unknown operaiton") def get_style(self): return """ @@ -78,7 +82,7 @@ class stranger_events_renderer(renderer.debuggable_abstaining_renderer): layout.set_style(self.get_style()) subset = self.events.subset(4) if subset is None: - self.debug_print("Not enough events to build page.") + logger.debug("Not enough events to build page.") return False for msg in subset: @@ -89,72 +93,67 @@ class stranger_events_renderer(renderer.debuggable_abstaining_renderer): def fetch_events(self) -> bool: self.events.clear() - feed_uris = [ - "/stranger-seattle/events/?page=1", - "/stranger-seattle/events/?page=2", - "/stranger-seattle/events/?page=3", - ] + feed_uris = [] now = datetime.datetime.now() ts = now + datetime.timedelta(1) tomorrow = datetime.datetime.strftime(ts, "%Y-%m-%d") - feed_uris.append(f"/stranger-seattle/events/?start-date={tomorrow}") + feed_uris.append(f"/seattle/events/?start-date={tomorrow}") delta = 5 - now.weekday() if delta <= 0: delta += 7 if delta > 1: ts = now + datetime.timedelta(delta) next_sat = datetime.datetime.strftime(ts, "%Y-%m-%d") - feed_uris.append(f"/stranger-seattle/events/?start-date={next_sat}&page=1") - feed_uris.append(f"/stranger-seattle/events/?start-date={next_sat}&page=2") + feed_uris.append(f"/seattle/events/?start-date={next_sat}&page=1") + feed_uris.append(f"/seattle/events/?start-date={next_sat}&page=2") delta += 1 if delta > 1: ts = now + datetime.timedelta(delta) next_sun = datetime.datetime.strftime(ts, "%Y-%m-%d") - feed_uris.append(f"/stranger-seattle/events/?start-date={next_sun}&page=1") - feed_uris.append(f"/stranger-seattle/events/?start-date={next_sun}&page=2") + feed_uris.append(f"/seattle/events/?start-date={next_sun}&page=1") + feed_uris.append(f"/seattle/events/?start-date={next_sun}&page=2") - filter = profanity_filter.profanity_filter() for uri in feed_uris: try: - self.debug_print("fetching 'https://%s%s'" % (self.feed_site, uri)) + logger.debug("fetching 'https://%s%s'" % (self.feed_site, uri)) self.conn = http.client.HTTPSConnection(self.feed_site) self.conn.request("GET", uri, None, {"Accept-Charset": "utf-8"}) response = self.conn.getresponse() if response.status != 200: - self.debug_print("Connection failed, status %d" % (response.status)) - self.debug_print(response.getheaders()) + logger.debug("Connection failed, status %d" % (response.status)) + logger.debug(str(response.getheaders())) continue raw = response.read() - except: - self.debug_print("Exception talking to the stranger, ignoring.") + except Exception: + logger.debug("Exception talking to the stranger, ignoring.") continue soup = BeautifulSoup(raw, "html.parser") for x in soup.find_all("div", class_="row event list-item mb-3 py-3"): text = x.get_text() - if filter.contains_bad_words(text): + if self.pfilter.contains_bad_word(text): continue - raw = str(x) - raw = raw.replace( + raw_str = str(x) + raw_str = raw_str.replace( 'src="/', 'align="left" src="https://www.thestranger.com/' ) - raw = raw.replace('href="/', 'href="https://www.thestranger.com/') - raw = raw.replace("FREE", "Free") - raw = raw.replace("Save Event", "") - raw = re.sub("^\s*$", "", raw, 0, re.MULTILINE) - raw = re.sub( + raw_str = raw_str.replace('href="/', 'href="https://www.thestranger.com/') + raw_str = raw_str.replace("FREE", "Free") + raw_str = raw_str.replace("Save Event", "") + raw_str = re.sub("^\s*$", "", raw_str, 0, re.MULTILINE) + raw_str = re.sub( ']*class="calendar-post-ticket"[^<>]*>.*', "", - raw, + raw_str, 0, re.DOTALL | re.IGNORECASE, ) - self.events.add(raw) - self.debug_print(f"fetched {self.events.size()} events so far.") + self.events.add(raw_str) + logger.debug(f"fetched {self.events.size()} events so far.") return self.events.size() > 0 # Test -# x = stranger_events_renderer({"Test", 123}) -# x.periodic_render("Fetch Events") -# x.periodic_render("Shuffle Events") +#x = stranger_events_renderer({"Test", 123}) +#x.periodic_render("Fetch Events") +#x.periodic_render("Shuffle Events")