mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	| @@ -5,7 +5,10 @@ import re | ||||
| from .common import InfoExtractor | ||||
| from .kaltura import KalturaIE | ||||
| from ..utils import ( | ||||
|     HEADRequest, | ||||
|     remove_start, | ||||
|     sanitized_Request, | ||||
|     smuggle_url, | ||||
|     urlencode_postdata, | ||||
| ) | ||||
|  | ||||
| @@ -100,6 +103,26 @@ class GDCVaultIE(InfoExtractor): | ||||
|                 'format': 'mp4-408', | ||||
|             }, | ||||
|         }, | ||||
|         { | ||||
|             # Kaltura embed, whitespace between quote and embedded URL in iframe's src | ||||
|             'url': 'https://www.gdcvault.com/play/1025699', | ||||
|             'info_dict': { | ||||
|                 'id': '0_zagynv0a', | ||||
|                 'ext': 'mp4', | ||||
|                 'title': 'Tech Toolbox', | ||||
|                 'upload_date': '20190408', | ||||
|                 'uploader_id': 'joe@blazestreaming.com', | ||||
|                 'timestamp': 1554764629, | ||||
|             }, | ||||
|             'params': { | ||||
|                 'skip_download': True, | ||||
|             }, | ||||
|         }, | ||||
|         { | ||||
|             # HTML5 video | ||||
|             'url': 'http://www.gdcvault.com/play/1014846/Conference-Keynote-Shigeru', | ||||
|             'only_matching': True, | ||||
|         }, | ||||
|     ] | ||||
|  | ||||
|     def _login(self, webpage_url, display_id): | ||||
| @@ -120,38 +143,78 @@ class GDCVaultIE(InfoExtractor): | ||||
|         request = sanitized_Request(login_url, urlencode_postdata(login_form)) | ||||
|         request.add_header('Content-Type', 'application/x-www-form-urlencoded') | ||||
|         self._download_webpage(request, display_id, 'Logging in') | ||||
|         webpage = self._download_webpage(webpage_url, display_id, 'Getting authenticated video page') | ||||
|         start_page = self._download_webpage(webpage_url, display_id, 'Getting authenticated video page') | ||||
|         self._download_webpage(logout_url, display_id, 'Logging out') | ||||
|  | ||||
|         return webpage | ||||
|         return start_page | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         video_id, name = re.match(self._VALID_URL, url).groups() | ||||
|         display_id = name or video_id | ||||
|  | ||||
|         webpage = self._download_webpage(url, display_id) | ||||
|         webpage_url = 'http://www.gdcvault.com/play/' + video_id | ||||
|         start_page = self._download_webpage(webpage_url, display_id) | ||||
|  | ||||
|         title = self._html_search_regex( | ||||
|             r'<td><strong>Session Name:?</strong></td>\s*<td>(.*?)</td>', | ||||
|             webpage, 'title') | ||||
|         direct_url = self._search_regex( | ||||
|             r's1\.addVariable\("file",\s*encodeURIComponent\("(/[^"]+)"\)\);', | ||||
|             start_page, 'url', default=None) | ||||
|         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() | ||||
|  | ||||
|         PLAYER_REGEX = r'<iframe src=\"(?P<manifest_url>.*?)\".*?</iframe>' | ||||
|         manifest_url = self._html_search_regex( | ||||
|             PLAYER_REGEX, webpage, 'manifest_url') | ||||
|             return { | ||||
|                 'id': video_id, | ||||
|                 'display_id': display_id, | ||||
|                 'url': video_url, | ||||
|                 'title': title, | ||||
|             } | ||||
|  | ||||
|         partner_id = self._search_regex( | ||||
|             r'/p(?:artner_id)?/(\d+)', manifest_url, 'partner id', | ||||
|             default='1670711') | ||||
|         embed_url = KalturaIE._extract_url(start_page) | ||||
|         if embed_url: | ||||
|             embed_url = smuggle_url(embed_url, {'source_url': url}) | ||||
|             ie_key = 'Kaltura' | ||||
|         else: | ||||
|             PLAYER_REGEX = r'<iframe src="(?P<xml_root>.+?)/(?:gdc-)?player.*?\.html.*?".*?</iframe>' | ||||
|  | ||||
|         kaltura_id = self._search_regex( | ||||
|             r'entry_id=(?P<id>(?:[^&])+)', manifest_url, | ||||
|             'kaltura id', group='id') | ||||
|             xml_root = self._html_search_regex( | ||||
|                 PLAYER_REGEX, start_page, 'xml root', default=None) | ||||
|             if xml_root is None: | ||||
|                 # 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', default=None) | ||||
|             if not xml_name: | ||||
|                 info = self._parse_html5_media_entries(url, start_page, video_id)[0] | ||||
|                 info.update({ | ||||
|                     'title': remove_start(self._search_regex( | ||||
|                         r'>Session Name:\s*<.*?>\s*<td>(.+?)</td>', start_page, | ||||
|                         'title', default=None) or self._og_search_title( | ||||
|                         start_page, default=None), 'GDC Vault - '), | ||||
|                     'id': video_id, | ||||
|                     'display_id': display_id, | ||||
|                 }) | ||||
|                 return info | ||||
|             embed_url = '%s/xml/%s' % (xml_root, xml_name) | ||||
|             ie_key = 'DigitallySpeaking' | ||||
|  | ||||
|         return { | ||||
|             '_type': 'url_transparent', | ||||
|             'url': 'kaltura:%s:%s' % (partner_id, kaltura_id), | ||||
|             'ie_key': KalturaIE.ie_key(), | ||||
|             'id': video_id, | ||||
|             'display_id': display_id, | ||||
|             'title': title, | ||||
|             'url': embed_url, | ||||
|             'ie_key': ie_key, | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 pukkandan
					pukkandan