Skip to content
This repository has been archived by the owner on Aug 26, 2020. It is now read-only.

Commit

Permalink
Support additional metadata for future use.
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremyvisser committed Jul 14, 2010
1 parent e31f9b6 commit 12f5944
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
4 changes: 2 additions & 2 deletions iview/comm.py
Expand Up @@ -78,10 +78,10 @@ def get_index():

return parser.parse_index(index_data)

def get_series_items(series_id):
def get_series_items(series_id, get_meta=False):
""" This function fetches the series detail page for the selected series,
which contain the items (i.e. the actual episodes).
"""

series_xml = maybe_fetch(config.series_url % series_id)
return parser.parse_series_items(series_xml)
return parser.parse_series_items(series_xml, get_meta)
30 changes: 23 additions & 7 deletions iview/parser.py
Expand Up @@ -95,26 +95,42 @@ def parse_index(soup):

return index_dict

def parse_series_items(soup):
# HACK: replace <abc: with < because BeautifulSoup doesn't have
def parse_series_items(soup, get_meta=False):
# HACK: replace <abc: and <media: with < because BeautifulSoup doesn't have
# any (obvious) way to inspect inside namespaces.
soup = soup \
.replace('<abc:', '<') \
.replace('</abc:', '</')
.replace('<abc:', '<') \
.replace('</abc:', '</') \
.replace('<media:', '<') \
.replace('</media:', '</') \

# HACK: replace &amp; with & because HTML entities aren't
# valid in plain XML, but the ABC doesn't know that.
soup = soup.replace('&amp;', '&')

series_xml = BeautifulStoneSoup(soup)
series = BeautifulStoneSoup(soup)

items = []

for program in series_xml.findAll('item'):
for program in series.findAll('item'):
items.append({
'title' : program.find('title').string,
'url' : program.find('videoasset').string,
'description' : program.find('description').string,
'thumb' : program.find('thumbnail').get('url'),
'date' : program.find('transmitdate').string,
'rating' : program.find('rating').string,
'link' : program.find('player').get('url'), # link to play on iView site
'home' : program.find('linkurl').string, # program website
})

return items
if get_meta:
meta = {
'title' : series.find('title').string,
'link' : series.find('link').string, # link to series listing on iView site
'thumb' : series.find('image').find('url').string,
'description' : series.find('description').string,
}
return (items, meta)
else:
return items

0 comments on commit 12f5944

Please sign in to comment.