From f2c99742659bc1ce139b9448d20acc8ffbbc1878 Mon Sep 17 00:00:00 2001 From: MetaPrime Date: Sun, 2 Feb 2025 02:03:20 -0800 Subject: [PATCH] Fix BatoRipper: update to new site code (Fix #2095) --- .../ripme/ripper/rippers/BatoRipper.java | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/BatoRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/BatoRipper.java index eb715f19..c1780818 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/BatoRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/BatoRipper.java @@ -11,7 +11,7 @@ import java.util.regex.Pattern; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.json.JSONObject; +import org.json.JSONArray; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -98,25 +98,34 @@ public class BatoRipper extends AbstractHTMLRipper { return m.matches(); } + public String scanForImageList(Pattern p, String scriptData) { + for (String line : scriptData.split("\n")) { + Matcher m = p.matcher(line.strip()); + if (m.matches()) { + return m.group(1); + } + } + return "[]"; + } @Override public List getURLsFromPage(Document doc) { List result = new ArrayList<>(); for (Element script : doc.select("script")) { - if (script.data().contains("var images = ")) { + if (script.data().contains("imgHttps")) { String s = script.data(); - s = s.replaceAll("var seriesId = \\d+;", ""); - s = s.replaceAll("var chapterId = \\d+;", ""); - s = s.replaceAll("var pages = \\d+;", ""); - s = s.replaceAll("var page = \\d+;", ""); - s = s.replaceAll("var prevCha = null;", ""); - s = s.replaceAll("var nextCha = \\.*;", ""); - String json = s.replaceAll("var images = ", "").replaceAll(";", ""); - JSONObject images = new JSONObject(json); - for (int i = 1; i < images.length() +1; i++) { - result.add(images.getString(Integer.toString(i))); - } + logger.info("Script data: " + s); + Pattern p = Pattern.compile(".*imgHttps = (\\[\"[^\\];]*\"\\]);.*"); + Matcher m = p.matcher(s); + String json = scanForImageList(p, s); + + logger.info("JSON: " + json); + + JSONArray images = new JSONArray(json); + for (int i = 0; i < images.length(); i++) { + result.add(images.getString(i)); + } } } return result; @@ -124,6 +133,7 @@ public class BatoRipper extends AbstractHTMLRipper { @Override public void downloadURL(URL url, int index) { + sleep(500); addURLToDownload(url, getPrefix(index)); } }