From 1f1f8ea53a46d3fc9f0afb763b9a372ad5f62a35 Mon Sep 17 00:00:00 2001 From: MetaPrime Date: Sat, 19 Apr 2025 18:37:33 -0700 Subject: [PATCH] Update CfakeRipper to new site format (Fixes #2116) --- .../ripme/ripper/rippers/CfakeRipper.java | 120 +++++++++--------- .../tst/ripper/rippers/CfakeRipperTest.java | 2 +- 2 files changed, 60 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/CfakeRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/CfakeRipper.java index 4372883e..a66d07d0 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/CfakeRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/CfakeRipper.java @@ -15,75 +15,73 @@ import com.rarchives.ripme.ripper.AbstractHTMLRipper; import com.rarchives.ripme.utils.Http; public class CfakeRipper extends AbstractHTMLRipper { - public CfakeRipper(URL url) throws IOException { - super(url); + super(url); } - @Override - public String getHost() { - return "cfake"; + @Override + public String getHost() { + return "cfake"; + } + + @Override + public String getDomain() { + return "cfake.com"; + } + + @Override + public String getGID(URL url) throws MalformedURLException { + Pattern p = Pattern.compile("https?://cfake\\.com/(?:picture|images/celebrity)/([a-zA-Z1-9_-]*)/\\d+/?$"); + Matcher m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); } + throw new MalformedURLException("Expected cfake URL format: " + + "cfake.com/images/celebrity/MODEL/ID - got " + url + " instead"); + } - @Override - public String getDomain() { - return "cfake.com"; + @Override + public Document getFirstPage() throws IOException { + // "url" is an instance field of the superclass + return Http.url(url).get(); + } + + @Override + public Document getNextPage(Document doc) throws IOException { + // We use comic-nav-next to the find the next page + Element elem = doc.select("td > div.next > a").first(); + if (elem == null) { + throw new IOException("No more pages"); } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("https?://cfake\\.com/picture/([a-zA-Z1-9_-]*)/\\d+/?$"); - Matcher m = p.matcher(url.toExternalForm()); - if (m.matches()) { - return m.group(1); - } - throw new MalformedURLException("Expected cfake URL format: " + - "cfake.com/picture/MODEL/ID - got " + url + " instead"); + String nextPage = elem.attr("href"); + // Some times this returns a empty string + // This for stops that + if (nextPage.equals("")) { + return null; + } else { + return Http.url("http://cfake.com" + nextPage).get(); } + } - @Override - public Document getFirstPage() throws IOException { - // "url" is an instance field of the superclass - return Http.url(url).get(); - } - - @Override - public Document getNextPage(Document doc) throws IOException { - // We use comic-nav-next to the find the next page - Element elem = doc.select("td > div.next > a").first(); - if (elem == null) { - throw new IOException("No more pages"); - } - String nextPage = elem.attr("href"); - // Some times this returns a empty string - // This for stops that - if (nextPage.equals("")) { - return null; - } - else { - return Http.url("http://cfake.com" + nextPage).get(); - } - } - - @Override - public List getURLsFromPage(Document doc) { - List result = new ArrayList<>(); - for (Element el : doc.select("table.display > tbody > tr > td > table > tbody > tr > td > a")) { - if (el.attr("href").contains("upload")) { - return result; - } else { - String imageSource = el.select("img").attr("src"); - // We remove the .md from images so we download the full size image - // not the thumbnail ones - imageSource = imageSource.replace("thumbs", "photos"); - result.add("http://cfake.com" + imageSource); - } - } + @Override + public List getURLsFromPage(Document doc) { + List result = new ArrayList<>(); + for (Element el : doc.select("table.display > tbody > tr > td > table > tbody > tr > td > a")) { + if (el.attr("href").contains("upload")) { return result; + } else { + String imageSource = el.select("img").attr("src"); + // We remove the .md from images so we download the full size image + // not the thumbnail ones + imageSource = imageSource.replace("thumbs", "photos"); + result.add("http://cfake.com" + imageSource); + } } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); - } + return result; } + + @Override + public void downloadURL(URL url, int index) { + addURLToDownload(url, getPrefix(index)); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/CfakeRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/CfakeRipperTest.java index 95f7ec2e..6a5f5abb 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/CfakeRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/CfakeRipperTest.java @@ -8,7 +8,7 @@ import com.rarchives.ripme.ripper.rippers.CfakeRipper; public class CfakeRipperTest extends RippersTest { public void testRip() throws IOException, URISyntaxException { - CfakeRipper ripper = new CfakeRipper(new URI("http://cfake.com/picture/Zooey_Deschanel/1264").toURL()); + CfakeRipper ripper = new CfakeRipper(new URI("https://cfake.com/images/celebrity/Zooey_Deschanel/1264").toURL()); testRipper(ripper); } }