diff options
Diffstat (limited to 'afeedprocessor/afeedparser.py')
-rw-r--r-- | afeedprocessor/afeedparser.py | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/afeedprocessor/afeedparser.py b/afeedprocessor/afeedparser.py new file mode 100644 index 0000000..0c23187 --- /dev/null +++ b/afeedprocessor/afeedparser.py | |||
@@ -0,0 +1,59 @@ | |||
1 | import feedparser | ||
2 | import PyRSS2Gen | ||
3 | import datetime | ||
4 | |||
5 | |||
6 | class FeedParser: | ||
7 | @staticmethod | ||
8 | def date_tuple_to_datetime(date_tuple): | ||
9 | return datetime.datetime(*(date_tuple[:5])) if date_tuple else None | ||
10 | |||
11 | @staticmethod | ||
12 | def get_first(lst): | ||
13 | return lst[0] if lst and len(lst) > 0 else None | ||
14 | |||
15 | def get_rss_item_for_entry(self, entry): | ||
16 | return PyRSS2Gen.RSSItem( | ||
17 | title=entry.get('title'), | ||
18 | link=entry.get('link'), | ||
19 | description=entry.get('description'), | ||
20 | author=entry.get('author'), | ||
21 | categories=entry.get('tags'), | ||
22 | comments=entry.get('comments'), | ||
23 | enclosure=self.get_first(entry.get('enclosures')), | ||
24 | guid=entry.get('id'), | ||
25 | pubDate=self.date_tuple_to_datetime(entry.get('published_parsed')), | ||
26 | source=entry.get('source'), | ||
27 | ) | ||
28 | |||
29 | def get_rss2_from_feed(self, feed, entries): | ||
30 | return PyRSS2Gen.RSS2( | ||
31 | title=feed.get('title'), | ||
32 | link=feed.get('link'), | ||
33 | description=feed.get('subtitle'), | ||
34 | |||
35 | language=feed.get('language'), | ||
36 | copyright=feed.get('rights'), | ||
37 | managingEditor=feed.get('contributors'), | ||
38 | webMaster=feed.get('publisher'), | ||
39 | pubDate=self.date_tuple_to_datetime(feed.get('published_parsed')), | ||
40 | lastBuildDate=self.date_tuple_to_datetime(feed.get('updated_parsed')), | ||
41 | |||
42 | categories=feed.get('tags'), | ||
43 | generator=feed.get('generator'), | ||
44 | docs=feed.get('docs'), | ||
45 | cloud=feed.get('cloud'), | ||
46 | ttl=feed.get('ttl'), | ||
47 | |||
48 | image=feed.get('image'), | ||
49 | rating=None, | ||
50 | textInput=feed.get('textinput'), | ||
51 | skipHours=None, | ||
52 | skipDays=None, | ||
53 | |||
54 | items=[self.get_rss_item_for_entry(entry) for entry in entries], | ||
55 | ) | ||
56 | |||
57 | def parse(self, feed): | ||
58 | parsed_feed = feedparser.parse(feed) | ||
59 | return self.get_rss2_from_feed(parsed_feed.feed, parsed_feed.entries) | ||