aboutsummaryrefslogtreecommitdiff
path: root/afeedprocessor/afeedparser.py
diff options
context:
space:
mode:
Diffstat (limited to 'afeedprocessor/afeedparser.py')
-rw-r--r--afeedprocessor/afeedparser.py59
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 @@
1import feedparser
2import PyRSS2Gen
3import datetime
4
5
6class 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)