diff options
author | dirkf <fieldhouse@gmx.net> | 2025-03-26 02:27:25 +0000 |
---|---|---|
committer | dirkf <fieldhouse@gmx.net> | 2025-03-26 02:27:25 +0000 |
commit | 2b4fbfce25902d557b86b003cf48f738129efce4 (patch) | |
tree | 1a584014a2e6c30ca0110634484cc349df06de78 | |
parent | 1bc45b8b6c0c853e0f3d74346551fec0708c733d (diff) |
[YouTube] Support player `4fcd6e4a`
thx seproDev, bashonly: yt-dlp/yt-dlp#12748
-rw-r--r-- | test/test_youtube_signature.py | 13 | ||||
-rw-r--r-- | youtube_dl/extractor/youtube.py | 9 |
2 files changed, 20 insertions, 2 deletions
diff --git a/test/test_youtube_signature.py b/test/test_youtube_signature.py index 696f832e4..8fdcce8d4 100644 --- a/test/test_youtube_signature.py +++ b/test/test_youtube_signature.py @@ -94,6 +94,11 @@ _SIG_TESTS = [ '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', '0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpz2ICs6EVdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', ), + ( + 'https://www.youtube.com/s/player/4fcd6e4a/player_ias.vflset/en_US/base.js', + '2aq0aqSyOoJXtK73m-uME_jv7-pT15gOFC02RFkGMqWpzEICs69VdbwQ0LDp1v7j8xx92efCJlYFYb1sUkkBSPOlPmXgIARw8JQ0qOAOAA', + 'wAOAOq0QJ8ARAIgXmPlOPSBkkUs1bYFYlJCfe29xx8q7v1pDL0QwbdV96sCIEzpWqMGkFR20CFOg51Tp-7vj_EMu-m37KtXJoOySqa0', + ), ] _NSIG_TESTS = [ @@ -273,6 +278,14 @@ _NSIG_TESTS = [ 'https://www.youtube.com/s/player/363db69b/player_ias.vflset/en_US/base.js', 'eWYu5d5YeY_4LyEDc', 'XJQqf-N7Xra3gg', ), + ( + 'https://www.youtube.com/s/player/4fcd6e4a/player_ias.vflset/en_US/base.js', + 'o_L251jm8yhZkWtBW', 'lXoxI3XvToqn6A', + ), + ( + 'https://www.youtube.com/s/player/4fcd6e4a/tv-player-ias.vflset/tv-player-ias.js', + 'o_L251jm8yhZkWtBW', 'lXoxI3XvToqn6A', + ), ] diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 5addfe7c6..ce97fd75b 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1711,8 +1711,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor): def _extract_sig_fn(self, jsi, funcname): var_ay = self._search_regex( - r'''(?:\*/|\{|\n|^)\s*(?:'[^']+'\s*;\s*)(var\s*[\w$]+\s*=\s*('|")(?:\\\2|(?!\2).)+\2\s*\.\s*split\(('|")\W+\3\))(?=\s*[,;])''', - jsi.code, 'useful values', default='') + r'''(?x) + (?:\*/|\{|\n|^)\s*(?:'[^']+'\s*;\s*) + (var\s*[\w$]+\s*=\s*(?: + ('|")(?:\\\2|(?!\2).)+\2\s*\.\s*split\(\s*('|")\W+\3\s*\)| + \[\s*(?:('|")(?:\\\4|(?!\4).)*\4\s*(?:(?=\])|,\s*))+\] + ))(?=\s*[,;]) + ''', jsi.code, 'useful values', default='') sig_fn = jsi.extract_function_code(funcname) |