diff --git a/pom.xml b/pom.xml index 7aa6d0c8..4bc7a149 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.rarchives.ripme ripme jar - 1.0.70 + 1.0.71 ripme http://rip.rarchives.com diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/FuskatorRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/FuskatorRipper.java new file mode 100644 index 00000000..0ac86139 --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/FuskatorRipper.java @@ -0,0 +1,86 @@ +package com.rarchives.ripme.ripper.rippers; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.jsoup.nodes.Document; + +import com.rarchives.ripme.ripper.AbstractHTMLRipper; +import com.rarchives.ripme.utils.Http; +import com.rarchives.ripme.utils.Utils; + +public class FuskatorRipper extends AbstractHTMLRipper { + + public FuskatorRipper(URL url) throws IOException { + super(url); + } + + @Override + public String getHost() { + return "fuskator"; + } + @Override + public String getDomain() { + return "fuskator.com"; + } + + @Override + public URL sanitizeURL(URL url) throws MalformedURLException { + String u = url.toExternalForm(); + if (u.contains("/thumbs/")) { + u = u.replace("/thumbs/", "/full/"); + } + return new URL(u); + } + + @Override + public String getGID(URL url) throws MalformedURLException { + Pattern p = Pattern.compile("^.*fuskator.com/full/([a-zA-Z0-9\\-]+).*$"); + Matcher m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); + } + throw new MalformedURLException( + "Expected fuskator.com gallery formats: " + + "fuskator.com/full/id/..." + + " Got: " + url); + } + + @Override + public Document getFirstPage() throws IOException { + return Http.url(url).get(); + } + + @Override + public List getURLsFromPage(Document doc) { + List imageURLs = new ArrayList(); + String html = doc.html(); + // Get "baseUrl" + String baseUrl = Utils.between(html, "var baseUrl = unescape('", "'").get(0); + try { + baseUrl = URLDecoder.decode(baseUrl, "UTF-8"); + } catch (UnsupportedEncodingException e) { + logger.warn("Error while decoding " + baseUrl, e); + } + if (baseUrl.startsWith("//")) { + baseUrl = "http:" + baseUrl; + } + // Iterate over images + for (String filename : Utils.between(html, ".src=baseUrl+'", "'")) { + imageURLs.add(baseUrl + filename); + } + return imageURLs; + } + + @Override + public void downloadURL(URL url, int index) { + addURLToDownload(url, getPrefix(index)); + } +} diff --git a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java index a308a1dc..bd8da101 100644 --- a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java +++ b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java @@ -21,7 +21,7 @@ import com.rarchives.ripme.utils.Utils; public class UpdateUtils { private static final Logger logger = Logger.getLogger(UpdateUtils.class); - private static final String DEFAULT_VERSION = "1.0.70"; + private static final String DEFAULT_VERSION = "1.0.71"; private static final String updateJsonURL = "http://rarchives.com/ripme.json"; private static final String updateJarURL = "http://rarchives.com/ripme.jar"; private static final String mainFileName = "ripme.jar"; diff --git a/src/main/java/com/rarchives/ripme/utils/Utils.java b/src/main/java/com/rarchives/ripme/utils/Utils.java index 16c3ad28..99a4a667 100644 --- a/src/main/java/com/rarchives/ripme/utils/Utils.java +++ b/src/main/java/com/rarchives/ripme/utils/Utils.java @@ -333,4 +333,26 @@ public class Utils { logger.info("Loaded " + logFile); } + /** + * Gets list of strings between two strings. + * @param fullText Text to retrieve from. + * @param start String that precedes the desired text + * @param finish String that follows the desired text + * @return List of all strings that are between 'start' and 'finish' + */ + public static List between(String fullText, String start, String finish) { + List result = new ArrayList(); + int i, j; + i = fullText.indexOf(start); + while (i >= 0) { + i += start.length(); + j = fullText.indexOf(finish, i); + if (j < 0) { + break; + } + result.add(fullText.substring(i, j)); + i = fullText.indexOf(start, j + finish.length()); + } + return result; + } } \ No newline at end of file