mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-10-29 09:26:20 -07:00 
			
		
		
		
	[kaltura] fix extraction error for videos from multiple kaltura servers
This commit is contained in:
		| @@ -91,14 +91,15 @@ class KalturaIE(InfoExtractor): | ||||
|         if mobj: | ||||
|             embed_info = mobj.groupdict() | ||||
|             url = 'kaltura:%(partner_id)s:%(id)s' % embed_info | ||||
|             escaped_pid = re.escape(embed_info['partner_id']) | ||||
|             service_url = re.search( | ||||
|                 '<script[^>]+src=(?:["\'])((?:https?:)?//.+?)/p/%(partner_id)s/sp/%(partner_id)s00/embedIframeJs' % embed_info, | ||||
|                 r'<script[^>]+src=["\']((?:https?:)?//.+?)/p/%s/sp/%s00/embedIframeJs' % (escaped_pid, escaped_pid), | ||||
|                 webpage) | ||||
|             if service_url: | ||||
|                 url = smuggle_url(url, {'service_url': service_url.group(1)}) | ||||
|             return url | ||||
|  | ||||
|     def _kaltura_api_call(self, video_id, actions, *args, **kwargs): | ||||
|     def _kaltura_api_call(self, video_id, actions, service_url=None, *args, **kwargs): | ||||
|         params = actions[0] | ||||
|         if len(actions) > 1: | ||||
|             for i, a in enumerate(actions[1:], start=1): | ||||
| @@ -106,7 +107,7 @@ class KalturaIE(InfoExtractor): | ||||
|                     params['%d:%s' % (i, k)] = v | ||||
|  | ||||
|         data = self._download_json( | ||||
|             self._SERVICE_URL + self._SERVICE_BASE, | ||||
|             (service_url or self._SERVICE_URL) + self._SERVICE_BASE, | ||||
|             video_id, query=params, *args, **kwargs) | ||||
|  | ||||
|         status = data if len(actions) == 1 else data[0] | ||||
| @@ -116,7 +117,7 @@ class KalturaIE(InfoExtractor): | ||||
|  | ||||
|         return data | ||||
|  | ||||
|     def _get_kaltura_signature(self, video_id, partner_id): | ||||
|     def _get_kaltura_signature(self, video_id, partner_id, service_url=None): | ||||
|         actions = [{ | ||||
|             'apiVersion': '3.1', | ||||
|             'expiry': 86400, | ||||
| @@ -126,10 +127,10 @@ class KalturaIE(InfoExtractor): | ||||
|             'widgetId': '_%s' % partner_id, | ||||
|         }] | ||||
|         return self._kaltura_api_call( | ||||
|             video_id, actions, note='Downloading Kaltura signature')['ks'] | ||||
|             video_id, actions, service_url, note='Downloading Kaltura signature')['ks'] | ||||
|  | ||||
|     def _get_video_info(self, video_id, partner_id): | ||||
|         signature = self._get_kaltura_signature(video_id, partner_id) | ||||
|     def _get_video_info(self, video_id, partner_id, service_url=None): | ||||
|         signature = self._get_kaltura_signature(video_id, partner_id, service_url) | ||||
|         actions = [ | ||||
|             { | ||||
|                 'action': 'null', | ||||
| @@ -152,19 +153,16 @@ class KalturaIE(InfoExtractor): | ||||
|             }, | ||||
|         ] | ||||
|         return self._kaltura_api_call( | ||||
|             video_id, actions, note='Downloading video info JSON') | ||||
|             video_id, actions, service_url, note='Downloading video info JSON') | ||||
|  | ||||
|     def _real_extract(self, url): | ||||
|         url, smuggled_data = unsmuggle_url(url, {}) | ||||
|         service_url = smuggled_data.get('service_url') | ||||
|         if service_url: | ||||
|             self._SERVICE_URL = service_url | ||||
|  | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         partner_id, entry_id = mobj.group('partner_id', 'id') | ||||
|         ks = None | ||||
|         if partner_id and entry_id: | ||||
|             info, flavor_assets = self._get_video_info(entry_id, partner_id) | ||||
|             info, flavor_assets = self._get_video_info(entry_id, partner_id, smuggled_data.get('service_url')) | ||||
|         else: | ||||
|             path, query = mobj.group('path', 'query') | ||||
|             if not path and not query: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user