diff options
| author | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-08-21 00:51:03 +0530 | 
|---|---|---|
| committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-08-21 00:51:03 +0530 | 
| commit | 90a1df305b628c78a497cf4010fb68cad856a314 (patch) | |
| tree | 95639a3c8b623aeb3001ec66814c4aa4034ca7c5 | |
| parent | 0a6b4b82e926ffd583a5cbe81d25bbfc7f1f43ed (diff) | |
| download | hypervideo-pre-90a1df305b628c78a497cf4010fb68cad856a314.tar.lz hypervideo-pre-90a1df305b628c78a497cf4010fb68cad856a314.tar.xz hypervideo-pre-90a1df305b628c78a497cf4010fb68cad856a314.zip | |
[test] Fix test_youtube_signature
| -rw-r--r-- | test/test_youtube_signature.py | 4 | ||||
| -rw-r--r-- | yt_dlp/extractor/youtube.py | 21 | 
2 files changed, 16 insertions, 9 deletions
| diff --git a/test/test_youtube_signature.py b/test/test_youtube_signature.py index f1859a2fc..4b526ff2e 100644 --- a/test/test_youtube_signature.py +++ b/test/test_youtube_signature.py @@ -110,6 +110,10 @@ _NSIG_TESTS = [          'https://www.youtube.com/s/player/1f7d5369/player_ias.vflset/en_US/base.js',          'batNX7sYqIJdkJ', 'IhOkL_zxbkOZBw',      ), +    ( +        'https://www.youtube.com/s/player/009f1d77/player_ias.vflset/en_US/base.js', +        '5dwFHw8aFWQUQtffRq', 'audescmLUzI3jw', +    ),  ] diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py index fd62d716a..59449278d 100644 --- a/yt_dlp/extractor/youtube.py +++ b/yt_dlp/extractor/youtube.py @@ -2646,6 +2646,17 @@ class YoutubeIE(YoutubeBaseInfoExtractor):          self.write_debug(f'Decrypted nsig {s} => {ret}')          return ret +    def _extract_n_function_name(self, jscode): +        funcname, idx = self._search_regex( +            r'\.get\("n"\)\)&&\(b=(?P<nfunc>[a-zA-Z0-9$]+)(?:\[(?P<idx>\d+)\])?\([a-zA-Z0-9]\)', +            jscode, 'Initial JS player n function name', group=('nfunc', 'idx')) +        if not idx: +            return funcname + +        return json.loads(js_to_json(self._search_regex( +            rf'var {re.escape(funcname)}\s*=\s*(\[.+?\]);', jscode, +            f'Initial JS player n function list ({funcname}.{idx})')))[int(idx)] +      def _extract_n_function_code(self, video_id, player_url):          player_id = self._extract_player_info(player_url)          func_code = self.cache.load('youtube-nsig', player_id) @@ -2655,15 +2666,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):          if func_code:              return jsi, player_id, func_code -        funcname, idx = self._search_regex( -            r'\.get\("n"\)\)&&\(b=(?P<nfunc>[a-zA-Z0-9$]+)(?:\[(?P<idx>\d+)\])?\([a-zA-Z0-9]\)', -            jscode, 'Initial JS player n function name', group=('nfunc', 'idx')) -        if idx: -            funcname = json.loads(js_to_json(self._search_regex( -                rf'var {re.escape(funcname)}\s*=\s*(\[.+?\]);', jscode, -                f'Initial JS player n function list ({funcname}.{idx})')))[int(idx)] - -        func_code = jsi.extract_function_code(funcname) +        func_code = jsi.extract_function_code(self._extract_n_function_name(jscode))          self.cache.store('youtube-nsig', player_id, func_code)          return jsi, player_id, func_code | 
