diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/XvideosRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/XvideosRipper.java index ff38b347..0fdef868 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/XvideosRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/XvideosRipper.java @@ -43,7 +43,15 @@ public class XvideosRipper extends AbstractSingleFileRipper { public boolean canRip(URL url) { Pattern p = Pattern.compile("^https?://[wm.]*xvideos\\.com/video[0-9]+.*$"); Matcher m = p.matcher(url.toExternalForm()); - return m.matches(); + if (m.matches()) { + return true; + } + p = Pattern.compile("^https?://[wm.]*xvideos\\.com/profiles/[a-zA-Z0-9_-]+/photos/\\d+/[a-zA-Z0-9_-]+$"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return true; + } + return false; } @Override @@ -53,6 +61,11 @@ public class XvideosRipper extends AbstractSingleFileRipper { if (m.matches()) { return m.group(1); } + p = Pattern.compile("^https?://[wm.]*xvideos\\.com/profiles/[a-zA-Z0-9_-]+/photos/(\\d+)/[a-zA-Z0-9_-]+$"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); + } throw new MalformedURLException( "Expected xvideo format:" @@ -63,18 +76,29 @@ public class XvideosRipper extends AbstractSingleFileRipper { @Override public List getURLsFromPage(Document doc) { List results = new ArrayList<>(); - Elements scripts = doc.select("script"); - for (Element e : scripts) { - if (e.html().contains("html5player.setVideoUrlHigh")) { - LOGGER.info("Found the right script"); - String[] lines = e.html().split("\n"); - for (String line: lines) { - if (line.contains("html5player.setVideoUrlHigh")) { - String videoURL = line.replaceAll("\t", "").replaceAll("html5player.setVideoUrlHigh\\(", "").replaceAll("\'", "").replaceAll("\\);", ""); - results.add(videoURL); + Pattern p = Pattern.compile("^https?://[wm.]*xvideos\\.com/video([0-9]+).*$"); + Matcher m = p.matcher(url.toExternalForm()); + if (m.matches()) { + Elements scripts = doc.select("script"); + for (Element e : scripts) { + if (e.html().contains("html5player.setVideoUrlHigh")) { + LOGGER.info("Found the right script"); + String[] lines = e.html().split("\n"); + for (String line : lines) { + if (line.contains("html5player.setVideoUrlHigh")) { + String videoURL = line.replaceAll("\t", "").replaceAll("html5player.setVideoUrlHigh\\(", "").replaceAll("\'", "").replaceAll("\\);", ""); + results.add(videoURL); + } } } } + } else { + for (Element e : doc.select("div.thumb > a")) { + results.add(e.attr("href")); + if (isThisATest()) { + break; + } + } } return results; } @@ -83,4 +107,15 @@ public class XvideosRipper extends AbstractSingleFileRipper { public void downloadURL(URL url, int index) { addURLToDownload(url, getPrefix(index)); } + + @Override + public String getAlbumTitle(URL url) throws MalformedURLException { + Pattern p = Pattern.compile("^https?://[wm.]*xvideos\\.com/profiles/([a-zA-Z0-9_-]+)/photos/(\\d+)/([a-zA-Z0-9_-]+)$"); + Matcher m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return getHost() + "_" + m.group(1) + "_" + m.group(3) + "_" + m.group(2); + } else { + return super.getAlbumTitle(url); + } + } } \ No newline at end of file