|
@@ -1607,16 +1607,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
webpage or '', 'player URL', fatal=False)
|
|
|
if player_url:
|
|
|
ytcfgs = ytcfgs + ({'PLAYER_JS_URL': player_url},)
|
|
|
- player_url = traverse_obj(
|
|
|
+ return traverse_obj(
|
|
|
ytcfgs, (Ellipsis, 'PLAYER_JS_URL'), (Ellipsis, 'WEB_PLAYER_CONTEXT_CONFIGS', Ellipsis, 'jsUrl'),
|
|
|
get_all=False, expected_type=lambda u: urljoin('https://www.youtube.com', u))
|
|
|
- nplayer_url, is_tce = re.subn(r'(?<=/player_ias)_tce(?=\.vflset/)', '', player_url or '')
|
|
|
- if is_tce:
|
|
|
- # TODO: Add proper support for the 'tce' variant players
|
|
|
- # See https://github.com/yt-dlp/yt-dlp/issues/12398
|
|
|
- self.write_debug('Modifying tce player URL: {0}'.format(player_url))
|
|
|
- return nplayer_url
|
|
|
- return player_url
|
|
|
|
|
|
def _download_player_url(self, video_id, fatal=False):
|
|
|
res = self._download_webpage(
|
|
@@ -1858,12 +1851,22 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|
|
|
|
|
if func_code:
|
|
|
return jsi, player_id, func_code
|
|
|
+ return self._extract_n_function_code_jsi(video_id, jsi, player_id)
|
|
|
+
|
|
|
+ def _extract_n_function_code_jsi(self, video_id, jsi, player_id=None):
|
|
|
+
|
|
|
+ var_ay = self._search_regex(
|
|
|
+ r'(?:[;\s]|^)\s*(var\s*[\w$]+\s*=\s*"[^"]+"\s*\.\s*split\("\{"\))(?=\s*[,;])',
|
|
|
+ jsi.code, 'useful values', default='')
|
|
|
|
|
|
- func_name = self._extract_n_function_name(jscode)
|
|
|
+ func_name = self._extract_n_function_name(jsi.code)
|
|
|
|
|
|
func_code = jsi.extract_function_code(func_name)
|
|
|
+ if var_ay:
|
|
|
+ func_code = (func_code[0], ';\n'.join((var_ay, func_code[1])))
|
|
|
|
|
|
- self.cache.store('youtube-nsig', player_id, func_code)
|
|
|
+ if player_id:
|
|
|
+ self.cache.store('youtube-nsig', player_id, func_code)
|
|
|
return jsi, player_id, func_code
|
|
|
|
|
|
def _extract_n_function_from_code(self, jsi, func_code):
|