diff options
author | dirkf <fieldhouse@gmx.net> | 2025-05-02 13:38:32 +0100 |
---|---|---|
committer | dirkf <fieldhouse@gmx.net> | 2025-05-03 00:09:21 +0100 |
commit | 4a31290ae14705100814b88f158e7876f83a5b67 (patch) | |
tree | 06ae48c284e624329e68405e2163123ec0b3441c | |
parent | 3a42f6ad372935733150159b0447e790c037c1af (diff) |
[YouTube] Delete cached problem nsig cache data on descrambling error
* inspired by yt-dlp/yt-dlp#12750
-rw-r--r-- | youtube_dl/extractor/youtube.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index a1c9a6eae..0d6ffa3f2 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -1696,6 +1696,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor): self.cache.store(cache_id[0], cache_id[1], data) self._player_cache[cache_id] = data + def _remove_player_data_from_cache(self, name, player_url, extra_id=None): + cache_id = ('youtube-{0}'.format(name), self._player_js_cache_key(player_url, extra_id)) + + if cache_id in self._player_cache: + self.cache.clear(*cache_id) + self._player_cache.pop(cache_id, None) + def _extract_signature_function(self, video_id, player_url, example_sig): # player_id = self._extract_player_info(player_url) @@ -1989,7 +1996,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor): n_param = n_param[-1] n_response = decrypt_nsig(n_param)(n_param, video_id, player_url) if n_response is None: - # give up if descrambling failed + # give up and forget cached data if descrambling failed + self._remove_player_data_from_cache('nsig', player_url) break fmt['url'] = update_url_query(fmt['url'], {'n': n_response}) |