From 661514ea9834cfc3d3f81ac648831a58f796d6b8 Mon Sep 17 00:00:00 2001 From: Tushar Date: Wed, 6 Feb 2019 13:51:02 +0530 Subject: [PATCH] Undo gfycat changes, again. --- .../ripme/ripper/rippers/GfycatRipper.java | 60 ++++++++----------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/GfycatRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/GfycatRipper.java index c8c7bf04..49544df8 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/GfycatRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/GfycatRipper.java @@ -10,12 +10,15 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import com.rarchives.ripme.ripper.AbstractSingleFileRipper; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import com.rarchives.ripme.utils.Http; -import com.rarchives.ripme.utils.Utils; + public class GfycatRipper extends AbstractSingleFileRipper { @@ -43,7 +46,7 @@ public class GfycatRipper extends AbstractSingleFileRipper { @Override public URL sanitizeURL(URL url) throws MalformedURLException { url = new URL(url.toExternalForm().replace("/gifs/detail", "")); - + return url; } @@ -65,62 +68,47 @@ public class GfycatRipper extends AbstractSingleFileRipper { return m.group(1); } - throw new MalformedURLException("Expected gfycat.com format:" + "gfycat.com/id" + " Got: " + url); + throw new MalformedURLException( + "Expected gfycat.com format:" + + "gfycat.com/id" + + " Got: " + url); } @Override public List getURLsFromPage(Document doc) { List result = new ArrayList<>(); - Elements videos = doc.select("video source"); - String vidUrl = videos.first().attr("src"); - // Check preference for mp4 over webm/gif. - if (Utils.getConfigBoolean("prefer.mp4", false)) { - for (Element e : videos) { - if (e.hasAttr("src") && e.attr("src").endsWith(".mp4")) { - vidUrl = e.attr("src"); - break; - } + Elements videos = doc.select("script"); + for (Element el : videos) { + String json = el.html(); + if (json.startsWith("{")) { + JSONObject page = new JSONObject(json); + result.add(page.getJSONObject("video").getString("contentUrl")); } } - if (vidUrl.startsWith("//")) { - vidUrl = "http:" + vidUrl; - } - result.add(vidUrl); return result; } /** * Helper method for retrieving video URLs. - * - * @param url - * URL to gfycat page + * @param url URL to gfycat page * @return URL to video * @throws IOException */ public static String getVideoURL(URL url) throws IOException { LOGGER.info("Retrieving " + url.toExternalForm()); - // Sanitize the URL first + //Sanitize the URL first url = new URL(url.toExternalForm().replace("/gifs/detail", "")); Document doc = Http.url(url).get(); - Elements videos = doc.select("video source"); - if (videos.isEmpty()) { - throw new IOException("Could not find source at " + url); - } - String vidUrl = videos.first().attr("src"); - // Check preference for mp4 over webm/gif. - if (Utils.getConfigBoolean("prefer.mp4", false)) { - for (Element e : videos) { - if (e.hasAttr("src") && e.attr("src").endsWith(".mp4")) { - vidUrl = e.attr("src"); - break; - } + Elements videos = doc.select("script"); + for (Element el : videos) { + String json = el.html(); + if (json.startsWith("{")) { + JSONObject page = new JSONObject(json); + return page.getJSONObject("video").getString("contentUrl"); } } - if (vidUrl.startsWith("//")) { - vidUrl = "http:" + vidUrl; - } - return vidUrl; + throw new IOException(); } } \ No newline at end of file