diff options
Diffstat (limited to 'youtube_dl/extractor')
-rw-r--r-- | youtube_dl/extractor/auengine.py | 20 | ||||
-rw-r--r-- | 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 @@ from ..utils import ( class AUEngineIE(InfoExtractor): + _VALID_URL = r'http://(?:www\.)?auengine\.com/embed\.php\?.*?file=(?P<id>[^&]+).*?' + _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'<title>(?P<title>.+?)</title>', - webpage, 'title') + title = self._html_search_regex(r'<title>(?P<title>.+?)</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 @@ class AUEngineIE(InfoExtractor): 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 @@ 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, } |