]>
code.delx.au - webdl/blob - sbs.py
2 # vim:ts=4:sts=4:sw=4:noet
4 from common
import grab_xml
as _grab_xml
, download_rtmp
, download_urllib
, Node
7 BASE_URL
= "http://player.sbs.com.au"
9 def grab_xml(path
, max_age
):
10 return _grab_xml(BASE_URL
+ path
, max_age
)
13 def __init__(self
, title
, parent
, video_desc_url
):
14 Node
.__init
__(self
, title
, parent
)
15 self
.video_desc_url
= video_desc_url
16 self
.can_download
= True
19 video
= grab_xml(self
.video_desc_url
, 0)
20 vbase
= video
.xpath("//meta/@base")[0]
23 for vpath
in video
.xpath("//switch/video"):
24 rate
= float(vpath
.xpath("@system-bitrate")[0])
27 bestvpath
= vpath
.xpath("@src")[0]
28 filename
= self
.title
+ "." + bestvpath
.rsplit(".", 1)[1]
29 if vbase
.startswith("rtmp://"):
30 return download_rtmp(filename
, vbase
, bestvpath
)
32 return download_urllib(filename
, vbase
+ bestvpath
)
35 def fill_nodes(root_node
):
36 settings
= grab_xml("/playerassets/programs/config/standalone_settings.xml", 24*3600)
37 menu_url
= settings
.xpath("/settings/setting[@name='menuURL']/@value")[0]
39 root_menu
= grab_xml(menu_url
, 3600)
40 seen_category_titles
= set()
41 for menu
in root_menu
.xpath("//menu"):
43 category_title
= menu
.xpath("title/text()")[0]
44 playlist_url
= menu
.xpath("playlist/@xmlSrc")[0]
45 if category_title
in seen_category_titles
:
46 # append a number to the name
49 if (category_title
+str(i
)) not in seen_category_titles
:
50 category_title
+= str(i
)
53 seen_category_titles
.add(category_title
)
54 category_node
= Node(category_title
, root_node
)
55 playlist
= grab_xml(playlist_url
, 3600)
56 for video_desc
in playlist
.xpath("//video"):
57 video_desc_url
= video_desc
.xpath("@src")[0]
58 video_title
= video_desc
.xpath("title/text()")[0].strip()
59 SbsNode(video_title
, category_node
, video_desc_url
)