Merge pull request #102 from blackjack4494/gdcvault-fix

[gdcvault] fix extractor
This commit is contained in:
Tom-Oliver Heidel 2020-09-13 15:22:33 +02:00 committed by GitHub
commit 3796554609
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -5,9 +5,7 @@
from .common import InfoExtractor from .common import InfoExtractor
from .kaltura import KalturaIE from .kaltura import KalturaIE
from ..utils import ( from ..utils import (
HEADRequest,
sanitized_Request, sanitized_Request,
smuggle_url,
urlencode_postdata, urlencode_postdata,
) )
@ -122,67 +120,38 @@ def _login(self, webpage_url, display_id):
request = sanitized_Request(login_url, urlencode_postdata(login_form)) request = sanitized_Request(login_url, urlencode_postdata(login_form))
request.add_header('Content-Type', 'application/x-www-form-urlencoded') request.add_header('Content-Type', 'application/x-www-form-urlencoded')
self._download_webpage(request, display_id, 'Logging in') self._download_webpage(request, display_id, 'Logging in')
start_page = self._download_webpage(webpage_url, display_id, 'Getting authenticated video page') webpage = self._download_webpage(webpage_url, display_id, 'Getting authenticated video page')
self._download_webpage(logout_url, display_id, 'Logging out') self._download_webpage(logout_url, display_id, 'Logging out')
return start_page return webpage
def _real_extract(self, url): def _real_extract(self, url):
video_id, name = re.match(self._VALID_URL, url).groups() video_id, name = re.match(self._VALID_URL, url).groups()
display_id = name or video_id display_id = name or video_id
webpage_url = 'http://www.gdcvault.com/play/' + video_id webpage = self._download_webpage(url, display_id)
start_page = self._download_webpage(webpage_url, display_id)
direct_url = self._search_regex( title = self._html_search_regex(
r's1\.addVariable\("file",\s*encodeURIComponent\("(/[^"]+)"\)\);', r'<td><strong>Session Name:?</strong></td>\s*<td>(.*?)</td>',
start_page, 'url', default=None) webpage, 'title')
if direct_url:
title = self._html_search_regex(
r'<td><strong>Session Name:?</strong></td>\s*<td>(.*?)</td>',
start_page, 'title')
video_url = 'http://www.gdcvault.com' + direct_url
# resolve the url so that we can detect the correct extension
video_url = self._request_webpage(
HEADRequest(video_url), video_id).geturl()
return { PLAYER_REGEX = r'<iframe src=\"(?P<manifest_url>.*?)\".*?</iframe>'
'id': video_id, manifest_url = self._html_search_regex(
'display_id': display_id, PLAYER_REGEX, webpage, 'manifest_url')
'url': video_url,
'title': title,
}
embed_url = KalturaIE._extract_url(start_page) partner_id = self._search_regex(
if embed_url: r'/p(?:artner_id)?/(\d+)', manifest_url, 'partner id',
embed_url = smuggle_url(embed_url, {'source_url': url}) default='1670711')
ie_key = 'Kaltura'
else:
PLAYER_REGEX = r'<iframe src="(?P<xml_root>.+?)/(?:gdc-)?player.*?\.html.*?".*?</iframe>'
xml_root = self._html_search_regex( kaltura_id = self._search_regex(
PLAYER_REGEX, start_page, 'xml root', default=None) r'entry_id=(?P<id>(?:[^&])+)', manifest_url,
if xml_root is None: 'kaltura id', group='id')
# Probably need to authenticate
login_res = self._login(webpage_url, display_id)
if login_res is None:
self.report_warning('Could not login.')
else:
start_page = login_res
# Grab the url from the authenticated page
xml_root = self._html_search_regex(
PLAYER_REGEX, start_page, 'xml root')
xml_name = self._html_search_regex(
r'<iframe src=".*?\?xml(?:=|URL=xml/)(.+?\.xml).*?".*?</iframe>',
start_page, 'xml filename')
embed_url = '%s/xml/%s' % (xml_root, xml_name)
ie_key = 'DigitallySpeaking'
return { return {
'_type': 'url_transparent', '_type': 'url_transparent',
'url': 'kaltura:%s:%s' % (partner_id, kaltura_id),
'ie_key': KalturaIE.ie_key(),
'id': video_id, 'id': video_id,
'display_id': display_id, 'display_id': display_id,
'url': embed_url, 'title': title,
'ie_key': ie_key,
} }