From 4e22c5ee8740a7fbc1d595b3f668aac0ad4f5764 Mon Sep 17 00:00:00 2001 From: AudricV <74829229+AudricV@users.noreply.github.com> Date: Mon, 26 Jun 2023 15:25:53 +0200 Subject: [PATCH] [YouTube] Support multiple declarations for throttling parameter function name array Also moved the corresponding regex parts in static constants for easier future modifications --- .../services/youtube/YoutubeThrottlingDecrypter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeThrottlingDecrypter.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeThrottlingDecrypter.java index 1f135bde7..227751e29 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeThrottlingDecrypter.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeThrottlingDecrypter.java @@ -48,6 +48,9 @@ public final class YoutubeThrottlingDecrypter { private static final String DECRYPT_FUNCTION_BODY_REGEX = "=\\s*function([\\S\\s]*?\\}\\s*return [\\w$]+?\\.join\\(\"\"\\)\\s*\\};)"; + private static final String DECRYPT_FUNCTION_ARRAY_OBJECT_TYPE_DECLARATION_REGEX = "var "; + private static final String FUNCTION_NAMES_IN_DECRYPT_ARRAY_REGEX = "\\s*=\\s*\\[(.+?)][;,]"; + private static final Map N_PARAMS_CACHE = new HashMap<>(); private static String decryptFunction; private static String decryptFunctionName; @@ -117,7 +120,8 @@ public final class YoutubeThrottlingDecrypter { final int arrayNum = Integer.parseInt(matcher.group(2)); final Pattern arrayPattern = Pattern.compile( - "var " + Pattern.quote(functionName) + "\\s*=\\s*\\[(.+?)];"); + DECRYPT_FUNCTION_ARRAY_OBJECT_TYPE_DECLARATION_REGEX + Pattern.quote(functionName) + + FUNCTION_NAMES_IN_DECRYPT_ARRAY_REGEX); final String arrayStr = Parser.matchGroup1(arrayPattern, playerJsCode); final String[] names = arrayStr.split(","); return names[arrayNum];