[kaltura] extract subtitles and reduce requests
This commit is contained in:
		
							parent
							
								
									217d5ae013
								
							
						
					
					
						commit
						1094074c04
					
				| @ -62,6 +62,11 @@ class KalturaIE(InfoExtractor): | |||||||
|         { |         { | ||||||
|             'url': 'https://cdnapisec.kaltura.com/html5/html5lib/v2.30.2/mwEmbedFrame.php/p/1337/uiconf_id/20540612/entry_id/1_sf5ovm7u?wid=_243342', |             'url': 'https://cdnapisec.kaltura.com/html5/html5lib/v2.30.2/mwEmbedFrame.php/p/1337/uiconf_id/20540612/entry_id/1_sf5ovm7u?wid=_243342', | ||||||
|             'only_matching': True, |             'only_matching': True, | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             # video with subtitles | ||||||
|  |             'url': 'kaltura:111032:1_cw786r8q', | ||||||
|  |             'only_matching': True, | ||||||
|         } |         } | ||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
| @ -130,7 +135,6 @@ class KalturaIE(InfoExtractor): | |||||||
|             video_id, actions, service_url, note='Downloading Kaltura signature')['ks'] |             video_id, actions, service_url, note='Downloading Kaltura signature')['ks'] | ||||||
| 
 | 
 | ||||||
|     def _get_video_info(self, video_id, partner_id, service_url=None): |     def _get_video_info(self, video_id, partner_id, service_url=None): | ||||||
|         signature = self._get_kaltura_signature(video_id, partner_id, service_url) |  | ||||||
|         actions = [ |         actions = [ | ||||||
|             { |             { | ||||||
|                 'action': 'null', |                 'action': 'null', | ||||||
| @ -138,18 +142,30 @@ class KalturaIE(InfoExtractor): | |||||||
|                 'clientTag': 'kdp:v3.8.5', |                 'clientTag': 'kdp:v3.8.5', | ||||||
|                 'format': 1,  # JSON, 2 = XML, 3 = PHP |                 'format': 1,  # JSON, 2 = XML, 3 = PHP | ||||||
|                 'service': 'multirequest', |                 'service': 'multirequest', | ||||||
|                 'ks': signature, |             }, | ||||||
|  |             { | ||||||
|  |                 'expiry': 86400, | ||||||
|  |                 'service': 'session', | ||||||
|  |                 'action': 'startWidgetSession', | ||||||
|  |                 'widgetId': '_%s' % partner_id, | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 'action': 'get', |                 'action': 'get', | ||||||
|                 'entryId': video_id, |                 'entryId': video_id, | ||||||
|                 'service': 'baseentry', |                 'service': 'baseentry', | ||||||
|                 'version': '-1', |                 'ks': '{1:result:ks}', | ||||||
|             }, |             }, | ||||||
|             { |             { | ||||||
|                 'action': 'getbyentryid', |                 'action': 'getbyentryid', | ||||||
|                 'entryId': video_id, |                 'entryId': video_id, | ||||||
|                 'service': 'flavorAsset', |                 'service': 'flavorAsset', | ||||||
|  |                 'ks': '{1:result:ks}', | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 'action': 'list', | ||||||
|  |                 'filter:entryIdEqual': video_id, | ||||||
|  |                 'service': 'caption_captionasset', | ||||||
|  |                 'ks': '{1:result:ks}', | ||||||
|             }, |             }, | ||||||
|         ] |         ] | ||||||
|         return self._kaltura_api_call( |         return self._kaltura_api_call( | ||||||
| @ -161,8 +177,9 @@ class KalturaIE(InfoExtractor): | |||||||
|         mobj = re.match(self._VALID_URL, url) |         mobj = re.match(self._VALID_URL, url) | ||||||
|         partner_id, entry_id = mobj.group('partner_id', 'id') |         partner_id, entry_id = mobj.group('partner_id', 'id') | ||||||
|         ks = None |         ks = None | ||||||
|  |         captions = None | ||||||
|         if partner_id and entry_id: |         if partner_id and entry_id: | ||||||
|             info, flavor_assets = self._get_video_info(entry_id, partner_id, smuggled_data.get('service_url')) |             _, info, flavor_assets, captions = self._get_video_info(entry_id, partner_id, smuggled_data.get('service_url')) | ||||||
|         else: |         else: | ||||||
|             path, query = mobj.group('path', 'query') |             path, query = mobj.group('path', 'query') | ||||||
|             if not path and not query: |             if not path and not query: | ||||||
| @ -181,7 +198,7 @@ class KalturaIE(InfoExtractor): | |||||||
|                 raise ExtractorError('Invalid URL', expected=True) |                 raise ExtractorError('Invalid URL', expected=True) | ||||||
|             if 'entry_id' in params: |             if 'entry_id' in params: | ||||||
|                 entry_id = params['entry_id'][0] |                 entry_id = params['entry_id'][0] | ||||||
|                 info, flavor_assets = self._get_video_info(entry_id, partner_id) |                 _, info, flavor_assets, captions = self._get_video_info(entry_id, partner_id) | ||||||
|             elif 'uiconf_id' in params and 'flashvars[referenceId]' in params: |             elif 'uiconf_id' in params and 'flashvars[referenceId]' in params: | ||||||
|                 reference_id = params['flashvars[referenceId]'][0] |                 reference_id = params['flashvars[referenceId]'][0] | ||||||
|                 webpage = self._download_webpage(url, reference_id) |                 webpage = self._download_webpage(url, reference_id) | ||||||
| @ -217,7 +234,7 @@ class KalturaIE(InfoExtractor): | |||||||
|         formats = [] |         formats = [] | ||||||
|         for f in flavor_assets: |         for f in flavor_assets: | ||||||
|             # Continue if asset is not ready |             # Continue if asset is not ready | ||||||
|             if f['status'] != 2: |             if f.get('status') != 2: | ||||||
|                 continue |                 continue | ||||||
|             video_url = sign_url( |             video_url = sign_url( | ||||||
|                 '%s/flavorId/%s' % (data_url, f['id'])) |                 '%s/flavorId/%s' % (data_url, f['id'])) | ||||||
| @ -240,13 +257,25 @@ class KalturaIE(InfoExtractor): | |||||||
|                 m3u8_url, entry_id, 'mp4', 'm3u8_native', |                 m3u8_url, entry_id, 'mp4', 'm3u8_native', | ||||||
|                 m3u8_id='hls', fatal=False)) |                 m3u8_id='hls', fatal=False)) | ||||||
| 
 | 
 | ||||||
