Skip to content

Commit 1c30a27

Browse files
committed
Cache nParams to prevent executing the JavaScript function for the same nParam multiple times.
Closes #689
1 parent 3a3d1d7 commit 1c30a27

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/YoutubeThrottlingDecrypter.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.schabi.newpipe.extractor.utils.JavaScript;
55
import org.schabi.newpipe.extractor.utils.Parser;
66

7+
import java.util.HashMap;
8+
import java.util.Map;
79
import java.util.regex.Pattern;
810

911
/**
@@ -24,6 +26,7 @@
2426
public class YoutubeThrottlingDecrypter {
2527

2628
private static final String N_PARAM_REGEX = "[&?]n=([^&]+)";
29+
private static final Map<String, String> nParams = new HashMap<>();
2730

2831
private final String functionName;
2932
private final String function;
@@ -78,7 +81,12 @@ private String parseNParam(String url) throws Parser.RegexException {
7881
}
7982

8083
private String decryptNParam(String nParam) {
81-
return JavaScript.run(function, functionName, nParam);
84+
if (nParams.containsKey(nParam)) {
85+
return nParams.get(nParam);
86+
}
87+
final String decryptedNParam = JavaScript.run(function, functionName, nParam);
88+
nParams.put(nParam, decryptedNParam);
89+
return decryptedNParam;
8290
}
8391

8492
private String replaceNParam(String url, String oldValue, String newValue) {

0 commit comments

Comments
 (0)