mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:40:45 +00:00 
			
		
		
		
	[viki] detect errors and fix formats extraction
This commit is contained in:
		| @@ -30,6 +30,12 @@ class VikiBaseIE(InfoExtractor): | ||||
|  | ||||
|     _token = None | ||||
|  | ||||
|     _ERRORS = { | ||||
|         'geo': 'Sorry, this content is not available in your region.', | ||||
|         'upcoming': 'Sorry, this content is not yet available.', | ||||
|         # 'paywall': 'paywall', | ||||
|     } | ||||
|  | ||||
|     def _prepare_call(self, path, timestamp=None, post_data=None): | ||||
|         path += '?' if '?' not in path else '&' | ||||
|         if not timestamp: | ||||
| @@ -67,6 +73,12 @@ class VikiBaseIE(InfoExtractor): | ||||
|             '%s returned error: %s' % (self.IE_NAME, error), | ||||
|             expected=True) | ||||
|  | ||||
|     def _check_errors(self, data): | ||||
|         for reason, status in data.get('blocking', {}).items(): | ||||
|             if status and reason in self._ERRORS: | ||||
|                 raise ExtractorError('%s said: %s' % ( | ||||
|                     self.IE_NAME, self._ERRORS[reason]), expected=True) | ||||
|  | ||||
|     def _real_initialize(self): | ||||
|         self._login() | ||||
|  | ||||
| @@ -193,6 +205,7 @@ class VikiIE(VikiBaseIE): | ||||
|             'timestamp': 1321985454, | ||||
|             'description': 'md5:44b1e46619df3a072294645c770cef36', | ||||
|             'title': 'Love In Magic', | ||||
|             'age_limit': 13, | ||||
|         }, | ||||
|     }] | ||||
|  | ||||
| @@ -202,6 +215,8 @@ class VikiIE(VikiBaseIE): | ||||
|         video = self._call_api( | ||||
|             'videos/%s.json' % video_id, video_id, 'Downloading video JSON') | ||||
|  | ||||
|         self._check_errors(video) | ||||
|  | ||||
|         title = self.dict_selection(video.get('titles', {}), 'en') | ||||
|         if not title: | ||||
|             title = 'Episode %d' % video.get('number') if video.get('type') == 'episode' else video.get('id') or video_id | ||||
| @@ -262,8 +277,11 @@ class VikiIE(VikiBaseIE): | ||||
|                 r'^(\d+)[pP]$', format_id, 'height', default=None)) | ||||
|             for protocol, format_dict in stream_dict.items(): | ||||
|                 if format_id == 'm3u8': | ||||
|                     formats = self._extract_m3u8_formats( | ||||
|                         format_dict['url'], video_id, 'mp4', m3u8_id='m3u8-%s' % protocol) | ||||
|                     m3u8_formats = self._extract_m3u8_formats( | ||||
|                         format_dict['url'], video_id, 'mp4', 'm3u8_native', | ||||
|                         m3u8_id='m3u8-%s' % protocol, fatal=None) | ||||
|                     if m3u8_formats: | ||||
|                         formats.extend(m3u8_formats) | ||||
|                 else: | ||||
|                     formats.append({ | ||||
|                         'url': format_dict['url'], | ||||
| @@ -315,6 +333,8 @@ class VikiChannelIE(VikiBaseIE): | ||||
|             'containers/%s.json' % channel_id, channel_id, | ||||
|             'Downloading channel JSON') | ||||
|  | ||||
|         self._check_errors(channel) | ||||
|  | ||||
|         title = self.dict_selection(channel['titles'], 'en') | ||||
|  | ||||
|         description = self.dict_selection(channel['descriptions'], 'en') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 remitamine
					remitamine