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 1cf6cb49a..678b7968d 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 @@ -33,7 +33,10 @@ import java.util.regex.Pattern; */ public class YoutubeThrottlingDecrypter { - private static final String N_PARAM_REGEX = "[&?]n=([^&]+)"; + private static final Pattern N_PARAM_PATTERN = Pattern.compile("[&?]n=([^&]+)"); + private static final Pattern FUNCTION_NAME_PATTERN = Pattern.compile( + "b=a\\.get\\(\"n\"\\)\\)&&\\(b=(\\w+)\\(b\\),a\\.set\\(\"n\",b\\)"); + private static final Map nParams = new HashMap<>(); private final String functionName; @@ -62,9 +65,7 @@ public class YoutubeThrottlingDecrypter { private String parseDecodeFunctionName(final String playerJsCode) throws Parser.RegexException { - Pattern pattern = Pattern.compile( - "b=a\\.get\\(\"n\"\\)\\)&&\\(b=(\\w+)\\(b\\),a\\.set\\(\"n\",b\\)"); - return Parser.matchGroup1(pattern, playerJsCode); + return Parser.matchGroup1(FUNCTION_NAME_PATTERN, playerJsCode); } @Nonnull @@ -86,12 +87,11 @@ public class YoutubeThrottlingDecrypter { } private boolean containsNParam(final String url) { - return Parser.isMatch(N_PARAM_REGEX, url); + return Parser.isMatch(N_PARAM_PATTERN, url); } private String parseNParam(final String url) throws Parser.RegexException { - Pattern nValuePattern = Pattern.compile(N_PARAM_REGEX); - return Parser.matchGroup1(nValuePattern, url); + return Parser.matchGroup1(N_PARAM_PATTERN, url); } private String decryptNParam(final String nParam) { diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Parser.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Parser.java index 44368de2e..0a766fd16 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Parser.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Parser.java @@ -84,6 +84,11 @@ public class Parser { return mat.find(); } + public static boolean isMatch(Pattern pattern, String input) { + Matcher mat = pattern.matcher(input); + return mat.find(); + } + public static Map compatParseMap(final String input) throws UnsupportedEncodingException { Map map = new HashMap<>(); for (String arg : input.split("&")) {