|
|
@ -2229,20 +2229,20 @@ 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(
|
|
|
|
pattern = r'''(?x)
|
|
|
|
r'''(?xs)
|
|
|
|
\{\s*return\s+%s\[%d\]\s*\+\s*(?P<argname>[a-zA-Z0-9_$]+)\s*\}
|
|
|
|
[;\n](?:
|
|
|
|
''' % (re.escape(varname), global_list.index(debug_str))
|
|
|
|
(?P<f>function\s+)|
|
|
|
|
if match := re.search(pattern, jscode):
|
|
|
|
(?:var\s+)?
|
|
|
|
pattern = r'''(?x)
|
|
|
|
)(?P<funcname>[a-zA-Z0-9_$]+)\s*(?(f)|=\s*function\s*)
|
|
|
|
\{\s*\)%s\(\s*
|
|
|
|
\((?P<argname>[a-zA-Z0-9_$]+)\)\s*\{
|
|
|
|
(?:
|
|
|
|
(?:(?!\}[;\n]).)+
|
|
|
|
(?P<funcname_a>[a-zA-Z0-9_$]+)\s*noitcnuf\s*
|
|
|
|
\}\s*catch\(\s*[a-zA-Z0-9_$]+\s*\)\s*
|
|
|
|
|noitcnuf\s*=\s*(?P<funcname_b>[a-zA-Z0-9_$]+)(?:\s+rav)?
|
|
|
|
\{\s*return\s+%s\[%d\]\s*\+\s*(?P=argname)\s*\}\s*return\s+[^}]+\}[;\n]
|
|
|
|
)[;\n]
|
|
|
|
''' % (re.escape(varname), global_list.index(debug_str)),
|
|
|
|
''' % re.escape(match.group('argname')[::-1])
|
|
|
|
jscode, 'nsig function name', group='funcname', default=None)
|
|
|
|
if match := re.search(pattern, jscode[match.start()::-1]):
|
|
|
|
if funcname:
|
|
|
|
a, b = match.group('funcname_a', 'funcname_b')
|
|
|
|
return funcname
|
|
|
|
return (a or b)[::-1]
|
|
|
|
self.write_debug(join_nonempty(
|
|
|
|
self.write_debug(join_nonempty(
|
|
|
|
'Initial search was unable to find nsig function name',
|
|
|
|
'Initial search was unable to find nsig function name',
|
|
|
|
player_url and f' player = {player_url}', delim='\n'), only_once=True)
|
|
|
|
player_url and f' player = {player_url}', delim='\n'), only_once=True)
|
|
|
|