Update .gitignore
[kiosk.git] / seattletimes_rss_renderer.py
1 #!/usr/bin/env python3
2
3 import datetime
4 from typing import Dict, List
5 import xml
6
7 import generic_news_rss_renderer as gnrss
8
9
10 class seattletimes_rss_renderer(gnrss.generic_news_rss_renderer):
11     interesting_categories = frozenset(
12         [
13             "Nation",
14             "World",
15             "Life",
16             "Technology",
17             "Local News",
18             "Food",
19             "Drink",
20             "Today File",
21             "Seahawks",
22             "Oddities",
23             "Packfic NW",
24             "Home",
25             "Garden",
26             "Travel",
27             "Outdoors",
28         ]
29     )
30
31     def __init__(
32         self,
33         name_to_timeout_dict: Dict[str, int],
34         feed_site: str,
35         feed_uris: List[str],
36         page_title: str,
37     ):
38         super(seattletimes_rss_renderer, self).__init__(
39             name_to_timeout_dict, feed_site, feed_uris, page_title
40         )
41
42     def debug_prefix(self) -> str:
43         return "seattletimes"
44
45     def get_headlines_page_prefix(self) -> str:
46         return "seattletimes-nonnews"
47
48     def get_details_page_prefix(self) -> str:
49         return "seattletimes-details-nonnews"
50
51     def should_use_https(self) -> bool:
52         return True
53
54     def item_is_interesting_for_headlines(
55         self, title: str, description: str, item: xml.etree.ElementTree.Element
56     ) -> bool:
57         if item.tag != "item":
58             self.debug_print("Item.tag isn't item?!")
59             return False
60         if self.is_item_older_than_n_days(item, 14):
61             self.debug_print("%s: is too old!" % title)
62             return False
63
64         details = {}
65         for detail in item.getchildren():
66             self.debug_print(f"detail {detail.tag} => {detail.attrib} ({detail.text})")
67             if detail.text is not None:
68                 details[detail.tag] = detail.text
69         if "category" not in details:
70             self.debug_print("No category in details?!")
71             self.debug_print(details.__repr__())
72             return False
73         interesting = False
74         for x in seattletimes_rss_renderer.interesting_categories:
75             if x in details["category"]:
76                 self.debug_print("%s looks like a good category." % x)
77                 interesting = True
78         return interesting
79
80     def item_is_interesting_for_article(
81         self, title: str, description: str, item: xml.etree.ElementTree.Element
82     ) -> bool:
83         if self.is_item_older_than_n_days(item, 14):
84             self.debug_print("%s: is too old!" % title)
85             return False
86         return len(description) >= 65
87
88
89 # Test
90 # x = seattletimes_rss_renderer({"Test", 123},
91 #                              "www.seattletimes.com",
92 #                              [ "/life/feed/" ],
93 #                              "nonnews")
94 # x.periodic_render("Fetch News")
95 # x.periodic_render("Shuffle News")