-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeeds.py
35 lines (26 loc) · 1.12 KB
/
feeds.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""Utilities for parsing Atom feeds."""
import xml.dom
import xml.dom.minidom
def get_hub(node):
"""If a feed has a <link rel='hub'> tag, returns the href."""
return _get_href_from_feed(node, 'hub')
def get_self(node):
"""If a feed has a <link rel='self'> tag, return the href."""
return _get_href_from_feed(node, 'self')
def _is_element_or_document(node):
return node.nodeType in [xml.dom.Node.DOCUMENT_NODE, xml.dom.Node.ELEMENT_NODE]
def _get_href_from_feed(node, rel_type):
"""If a feed has a <link rel='hub'> or <link rel='self'> tag, returns the href"""
if type(node) is str:
node = xml.dom.minidom.parseString(node)
child_elements = filter(_is_element_or_document, node.childNodes)
for element in child_elements:
if element.tagName == 'link':
if element.hasAttribute('rel'):
if element.getAttribute('rel') == rel_type:
return element.getAttribute('href')
def get_web_link(entry):
for link in entry.getElementsByTagName('link'):
if link.getAttribute('rel') == 'alternate':
if link.getAttribute('type') == 'text/html':
return link.getAttribute('href')