Initial commit
[kiosk.git] / seattletimes_rss_renderer.py
1 import datetime
2 import generic_news_rss_renderer as gnrss
3 import sets
4
5 class seattletimes_rss_renderer(gnrss.generic_news_rss_renderer):
6     interesting_categories = sets.ImmutableSet([
7         'Nation',
8         'World',
9         'Life',
10         'Technology'
11         'Local News',
12         'Food',
13         'Drink',
14         'Today File',
15         'Seahawks',
16         'Oddities',
17         'Packfic NW',
18         'Home',
19         'Garden',
20         'Travel',
21         'Outdoors',
22     ])
23
24     def __init__(self, name_to_timeout_dict, feed_site, feed_uris, page_title):
25         super(seattletimes_rss_renderer, self).__init__(
26             name_to_timeout_dict,
27             feed_site,
28             feed_uris,
29             page_title)
30         self.oldest = datetime.datetime.now() - datetime.timedelta(14)
31         self.debug_print("oldest story we'll keep: %s" % self.oldest)
32
33     def debug_prefix(self):
34         return "seattletimes"
35
36     def get_headlines_page_prefix(self):
37         return "seattletimes-nonnews"
38
39     def get_details_page_prefix(self):
40         return "seattletimes-details-nonnews"
41
42     def should_use_https(self):
43         return True
44
45     def item_is_interesting_for_headlines(self, title, description, item):
46         if item.tag != "item":
47             self.debug_print("Item.tag isn't item?!")
48             return False
49
50         details = {}
51         for detail in item.getchildren():
52             self.debug_print("detail %s => %s (%s)" % (detail.tag,
53                                                        detail.attrib,
54                                                        detail.text))
55             if detail.text != None:
56                 details[detail.tag] = detail.text
57         if "category" not in details:
58             self.debug_print("No category in details?!")
59             self.debug_print(details)
60             return False
61
62         interesting = False
63         for x in seattletimes_rss_renderer.interesting_categories:
64             if x in details["category"]:
65                 self.debug_print("%s looks like a good category." % x)
66                 interesting = True
67         if not interesting:
68             return False
69
70         if 'enclosure' in details:
71             if 'pubDate' in details:
72                 x = details['pubDate']
73                 x = x.rsplit(' ', 1)[0]
74                 # Fri, 13 Nov 2015 10:07:00
75                 dt = datetime.datetime.strptime(x, '%a, %d %b %Y %H:%M:%S')
76                 if dt < self.oldest:
77                     self.debug_print("%s is too old." % (
78                         details["pubDate"]))
79                     return False
80         return True
81
82     def item_is_interesting_for_article(self, title, description, item):
83         return len(description) >= 65
84
85 #x = seattletimes_rss_renderer({"Test", 123},
86 #                              "www.seattletimes.com",
87 #                              [ "/life/feed/" ],
88 #                              "nonnews")
89 #x.periodic_render("Fetch News")
90 #x.periodic_render("Shuffle News")