Show headers when pressing info button
[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).addErrback(self.fail)
10
11
12     def fail(self, msg):
13         print("CurlyTx", msg)
14
15     def parse(self, data, callback):
16         xml = fromstring(data)
17         pages = []
18         for entry in xml.findall("{0}entry".format(self.ns)):
19             titleE = entry.find("{0}title".format(self.ns))
20             url   = self.bestLink(entry.findall("{0}link".format(self.ns)))
21             if titleE != None and titleE.text != "" and url != None:
22                 pages.append({"title": titleE.text, "url": url})
23
24         callback(pages)
25
26     def bestLink(self, list):
27         foundLevel = -1
28         foundHref = None
29         for link in list:
30             if link.get("rel") != "alternate" and link.get("rel") != "":
31                 continue
32             level = self.level(link)
33             if foundLevel > level:
34                 continue
35             foundLevel = level
36             foundHref = link.get("href")
37         return foundHref
38
39     def level(self, link):
40         type = link.get("type")
41         if type == "text/plain":
42             return 3
43         elif type == "":
44             return 2
45         return 1