1
# TODO: Not sure if this RSS output is "valid", should be though.
2
# Might also be nice categorise Comics under one Item
8
def __init__(self, title, link, description, lang='en-us'):
9
self.rss = xml.dom.minidom.Document()
11
rss_root = self.rss.appendChild(self.rss.createElement('rss'))
12
rss_root.setAttribute('version', '2.0')
14
self.channel = rss_root.appendChild(self.rss.createElement('channel'))
16
self.addElement(self.channel, 'title', title)
17
self.addElement(self.channel, 'link', link)
18
self.addElement(self.channel, 'language', lang)
19
self.addElement(self.channel, 'description', description)
22
return time.strftime('%a, %d %b %Y %H:%M:%S GMT', data)
24
def addElement(self, parent, tag, value):
25
return parent.appendChild(self.rss.createElement(tag)).appendChild(self.rss.createTextNode(value))
27
def insertHead(self, title, link, description, date):
28
item = self.rss.createElement('item')
30
self.addElement(item, 'title', title)
31
self.addElement(item, 'link', link)
32
self.addElement(item, 'description', description)
33
self.addElement(item, 'pubDate', date)
35
elems = self.rss.getElementsByTagName('item')
37
self.channel.insertBefore(item, elems[0])
39
self.channel.appendChild(item)
41
def addItem(self, title, link, description, date):
42
item = self.rss.createElement('item')
44
self.addElement(item, 'title', title)
45
self.addElement(item, 'link', link)
46
self.addElement(item, 'description', description)
47
self.addElement(item, 'pubDate', date)
49
self.channel.appendChild(item)
51
def write(self, path):
52
file = open(path, 'w')
53
file.write(self.getXML())
57
return self.rss.toxml()
59
def parseFeed(filename, yesterday):
60
dom = xml.dom.minidom.parse(filename)
62
getText = lambda node, tag: node.getElementsByTagName(tag)[0].childNodes[0].data
63
getNode = lambda tag: dom.getElementsByTagName(tag)
65
content = getNode('channel')[0] # Only one channel node
67
feedTitle = getText(content, 'title')
68
feedLink = getText(content, 'link')
69
feedDesc = getText(content, 'description')
71
feed = Feed(feedTitle, feedLink, feedDesc)
73
for item in getNode('item'):
74
itemDate = time.strptime(getText(item, 'pubDate'), '%a, %d %b %Y %H:%M:%S GMT')
75
if (itemDate > yesterday): # If newer than yesterday
76
feed.addItem(getText(item, 'title'),
77
getText(item, 'link'),
78
getText(item, 'description'),
79
getText(item, 'pubDate'))