mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-12 14:26:49 +01:00
parent
fcca0d53a8
commit
5cb2d36c82
@ -13,6 +13,7 @@
|
|||||||
float_or_none,
|
float_or_none,
|
||||||
sanitized_Request,
|
sanitized_Request,
|
||||||
urlencode_postdata,
|
urlencode_postdata,
|
||||||
|
USER_AGENTS,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -114,6 +115,9 @@ def _real_extract(self, url):
|
|||||||
'requestSource': 'iVysilani',
|
'requestSource': 'iVysilani',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
entries = []
|
||||||
|
|
||||||
|
for user_agent in (None, USER_AGENTS['Safari']):
|
||||||
req = sanitized_Request(
|
req = sanitized_Request(
|
||||||
'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
|
'http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist',
|
||||||
data=urlencode_postdata(data))
|
data=urlencode_postdata(data))
|
||||||
@ -121,10 +125,14 @@ def _real_extract(self, url):
|
|||||||
req.add_header('Content-type', 'application/x-www-form-urlencoded')
|
req.add_header('Content-type', 'application/x-www-form-urlencoded')
|
||||||
req.add_header('x-addr', '127.0.0.1')
|
req.add_header('x-addr', '127.0.0.1')
|
||||||
req.add_header('X-Requested-With', 'XMLHttpRequest')
|
req.add_header('X-Requested-With', 'XMLHttpRequest')
|
||||||
req.add_header('User-agent', 'Mozilla/5.0')
|
if user_agent:
|
||||||
|
req.add_header('User-Agent', user_agent)
|
||||||
req.add_header('Referer', url)
|
req.add_header('Referer', url)
|
||||||
|
|
||||||
playlistpage = self._download_json(req, playlist_id)
|
playlistpage = self._download_json(req, playlist_id, fatal=False)
|
||||||
|
|
||||||
|
if not playlistpage:
|
||||||
|
continue
|
||||||
|
|
||||||
playlist_url = playlistpage['url']
|
playlist_url = playlistpage['url']
|
||||||
if playlist_url == 'error_region':
|
if playlist_url == 'error_region':
|
||||||
@ -136,19 +144,32 @@ def _real_extract(self, url):
|
|||||||
playlist_title = self._og_search_title(webpage, default=None)
|
playlist_title = self._og_search_title(webpage, default=None)
|
||||||
playlist_description = self._og_search_description(webpage, default=None)
|
playlist_description = self._og_search_description(webpage, default=None)
|
||||||
|
|
||||||
playlist = self._download_json(req, playlist_id)['playlist']
|
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)
|
playlist_len = len(playlist)
|
||||||
|
|
||||||
entries = []
|
for num, item in enumerate(playlist):
|
||||||
for item in playlist:
|
|
||||||
is_live = item.get('type') == 'LIVE'
|
is_live = item.get('type') == 'LIVE'
|
||||||
formats = []
|
formats = []
|
||||||
for format_id, stream_url in item['streamUrls'].items():
|
for format_id, stream_url in item.get('streamUrls', {}).items():
|
||||||
|
if 'playerType=flash' in stream_url:
|
||||||
formats.extend(self._extract_m3u8_formats(
|
formats.extend(self._extract_m3u8_formats(
|
||||||
stream_url, playlist_id, 'mp4',
|
stream_url, playlist_id, 'mp4',
|
||||||
entry_protocol='m3u8' if is_live else 'm3u8_native',
|
entry_protocol='m3u8' if is_live else 'm3u8_native',
|
||||||
fatal=False))
|
fatal=False))
|
||||||
self._sort_formats(formats)
|
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']
|
item_id = item.get('id') or item['assetId']
|
||||||
title = item['title']
|
title = item['title']
|
||||||
@ -180,6 +201,9 @@ def _real_extract(self, url):
|
|||||||
'is_live': is_live,
|
'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)
|
||||||
|
|
||||||
def _get_subtitles(self, episode_id, subs):
|
def _get_subtitles(self, episode_id, subs):
|
||||||
|
Loading…
Reference in New Issue
Block a user