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