]>
code.delx.au - monosys/blob - scripts/sbs-downloader
10 BASE_URL
= "http://player.sbs.com.au"
13 f
= urllib
.urlopen(BASE_URL
+ path
)
18 def choose(options
, allow_multi
):
19 skeys
= sorted(options
.keys())
20 for i
, key
in enumerate(skeys
):
21 print " %d) %s" % (i
+1, key
)
25 values
= map(int, raw_input("Choose> ").split())
30 values
= [options
[skeys
[value
-1]] for value
in values
]
40 settings
= grab_xml("/playerassets/programs/config/standalone_settings.xml")
41 menu_url
= settings
.xpath("/settings/setting[@name='menuURL']/@value")[0]
43 root_menu
= grab_xml(menu_url
)
45 for menu
in root_menu
.xpath("//menu"):
47 title
= menu
.xpath("title/text()")[0]
48 playlist_url
= menu
.xpath("playlist/@xmlSrc")[0]
49 if title
in menu_list
:
52 if (title
+str(i
)) not in menu_list
:
56 menu_list
[title
] = playlist_url
62 def get_video_list(playlist_url
):
64 playlist
= grab_xml(playlist_url
)
65 for video_desc
in playlist
.xpath("//video"):
66 video_desc_url
= video_desc
.xpath("@src")[0]
67 title
= video_desc
.xpath("title/text()")[0].strip()
68 video_list
[title
] = (title
, video_desc_url
)
71 def download_video(title
, video_desc_url
):
72 video
= grab_xml(video_desc_url
)
73 vbase
= video
.xpath("//meta/@base")[0]
76 for vpath
in video
.xpath("//switch/video"):
77 rate
= float(vpath
.xpath("@system-bitrate")[0])
80 bestvpath
= vpath
.xpath("@src")[0]
81 filename
= title
+ "." + bestvpath
.rsplit(".", 1)[1]
82 if vbase
.startswith("rtmp://"):
83 download_rtmp(filename
, vbase
, bestvpath
)
85 download_urllib(filename
, vbase
+ bestvpath
)
87 def download_rtmp(filename
, vbase
, vpath
):
88 if vpath
.endswith(".flv"):
97 p
= subprocess
.Popen(cmd
)
99 except KeyboardInterrupt:
100 print "Cancelled", cmd
104 except KeyboardInterrupt:
105 p
.send_signal(signal
.SIGKILL
)
108 def download_urllib(filename
, url
):
109 print "Downloading: %s -> %s" % (url
, filename
)
111 src
= urllib
.urlopen(url
)
112 dst
= open(filename
, "w")
113 shutil
.copyfileobj(src
, dst
)
114 except KeyboardInterrupt:
115 print "\nCancelled", url
122 menu_list
= get_menu_list()
123 playlist_url
= choose(menu_list
, allow_multi
=False)
124 if playlist_url
is None:
126 video_list
= get_video_list(playlist_url
)
128 generator
= choose(video_list
, allow_multi
=True)
129 if generator
is None:
131 for title
, video_desc_url
in generator
:
132 download_video(title
, video_desc_url
)
134 if __name__
== "__main__":
137 except (KeyboardInterrupt, EOFError):