mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	| @@ -13,6 +13,7 @@ from ..utils import ( | |||||||
|     float_or_none, |     float_or_none, | ||||||
|     sanitized_Request, |     sanitized_Request, | ||||||
|     urlencode_postdata, |     urlencode_postdata, | ||||||
|  |     USER_AGENTS, | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -114,71 +115,94 @@ class CeskaTelevizeIE(InfoExtractor): | |||||||
|             'requestSource': 'iVysilani', |             'requestSource': 'iVysilani', | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         req = sanitized_Request( |  | ||||||
|             'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist', |  | ||||||
|             data=urlencode_postdata(data)) |  | ||||||
|  |  | ||||||
|         req.add_header('Content-type', 'application/x-www-form-urlencoded') |  | ||||||
|         req.add_header('x-addr', '127.0.0.1') |  | ||||||
|         req.add_header('X-Requested-With', 'XMLHttpRequest') |  | ||||||
|         req.add_header('User-agent', 'Mozilla/5.0') |  | ||||||
|         req.add_header('Referer', url) |  | ||||||
|  |  | ||||||
|         playlistpage = self._download_json(req, playlist_id) |  | ||||||
|  |  | ||||||
|         playlist_url = playlistpage['url'] |  | ||||||
|         if playlist_url == 'error_region': |  | ||||||
|             raise ExtractorError(NOT_AVAILABLE_STRING, expected=True) |  | ||||||
|  |  | ||||||
|         req = sanitized_Request(compat_urllib_parse_unquote(playlist_url)) |  | ||||||
|         req.add_header('Referer', url) |  | ||||||
|  |  | ||||||
|         playlist_title = self._og_search_title(webpage, default=None) |  | ||||||
|         playlist_description = self._og_search_description(webpage, default=None) |  | ||||||
|  |  | ||||||
|         playlist = self._download_json(req, playlist_id)['playlist'] |  | ||||||
|         playlist_len = len(playlist) |  | ||||||
|  |  | ||||||
|         entries = [] |         entries = [] | ||||||
|         for item in playlist: |  | ||||||
|             is_live = item.get('type') == 'LIVE' |  | ||||||
|             formats = [] |  | ||||||
|             for format_id, stream_url in item['streamUrls'].items(): |  | ||||||
|                 formats.extend(self._extract_m3u8_formats( |  | ||||||
|                     stream_url, playlist_id, 'mp4', |  | ||||||
|                     entry_protocol='m3u8' if is_live else 'm3u8_native', |  | ||||||
|                     fatal=False)) |  | ||||||
|             self._sort_formats(formats) |  | ||||||
|  |  | ||||||
|             item_id = item.get('id') or item['assetId'] |         for user_agent in (None, USER_AGENTS['Safari']): | ||||||
|             title = item['title'] |             req = sanitized_Request( | ||||||
|  |                 'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist', | ||||||
|  |                 data=urlencode_postdata(data)) | ||||||
|  |  | ||||||
|             duration = float_or_none(item.get('duration')) |             req.add_header('Content-type', 'application/x-www-form-urlencoded') | ||||||
|             thumbnail = item.get('previewImageUrl') |             req.add_header('x-addr', '127.0.0.1') | ||||||
|  |             req.add_header('X-Requested-With', 'XMLHttpRequest') | ||||||
|  |             if user_agent: | ||||||
|  |                 req.add_header('User-Agent', user_agent) | ||||||
|  |             req.add_header('Referer', url) | ||||||
|  |  | ||||||
|             subtitles = {} |             playlistpage = self._download_json(req, playlist_id, fatal=False) | ||||||
|             if item.get('type') == 'VOD': |  | ||||||
|                 subs = item.get('subtitles') |  | ||||||
|                 if subs: |  | ||||||
|                     subtitles = self.extract_subtitles(episode_id, subs) |  | ||||||
|  |  | ||||||
|             if playlist_len == 1: |             if not playlistpage: | ||||||
|                 final_title = playlist_title or title |                 continue | ||||||
|                 if is_live: |  | ||||||
|                     final_title = self._live_title(final_title) |  | ||||||
|             else: |  | ||||||
|                 final_title = '%s (%s)' % (playlist_title, title) |  | ||||||
|  |  | ||||||
|             entries.append({ |             playlist_url = playlistpage['url'] | ||||||
|                 'id': item_id, |             if playlist_url == 'error_region': | ||||||
|                 'title': final_title, |                 raise ExtractorError(NOT_AVAILABLE_STRING, expected=True) | ||||||
|                 'description': playlist_description if playlist_len == 1 else None, |  | ||||||
|                 'thumbnail': thumbnail, |             req = sanitized_Request(compat_urllib_parse_unquote(playlist_url)) | ||||||
|                 'duration': duration, |             req.add_header('Referer', url) | ||||||
|                 'formats': formats, |  | ||||||
|                 'subtitles': subtitles, |             playlist_title = self._og_search_title(webpage, default=None) | ||||||
|                 'is_live': is_live, |             playlist_description = self._og_search_description(webpage, default=None) | ||||||
|             }) |  | ||||||
|  |             playlist = self._download_json(req, playlist_id, fatal=False) | ||||||
|  |             if not playlist: | ||||||
|  |                 continue | ||||||
|  |  | ||||||
|  |             playlist = playlist.get('playlist') | ||||||
|  |             if not isinstance(playlist, list): | ||||||
|  |                 continue | ||||||
|  |  | ||||||
|  |             playlist_len = len(playlist) | ||||||
|  |  | ||||||
|  |             for num, item in enumerate(playlist): | ||||||
|  |                 is_live = item.get('type') == 'LIVE' | ||||||
|  |                 formats = [] | ||||||
|  |                 for format_id, stream_url in item.get('streamUrls', {}).items(): | ||||||
|  |                     if 'playerType=flash' in stream_url: | ||||||
|  |                         formats.extend(self._extract_m3u8_formats( | ||||||
|  |                             stream_url, playlist_id, 'mp4', | ||||||
|  |                             entry_protocol='m3u8' if is_live else 'm3u8_native', | ||||||
|  |                             fatal=False)) | ||||||
|  |                     else: | ||||||
|  |                         formats.extend(self._extract_mpd_formats( | ||||||
|  |                             stream_url, playlist_id, fatal=False)) | ||||||
|  |  | ||||||
|  |                 if user_agent and len(entries) == playlist_len: | ||||||
|  |                     entries[num]['formats'].extend(formats) | ||||||
|  |                     continue | ||||||
|  |  | ||||||
|  |                 item_id = item.get('id') or item['assetId'] | ||||||
|  |                 title = item['title'] | ||||||
|  |  | ||||||
|  |                 duration = float_or_none(item.get('duration')) | ||||||
|  |                 thumbnail = item.get('previewImageUrl') | ||||||
|  |  | ||||||
|  |                 subtitles = {} | ||||||
|  |                 if item.get('type') == 'VOD': | ||||||
|  |                     subs = item.get('subtitles') | ||||||
|  |                     if subs: | ||||||
|  |                         subtitles = self.extract_subtitles(episode_id, subs) | ||||||
|  |  | ||||||
|  |                 if playlist_len == 1: | ||||||
|  |                     final_title = playlist_title or title | ||||||
|  |                     if is_live: | ||||||
|  |                         final_title = self._live_title(final_title) | ||||||
|  |                 else: | ||||||
|  |                     final_title = '%s (%s)' % (playlist_title, title) | ||||||
|  |  | ||||||
|  |                 entries.append({ | ||||||
|  |                     'id': item_id, | ||||||
|  |                     'title': final_title, | ||||||
|  |                     'description': playlist_description if playlist_len == 1 else None, | ||||||
|  |                     'thumbnail': thumbnail, | ||||||
|  |                     'duration': duration, | ||||||
|  |                     'formats': formats, | ||||||
|  |                     'subtitles': subtitles, | ||||||
|  |                     'is_live': is_live, | ||||||
|  |                 }) | ||||||
|  |  | ||||||
|  |         for e in entries: | ||||||
|  |             self._sort_formats(e['formats']) | ||||||
|  |  | ||||||
|         return self.playlist_result(entries, playlist_id, playlist_title, playlist_description) |         return self.playlist_result(entries, playlist_id, playlist_title, playlist_description) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․