mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-06-18 15:55:30 +02:00
[ie/youtube] Rework nsig function name extraction (#13403)
Closes #13401 Authored by: Grub4K
This commit is contained in:
parent
4e7c1ea346
commit
9e38b273b7
@ -320,6 +320,14 @@ _NSIG_TESTS = [
|
|||||||
'https://www.youtube.com/s/player/59b252b9/player_ias.vflset/en_US/base.js',
|
'https://www.youtube.com/s/player/59b252b9/player_ias.vflset/en_US/base.js',
|
||||||
'D3XWVpYgwhLLKNK4AGX', 'aZrQ1qWJ5yv5h',
|
'D3XWVpYgwhLLKNK4AGX', 'aZrQ1qWJ5yv5h',
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
'https://www.youtube.com/s/player/fc2a56a5/player_ias.vflset/en_US/base.js',
|
||||||
|
'qTKWg_Il804jd2kAC', 'OtUAm2W6gyzJjB9u',
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'https://www.youtube.com/s/player/fc2a56a5/tv-player-ias.vflset/tv-player-ias.js',
|
||||||
|
'qTKWg_Il804jd2kAC', 'OtUAm2W6gyzJjB9u',
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user