From f79f0cdc3c916aae4b54cedcdf50f7af0a8205e2 Mon Sep 17 00:00:00 2001 From: 4pr0n Date: Sun, 1 Jun 2014 02:02:36 -0700 Subject: [PATCH] 1.0.51 - Deviantart rips full-size NSFW images #44 --- pom.xml | 2 +- .../ripper/rippers/DeviantartRipper.java | 25 ++++++++++++++++--- .../com/rarchives/ripme/ui/UpdateUtils.java | 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index b57558a6..e3aa1ce6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.rarchives.ripme ripme jar - 1.0.50 + 1.0.51 ripme http://rip.rarchives.com diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/DeviantartRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/DeviantartRipper.java index 2720770a..0178a5cd 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/DeviantartRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/DeviantartRipper.java @@ -21,6 +21,7 @@ import org.jsoup.select.Elements; import com.rarchives.ripme.ripper.AlbumRipper; import com.rarchives.ripme.ui.RipStatusMessage.STATUS; +import com.rarchives.ripme.utils.Base64; import com.rarchives.ripme.utils.Utils; public class DeviantartRipper extends AlbumRipper { @@ -31,6 +32,8 @@ public class DeviantartRipper extends AlbumRipper { private static final int SLEEP_TIME = 2000; private static final Logger logger = Logger.getLogger(DeviantartRipper.class); + private Map cookies = new HashMap(); + public DeviantartRipper(URL url) throws IOException { super(url); } @@ -52,12 +55,20 @@ public class DeviantartRipper extends AlbumRipper { int index = 0; String nextURL = this.url.toExternalForm(); + // Login + try { + cookies = loginToDeviantart(); + } catch (Exception e) { + logger.warn("Failed to login: ", e); + } + // Iterate over every page while (nextURL != null) { logger.info(" Retrieving " + nextURL); sendUpdate(STATUS.LOADING_RESOURCE, "Retrieving " + nextURL); Document doc = Jsoup.connect(nextURL) + .cookies(cookies) .userAgent(USER_AGENT) .get(); @@ -180,16 +191,22 @@ public class DeviantartRipper extends AlbumRipper { */ public String smallToFull(String thumb, String page) { try { + // Fetch the image page Response resp = Jsoup.connect(page) .userAgent(USER_AGENT) + .cookies(cookies) .referrer(this.url.toExternalForm()) .method(Method.GET) .execute(); Map cookies = resp.cookies(); + cookies.putAll(this.cookies); + + // Try to find the "Download" box Elements els = resp.parse().select("a.dev-page-download"); if (els.size() == 0) { throw new IOException("no download page found"); } + // Full-size image String fsimage = els.get(0).attr("href"); String prefix = ""; @@ -198,6 +215,7 @@ public class DeviantartRipper extends AlbumRipper { imageId = imageId.substring(0, imageId.indexOf('.')); prefix = String.format("%010d_", alphaToLong(imageId)); } + // Download it addURLToDownload(new URL(fsimage), prefix, "", page, cookies); return null; } catch (IOException ioe) { @@ -235,15 +253,14 @@ public class DeviantartRipper extends AlbumRipper { } /** - * Logs into deviant art. Not required to rip NSFW images. + * Logs into deviant art. Required to rip full-size NSFW content. * @return Map of cookies containing session data. */ - @SuppressWarnings("unused") private Map loginToDeviantart() throws IOException { // Populate postData fields Map postData = new HashMap(); - String username = Utils.getConfigString("deviantart.username", null); - String password = Utils.getConfigString("deviantart.password", null); + String username = Utils.getConfigString("deviantart.username", new String(Base64.decode("Z3JhYnB5"))); + String password = Utils.getConfigString("deviantart.password", new String(Base64.decode("ZmFrZXJz"))); if (username == null || password == null) { throw new IOException("could not find username or password in config"); } diff --git a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java index 00d551da..2171c582 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.50"; + private static final String DEFAULT_VERSION = "1.0.51"; 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";