diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/ErotivRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/ErotivRipper.java new file mode 100644 index 00000000..76c475c9 --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/ErotivRipper.java @@ -0,0 +1,94 @@ +package com.rarchives.ripme.ripper.rippers; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +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.AbstractHTMLRipper; +import com.rarchives.ripme.utils.Http; + +/** + * + * @author randomcommitter + */ +public class ErotivRipper extends AbstractHTMLRipper { + + boolean rippingProfile; + + + public ErotivRipper (URL url) throws IOException { + super(url); + } + + @Override + public String getDomain() { + return "erotiv.io"; + } + + @Override + public String getHost() { + return "erotiv"; + } + + @Override + public String getGID(URL url) throws MalformedURLException { + Pattern p = Pattern.compile("^https?://erotiv.io/e/([0-9]*)/?$"); + Matcher m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); + } + + throw new MalformedURLException("erotiv video not found in " + url + ", expected https://erotiv.io/e/id"); + } + + @Override + public Document getFirstPage() throws IOException { + Response resp = Http.url(this.url) + .ignoreContentType() + .response(); + + return resp.parse(); + } + + @Override + public URL sanitizeURL(URL url) throws MalformedURLException { + return new URL(url.toExternalForm().replaceAll("https?://www.erotiv.io", "https://erotiv.io")); + } + + @Override + public List getURLsFromPage(Document doc) { + List results = new ArrayList<>(); + for (Element el : doc.select("video[id=\"video-id\"] > source")) { + if (el.hasAttr("src")) { + Pattern p = Pattern.compile("/uploads/[0-9]*\\.mp4"); + Matcher m = p.matcher(el.attr("src")); + if (m.matches()) { + results.add("https://www.erotiv.io" + el.attr("src")); + } + } + + } + return results; + + } + + @Override + public void downloadURL(URL url, int index) { + addURLToDownload(url, getPrefix(index)); + } + + @Override + public boolean hasQueueSupport() { + return true; + } + +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ErotivRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ErotivRipperTest.java new file mode 100644 index 00000000..02319834 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ErotivRipperTest.java @@ -0,0 +1,29 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ErotivRipper; +import org.junit.jupiter.api.Test; + +public class ErotivRipperTest extends RippersTest { + @Test + public void testGetGID() throws IOException { + URL url = new URL("https://erotiv.io/e/1568314255"); + ErotivRipper ripper = new ErotivRipper(url); + assertEquals("1568314255", ripper.getGID(url)); + } + + public void testRip() throws IOException { + URL url = new URL("https://erotiv.io/e/1568314255"); + ErotivRipper ripper = new ErotivRipper(url); + testRipper(ripper); + } + @Test + public void testGetURLsFromPage() throws IOException { + URL url = new URL("https://erotiv.io/e/1568314255"); + ErotivRipper ripper = new ErotivRipper(url); + assert (1 == ripper.getURLsFromPage(ripper.getFirstPage()).size()); + } +}