mirror of
https://github.com/yt-dlp/yt-dlp
synced 2025-05-30 17:00:33 -05:00
[ie/youtube] nsig code improvements and cleanup (#13280)
Authored by: bashonly
This commit is contained in:
parent
b5be29fa58
commit
f7bbf5a617
@ -2228,7 +2228,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
|
|
||||||
def _extract_n_function_name(self, jscode, player_url=None):
|
def _extract_n_function_name(self, jscode, player_url=None):
|
||||||
varname, global_list = self._interpret_player_js_global_var(jscode, player_url)
|
varname, global_list = self._interpret_player_js_global_var(jscode, player_url)
|
||||||
if debug_str := traverse_obj(global_list, (lambda _, v: v.endswith('_w8_'), any)):
|
if debug_str := traverse_obj(global_list, (lambda _, v: v.endswith('-_w8_'), any)):
|
||||||
funcname = self._search_regex(
|
funcname = self._search_regex(
|
||||||
r'''(?xs)
|
r'''(?xs)
|
||||||
[;\n](?:
|
[;\n](?:
|
||||||
@ -2289,8 +2289,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
rf'var {re.escape(funcname)}\s*=\s*(\[.+?\])\s*[,;]', jscode,
|
rf'var {re.escape(funcname)}\s*=\s*(\[.+?\])\s*[,;]', jscode,
|
||||||
f'Initial JS player n function list ({funcname}.{idx})')))[int(idx)]
|
f'Initial JS player n function list ({funcname}.{idx})')))[int(idx)]
|
||||||
|
|
||||||
def _extract_player_js_global_var(self, jscode, player_url):
|
def _interpret_player_js_global_var(self, jscode, player_url):
|
||||||
"""Returns tuple of strings: variable assignment code, variable name, variable value code"""
|
"""Returns tuple of: variable name string, variable value list"""
|
||||||
extract_global_var = self._cached(self._search_regex, 'js global array', player_url)
|
extract_global_var = self._cached(self._search_regex, 'js global array', player_url)
|
||||||
varcode, varname, varvalue = extract_global_var(
|
varcode, varname, varvalue = extract_global_var(
|
||||||
r'''(?x)
|
r'''(?x)
|
||||||
@ -2308,27 +2308,23 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
self.write_debug(join_nonempty(
|
self.write_debug(join_nonempty(
|
||||||
'No global array variable found in player JS',
|
'No global array variable found in player JS',
|
||||||
player_url and f' player = {player_url}', delim='\n'), only_once=True)
|
player_url and f' player = {player_url}', delim='\n'), only_once=True)
|
||||||
return varcode, varname, varvalue
|
return None, None
|
||||||
|
|
||||||
def _interpret_player_js_global_var(self, jscode, player_url):
|
jsi = JSInterpreter(varcode)
|
||||||
"""Returns tuple of: variable name string, variable value list"""
|
|
||||||
_, varname, array_code = self._extract_player_js_global_var(jscode, player_url)
|
|
||||||
jsi = JSInterpreter(array_code)
|
|
||||||
interpret_global_var = self._cached(jsi.interpret_expression, 'js global list', player_url)
|
interpret_global_var = self._cached(jsi.interpret_expression, 'js global list', player_url)
|
||||||
return varname, interpret_global_var(array_code, {}, allow_recursion=10)
|
return varname, interpret_global_var(varvalue, {}, allow_recursion=10)
|
||||||
|
|
||||||
def _fixup_n_function_code(self, argnames, nsig_code, jscode, player_url):
|
def _fixup_n_function_code(self, argnames, nsig_code, jscode, player_url):
|
||||||
varcode, varname, _ = self._extract_player_js_global_var(jscode, player_url)
|
varname, global_list = self._interpret_player_js_global_var(jscode, player_url)
|
||||||
if varcode and varname:
|
if varname and global_list:
|
||||||
nsig_code = varcode + '; ' + nsig_code
|
nsig_code = f'var {varname}={json.dumps(global_list)}; {nsig_code}'
|
||||||
_, global_list = self._interpret_player_js_global_var(jscode, player_url)
|
|
||||||
else:
|
else:
|
||||||
varname = 'dlp_wins'
|
varname = 'dlp_wins'
|
||||||
global_list = []
|
global_list = []
|
||||||
|
|
||||||
undefined_idx = global_list.index('undefined') if 'undefined' in global_list else r'\d+'
|
undefined_idx = global_list.index('undefined') if 'undefined' in global_list else r'\d+'
|
||||||
fixed_code = re.sub(
|
fixed_code = re.sub(
|
||||||
rf'''(?x)
|
fr'''(?x)
|
||||||
;\s*if\s*\(\s*typeof\s+[a-zA-Z0-9_$]+\s*===?\s*(?:
|
;\s*if\s*\(\s*typeof\s+[a-zA-Z0-9_$]+\s*===?\s*(?:
|
||||||
(["\'])undefined\1|
|
(["\'])undefined\1|
|
||||||
{re.escape(varname)}\[{undefined_idx}\]
|
{re.escape(varname)}\[{undefined_idx}\]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user