From b4461b6ebe1276e98bc7566cc6a706ed26d3488b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergey=20M=E2=80=A4?= Date: Tue, 25 Mar 2014 21:16:10 +0700 Subject: [PATCH] [auengine] Modernize --- youtube_dl/extractor/auengine.py | 20 ++++++----- youtube_dl/extractor/cspan.py | 57 ++++++++++++++++++++++++++++---- 2 files changed, 62 insertions(+), 15 deletions(-) diff --git a/youtube_dl/extractor/auengine.py b/youtube_dl/extractor/auengine.py index c6f30e626..94caad0cf 100644 --- a/youtube_dl/extractor/auengine.py +++ b/youtube_dl/extractor/auengine.py @@ -11,22 +11,24 @@ class AUEngineIE(InfoExtractor): + _VALID_URL = r'http://(?:www\.)?auengine\.com/embed\.php\?.*?file=(?P[^&]+).*?' + _TEST = { 'url': 'http://auengine.com/embed.php?file=lfvlytY6&w=650&h=370', - 'file': 'lfvlytY6.mp4', 'md5': '48972bdbcf1a3a2f5533e62425b41d4f', 'info_dict': { + 'id': 'lfvlytY6', + 'ext': 'mp4', 'title': '[Commie]The Legend of the Legendary Heroes - 03 - Replication Eye (Alpha Stigma)[F9410F5A]' } } - _VALID_URL = r'(?:http://)?(?:www\.)?auengine\.com/embed\.php\?.*?file=([^&]+).*?' def _real_extract(self, url): mobj = re.match(self._VALID_URL, url) - video_id = mobj.group(1) + video_id = mobj.group('id') + webpage = self._download_webpage(url, video_id) - title = self._html_search_regex(r'(?P<title>.+?)', - webpage, 'title') + title = self._html_search_regex(r'(?P<title>.+?)', webpage, 'title') title = title.strip() links = re.findall(r'\s(?:file|url):\s*["\']([^\'"]+)["\']', webpage) links = map(compat_urllib_parse.unquote, links) @@ -39,14 +41,14 @@ def _real_extract(self, url): elif '/videos/' in link: video_url = link if not video_url: - raise ExtractorError(u'Could not find video URL') + raise ExtractorError('Could not find video URL') ext = '.' + determine_ext(video_url) if ext == title[-len(ext):]: title = title[:-len(ext)] return { - 'id': video_id, - 'url': video_url, - 'title': title, + 'id': video_id, + 'url': video_url, + 'title': title, 'thumbnail': thumbnail, } 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 @@ def _real_extract(self, url): 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, }