diff options
Diffstat (limited to 'youtube_dl/extractor/cspan.py')
-rw-r--r-- | youtube_dl/extractor/cspan.py | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/youtube_dl/extractor/cspan.py b/youtube_dl/extractor/cspan.py index 2a8eda9ef..795ccd926 100644 --- a/youtube_dl/extractor/cspan.py +++ b/youtube_dl/extractor/cspan.py @@ -56,16 +56,61 @@ class CSpanIE(InfoExtractor): url = unescapeHTML(data['video']['files'][0]['path']['#text']) - doc = self._download_xml('http://www.c-span.org/common/services/flashXml.php?programid=' + video_id, + doc = self._download_xml('http://www.c-span.org/common/services/flashXml.php?programid=' + video_id + '&version=2014-01-23', video_id) - def find_string(s): - return find_xpath_attr(doc, './/string', 'name', s).text + formats = [ + { + 'url': url, + } + ] + + def find_string(node, s): + return find_xpath_attr(node, './/string', 'name', s).text + + def find_number(node, s): + return int(find_xpath_attr(node, './/number', 'name', s).text) + + def find_array(node, s): + return find_xpath_attr(node, './/array', 'name', s) + + def process_files(files, url, formats): + for file in files: + path = find_string(file, 'path') + #duration = find_number(file, './number', 'name', 'length') + hd = find_number(file, 'hd') + formats.append({ + 'url': url, + 'play_path': path, + 'ext': 'flv', + 'quality': hd, + }) + + def process_node(node, formats): + url = find_xpath_attr(node, './string', 'name', 'url') + if url is None: + url = find_xpath_attr(node, './string', 'name', 'URL') + if url is None: + return + url = url.text.replace('$(protocol)', 'rtmp').replace('$(port)', '1935') + files = find_array(node, 'files') + if files is None: + return + process_files(files, url, formats) + + process_node(doc.find('./media-link'), formats) + + streams = find_array(doc, 'streams') + if streams is not None: + for stream in streams: + if find_string(stream, 'name') != 'vod': + continue + process_node(stream, formats) return { 'id': video_id, - 'title': find_string('title'), - 'url': url, + 'title': find_string(doc, 'title'), 'description': description, - 'thumbnail': find_string('poster'), + 'thumbnail': find_string(doc, 'poster'), + 'formats': formats, } |