From c42f35addb0542d413bcbd842c10eb420b8d2b5c Mon Sep 17 00:00:00 2001 From: remitamine Date: Thu, 30 Jul 2015 23:55:57 +0100 Subject: [PATCH 1/2] [gdcvault] Add support for audio extraction --- youtube_dl/extractor/gdcvault.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/youtube_dl/extractor/gdcvault.py b/youtube_dl/extractor/gdcvault.py index 43f916412..5979bfdd2 100644 --- a/youtube_dl/extractor/gdcvault.py +++ b/youtube_dl/extractor/gdcvault.py @@ -7,7 +7,10 @@ from ..compat import ( compat_urllib_parse, compat_urllib_request, ) -from ..utils import remove_end +from ..utils import ( + remove_end, + determine_ext, +) class GDCVaultIE(InfoExtractor): @@ -73,10 +76,20 @@ class GDCVaultIE(InfoExtractor): return video_formats def _parse_flv(self, xml_description): - video_formats = [] + formats = [] akamai_url = xml_description.find('./metadata/akamaiHost').text + audios = xml_description.find('./metadata/audios') + if audios is not None: + for audio in audios: + formats.append({ + 'url': 'rtmp://%s/ondemand?ovpfv=1.1' % akamai_url, + 'play_path': remove_end(audio.get('url'), '.flv'), + 'ext': 'flv', + 'vcodec': 'none', + 'format_id': audio.get('code'), + }) slide_video_path = xml_description.find('./metadata/slideVideo').text - video_formats.append({ + formats.append({ 'url': 'rtmp://%s/ondemand?ovpfv=1.1' % akamai_url, 'play_path': remove_end(slide_video_path, '.flv'), 'ext': 'flv', @@ -86,7 +99,7 @@ class GDCVaultIE(InfoExtractor): 'format_id': 'slides', }) speaker_video_path = xml_description.find('./metadata/speakerVideo').text - video_formats.append({ + formats.append({ 'url': 'rtmp://%s/ondemand?ovpfv=1.1' % akamai_url, 'play_path': remove_end(speaker_video_path, '.flv'), 'ext': 'flv', @@ -95,7 +108,7 @@ class GDCVaultIE(InfoExtractor): 'preference': -1, 'format_id': 'speaker', }) - return video_formats + return formats def _login(self, webpage_url, display_id): (username, password) = self._get_login_info() @@ -133,16 +146,18 @@ class GDCVaultIE(InfoExtractor): r's1\.addVariable\("file",\s*encodeURIComponent\("(/[^"]+)"\)\);', start_page, 'url', default=None) if direct_url: - video_url = 'http://www.gdcvault.com/' + direct_url title = self._html_search_regex( r'Session Name\s*(.*?)', start_page, 'title') + video_url = 'http://www.gdcvault.com' + direct_url + request = compat_urllib_request.Request(video_url, method='HEAD') + head = compat_urllib_request.urlopen(request) return { 'id': video_id, 'display_id': display_id, 'url': video_url, - 'ext': 'flv', + 'ext': determine_ext(head.geturl()), 'title': title, } From 104c343c939397d2bb960fde82aac13f8fc45bd5 Mon Sep 17 00:00:00 2001 From: remitamine Date: Fri, 31 Jul 2015 11:31:53 +0100 Subject: [PATCH 2/2] [gdcvault] use HeadRequest and _request_webpage --- youtube_dl/extractor/gdcvault.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/youtube_dl/extractor/gdcvault.py b/youtube_dl/extractor/gdcvault.py index 5979bfdd2..26ff2ac9b 100644 --- a/youtube_dl/extractor/gdcvault.py +++ b/youtube_dl/extractor/gdcvault.py @@ -10,6 +10,7 @@ from ..compat import ( from ..utils import ( remove_end, determine_ext, + HEADRequest, ) @@ -150,8 +151,8 @@ class GDCVaultIE(InfoExtractor): r'Session Name\s*(.*?)', start_page, 'title') video_url = 'http://www.gdcvault.com' + direct_url - request = compat_urllib_request.Request(video_url, method='HEAD') - head = compat_urllib_request.urlopen(request) + request = HEADRequest(video_url) + head = self._request_webpage(request, video_id) return { 'id': video_id,