diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/XhamsterRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/XhamsterRipper.java index e7fda66e..0a900a49 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/XhamsterRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/XhamsterRipper.java @@ -43,6 +43,9 @@ public class XhamsterRipper extends AbstractHTMLRipper { URLToReturn = URLToReturn.replaceAll("\\w\\w.xhamster.com", "xhamster.com"); URL san_url = new URL(URLToReturn.replaceAll("xhamster.com", "m.xhamster.com")); LOGGER.info("sanitized URL is " + san_url.toExternalForm()); + if (isVideoUrl(url)) { + return url; + } return san_url; } @@ -58,7 +61,13 @@ public class XhamsterRipper extends AbstractHTMLRipper { if (m.matches()) { return "user_" + m.group(1); } - throw new MalformedURLException( + p = Pattern.compile("^https?://.*xhamster\\.com/(movies|videos)/(.*)$"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(2); + } + + throw new MalformedURLException( "Expected xhamster.com gallery formats: " + "xhamster.com/photos/gallery/xxxxx-#####" + " Got: " + url); @@ -108,9 +117,20 @@ public class XhamsterRipper extends AbstractHTMLRipper { if (m.matches()) { return true; } + p = Pattern.compile("^https?://.*xhamster\\.com/(movies|videos)/.*$"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return true; + } return false; } + private boolean isVideoUrl(URL url) { + Pattern p = Pattern.compile("^https?://.*xhamster\\.com/(movies|videos)/.*$"); + Matcher m = p.matcher(url.toExternalForm()); + return m.matches(); + } + @Override public Document getNextPage(Document doc) throws IOException { if (doc.select("a[data-page=next]").first() != null) { @@ -126,14 +146,17 @@ public class XhamsterRipper extends AbstractHTMLRipper { public List getURLsFromPage(Document doc) { LOGGER.debug("Checking for urls"); List result = new ArrayList<>(); - for (Element page : doc.select("div.items > div.item-container > a.item")) { - String pageWithImageUrl = page.attr("href"); - try { - String image = Http.url(new URL(pageWithImageUrl)).get().select("div.picture_container > a > img").attr("src"); - result.add(image); - } catch (IOException e) { - LOGGER.error("Was unable to load page " + pageWithImageUrl); - } + if (!isVideoUrl(url)) { + for (Element page : doc.select("div.items > div.item-container > a.item")) { + String pageWithImageUrl = page.attr("href"); + try { + String image = Http.url(new URL(pageWithImageUrl)).get().select("div.picture_container > a > img").attr("src"); + result.add(image); + } catch (IOException e) { + LOGGER.error("Was unable to load page " + pageWithImageUrl); + } + } else { + result.add(doc.select("div.player-container > a").attr("href")); } return result; } diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/XhamsterRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/XhamsterRipperTest.java index fef100ef..7847a36b 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/XhamsterRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/XhamsterRipperTest.java @@ -18,6 +18,11 @@ public class XhamsterRipperTest extends RippersTest { testRipper(ripper); } + public void testXhamsterVideo() throws IOException { + XhamsterRipper ripper = new XhamsterRipper(new URL("https://xhamster.com/videos/brazzers-busty-big-booty-milf-lisa-ann-fucks-her-masseur-1492828")); + testRipper(ripper); + } + public void testBrazilianXhamster() throws IOException { XhamsterRipper ripper = new XhamsterRipper(new URL("https://pt.xhamster.com/photos/gallery/silvana-7105696")); testRipper(ripper);