diff --git a/pom.xml b/pom.xml
index 0e5688c7d..e0ab274f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.rarchives.ripme
ripme
jar
- 1.0.35
+ 1.0.36
ripme
http://rip.rarchives.com
diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/GifyoRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/GifyoRipper.java
new file mode 100644
index 000000000..c5a9b074d
--- /dev/null
+++ b/src/main/java/com/rarchives/ripme/ripper/rippers/GifyoRipper.java
@@ -0,0 +1,125 @@
+package com.rarchives.ripme.ripper.rippers;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.log4j.Logger;
+import org.jsoup.Connection.Method;
+import org.jsoup.Jsoup;
+import org.jsoup.Connection.Response;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import com.rarchives.ripme.ripper.AlbumRipper;
+import com.rarchives.ripme.ui.RipStatusMessage.STATUS;
+
+public class GifyoRipper extends AlbumRipper {
+
+ private static final String DOMAIN = "gifyo.com",
+ HOST = "gifyo";
+ private static final Logger logger = Logger.getLogger(GifyoRipper.class);
+
+ public GifyoRipper(URL url) throws IOException {
+ super(url);
+ }
+
+ @Override
+ public boolean canRip(URL url) {
+ return (url.getHost().endsWith(DOMAIN));
+ }
+
+ @Override
+ public URL sanitizeURL(URL url) throws MalformedURLException {
+ Pattern p = Pattern.compile("^https?://gifyo\\.com/([a-zA-Z0-9\\-_]+)/?$");
+ Matcher m = p.matcher(url.toExternalForm());
+ if (m.matches()) {
+ return new URL("http://gifyo.com/" + m.group(1) + "/");
+ }
+ throw new MalformedURLException("Expected username in URL (gifyo.com/username/ and not " + url);
+ }
+ @Override
+ public void rip() throws IOException {
+ int page = 0;
+ Map cookies = new HashMap();
+ while (true) {
+ this.sendUpdate(STATUS.LOADING_RESOURCE, this.url.toExternalForm() + " (page #" + page + ")");
+ logger.info(" Retrieving " + this.url + "(page #" + page + ")");
+ Response resp = null;
+ if (page == 0) {
+ resp = Jsoup.connect(this.url.toExternalForm())
+ .ignoreContentType(true)
+ .userAgent(USER_AGENT)
+ .method(Method.GET)
+ .execute();
+ cookies = resp.cookies();
+ }
+ else {
+ Map postData = new HashMap();
+ postData.put("cmd", "refreshData");
+ postData.put("view", "gif");
+ postData.put("layout", "grid");
+ postData.put("page", Integer.toString(page));
+ resp = Jsoup.connect(this.url.toExternalForm())
+ .ignoreContentType(true)
+ .userAgent(USER_AGENT)
+ .data(postData)
+ .cookies(cookies)
+ .method(Method.POST)
+ .execute();
+ cookies.putAll(resp.cookies());
+ }
+ Document doc = resp.parse();
+ Elements images = doc.select("div.gif img");
+ logger.info("Found " + images.size() + " images");
+ for (Element image : images) {
+ String imageUrl = image.attr("src");
+ if (imageUrl.startsWith("//")) {
+ imageUrl = "http:" + imageUrl;
+ }
+ imageUrl = imageUrl.replace("/medium/", "/large/");
+ imageUrl = imageUrl.replace("_s.gif", ".gif");
+ addURLToDownload(new URL(imageUrl));
+ }
+ if (images.size() == 0) {
+ if (doc.html().contains("profile is private")) {
+ sendUpdate(STATUS.RIP_ERRORED, "User has private profile");
+ throw new IOException("User has private profile");
+ }
+ else {
+ logger.info("Page " + page + " has 0 images");
+ }
+ break;
+ }
+ try {
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ logger.error("[!] Interrupted while waiting to load next album:", e);
+ break;
+ }
+ page++;
+ }
+ waitForThreads();
+ }
+
+ @Override
+ public String getHost() {
+ return HOST;
+ }
+
+ @Override
+ public String getGID(URL url) throws MalformedURLException {
+ Pattern p = Pattern.compile("^https?://[w.]*gifyo.com/([a-zA-Z0-9\\-_]+)/?$");
+ Matcher m = p.matcher(url.toExternalForm());
+ if (m.matches()) {
+ return m.group(1);
+ }
+ throw new MalformedURLException("Gifyo user not found in " + url + ", expected http://gifyo.com/username");
+ }
+
+}
diff --git a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java
index 6df993d46..b62ad0db1 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 @@
public class UpdateUtils {
private static final Logger logger = Logger.getLogger(UpdateUtils.class);
- private static final String DEFAULT_VERSION = "1.0.35";
+ private static final String DEFAULT_VERSION = "1.0.36";
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";