make code more readable
[enigma2-curlytx.git] / src / AtomFeed.py
1 from twisted.web.client import getPage
2 from xml.etree.cElementTree import fromstring
3
4 class AtomFeed:
5     """Simple XML parser that extracts pages from a atom feed
6     """
7     ns = "{http://www.w3.org/2005/Atom}"
8     def __init__(self, url, callback):
9         getPage(url).addCallback(self.parse, callback)
10
11     def parse(self, data, callback):
12         xml = fromstring(data)
13         pages = []
14         for entry in xml.findall("{0}entry".format(self.ns)):
15             titleE = entry.find("{0}title".format(self.ns))
16             url   = self.bestLink(entry.findall("{0}link".format(self.ns)))
17             if titleE != None and titleE.text != "" and url != None:
18                 pages.append({"title": titleE.text, "url": url})
19
20         callback(pages)
21
22     def bestLink(self, list):
23         foundLevel = -1
24         foundHref = None
25         for link in list:
26             if link.get("rel") != "alternate" and link.get("rel") != "":
27                 continue
28             level = self.level(link)
29             if foundLevel > level:
30                 continue
31             foundLevel = level
32             foundHref = link.get("href")
33         return foundHref
34
35     def level(self, link):
36         type = link.get("type")
37         if type == "text/plain":
38             return 3
39         elif type == "":
40             return 2
41         return 1