commit: 2b4fbfce25902d557b86b003cf48f738129efce4
parent 1bc45b8b6c0c853e0f3d74346551fec0708c733d
Author: dirkf <fieldhouse@gmx.net>
Date: Wed, 26 Mar 2025 02:27:25 +0000
[YouTube] Support player `4fcd6e4a`
thx seproDev, bashonly: yt-dlp/yt-dlp#12748
Diffstat:
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git 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
@@ -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)