diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/TsuminoRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/TsuminoRipper.java index 846c4795a..fa3c40e84 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/TsuminoRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/TsuminoRipper.java @@ -15,9 +15,7 @@ import com.rarchives.ripme.utils.RipUtils; import com.rarchives.ripme.utils.Utils; import org.json.JSONArray; -import org.json.JSONObject; import org.jsoup.Connection; -import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -42,22 +40,27 @@ public List getTags(Document doc) { return tags; } - private JSONArray getPageUrls() { - String postURL = "http://www.tsumino.com/Read/Load"; + private ArrayList getPageUrls(int numPages) { + // Get the api access token from the index page + ArrayList urlsToReturn = new ArrayList(); + try { - // This sessionId will expire and need to be replaced + LOGGER.debug("Getting index"); cookies.put("ASP.NET_SessionId","c4rbzccf0dvy3e0cloolmlkq"); - Document doc = Jsoup.connect(postURL).data("q", getAlbumID()).userAgent(USER_AGENT).cookies(cookies).referrer("http://www.tsumino.com/Read/View/" + getAlbumID()).get(); - String jsonInfo = doc.html().replaceAll("","").replaceAll("", "").replaceAll("", "").replaceAll("", "") - .replaceAll("", "").replaceAll("\n", ""); - JSONObject json = new JSONObject(jsonInfo); - return json.getJSONArray("reader_page_urls"); +// IMPORTANT NOTE: If you request "https://www.tsumino.com/Read/Index/" + getAlbumID() the server was temp ban you! Always request /Read/Index/ID?page=1 like the web ui does + Document page = Http.url(new URL("https://www.tsumino.com/Read/Index/" + getAlbumID() + "?page=1")).referrer("https://www.tsumino.com/Read/Index/" + getAlbumID()).cookies(cookies).get(); + LOGGER.info(page); + String endPoint = page.select("div#image-container").attr("data-cdn"); + for (int i = 1; i <= numPages; i++) { + urlsToReturn.add(endPoint.replaceAll("\\[PAGE\\]", String.valueOf(i))); + } } catch (IOException e) { LOGGER.info(e); sendUpdate(RipStatusMessage.STATUS.DOWNLOAD_ERRORED, "Unable to download album, please compete the captcha at http://www.tsumino.com/Read/Auth/" + getAlbumID() + " and try again"); return null; } + return urlsToReturn; } @Override @@ -82,8 +85,13 @@ public String getGID(URL url) throws MalformedURLException { if (m.matches()) { return m.group(1); } + p = Pattern.compile("https?://www.tsumino.com/entry/([0-9]+)/?"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); + } throw new MalformedURLException("Expected tsumino URL format: " + - "tsumino.com/Book/Info/ID/TITLE - got " + url + " instead"); + "tsumino.com/entry/ID - got " + url + " instead"); } private String getAlbumID() { @@ -92,6 +100,11 @@ private String getAlbumID() { if (m.matches()) { return m.group(1); } + p = Pattern.compile("https?://www.tsumino.com/entry/([0-9]+)/?"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); + } return null; } @@ -111,13 +124,8 @@ public Document getFirstPage() throws IOException { @Override public List getURLsFromPage(Document doc) { - JSONArray imageIds = getPageUrls(); - List result = new ArrayList<>(); - for (int i = 0; i < imageIds.length(); i++) { - result.add("http://www.tsumino.com/Image/Object?name=" + URLEncoder.encode(imageIds.getString(i))); - } - return result; + return getPageUrls(Integer.parseInt(doc.select("div#Pages").text())); } @Override diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java index 78234951b..884c49bf7 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java @@ -22,9 +22,9 @@ public void testTagBlackList() throws IOException { EHentaiRipper ripper = new EHentaiRipper(url); List tagsOnPage = ripper.getTags(ripper.getFirstPage()); // Test multiple blacklisted tags - String[] tags = {"test", "one", "yuri"}; + String[] tags = {"test", "one", "yuri | lesbians"}; String blacklistedTag = RipUtils.checkTags(tags, tagsOnPage); - assertEquals("yuri", blacklistedTag); + assertEquals("yuri | lesbians", blacklistedTag); // test tags with spaces in them String[] tags2 = {"test", "one", "midnight on mars"};