|         self._check_formats(formats, entry_id) |  | ||||||
|         self._sort_formats(formats) |         self._sort_formats(formats) | ||||||
| 
 | 
 | ||||||
|  |         subtitles = {} | ||||||
|  |         if captions: | ||||||
|  |             for caption in captions.get('objects', []): | ||||||
|  |                 print(caption) | ||||||
|  |                 # Continue if caption is not ready | ||||||
|  |                 if f.get('status') != 2: | ||||||
|  |                     continue | ||||||
|  |                 subtitles.setdefault(caption.get('languageCode') or caption.get('language'), []).append({ | ||||||
|  |                     'url': '%s/api_v3/service/caption_captionasset/action/serve/captionAssetId/%s' % (self._SERVICE_URL, caption['id']), | ||||||
|  |                     'ext': caption.get('fileExt'), | ||||||
|  |                 }) | ||||||
|  | 
 | ||||||
|         return { |         return { | ||||||
|             'id': entry_id, |             'id': entry_id, | ||||||
|             'title': info['name'], |             'title': info['name'], | ||||||
|             'formats': formats, |             'formats': formats, | ||||||
|  |             'subtitles': subtitles, | ||||||
|             'description': clean_html(info.get('description')), |             'description': clean_html(info.get('description')), | ||||||
|             'thumbnail': info.get('thumbnailUrl'), |             'thumbnail': info.get('thumbnailUrl'), | ||||||
|             'duration': info.get('duration'), |             'duration': info.get('duration'), | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user