diff --git a/.vscode/settings.json b/.vscode/settings.json index bde22831..5a048090 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,8 @@ "files.exclude": { "target/**": true, "**/.git": true, - "**/.DS_Store": true + "**/.DS_Store": true, + "**/*.class": true }, "java.configuration.updateBuildConfiguration": "automatic" } diff --git a/pom.xml b/pom.xml index b661de5a..662deb74 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.rarchives.ripme ripme jar - 1.6.13 + 1.7.2 ripme http://rip.rarchives.com diff --git a/ripme.json b/ripme.json index d5a5baa4..c0179943 100644 --- a/ripme.json +++ b/ripme.json @@ -1,6 +1,9 @@ { - "latestVersion": "1.6.13", + "latestVersion": "1.7.2", "changeList": [ + "1.7.2: InstagramRipper: Added support for ripping individual posts", + "1.7.1: Fix WordpressComicRipper's ripper for freeadultcomix.com; FuraffinityRipper can now rip public albums", + "1.7.0: Improved webtoons folder naming; Added code coverage with Coveralls.io; improved unit tests and code coverage; removed rippers for dead sites", "1.6.13: Added support for ripping from instagram tags; Instagram regex now matches all ripable urls; improved regex for pichunter", "1.6.12: Fix InstagramRipper with timestamps; Pichunter galleries support; logging improvements", "1.6.11: dded pichunter.com ripper; Changed instagram output name format; added tehyiffgallery ripper; Fixed xchan ripper; Fixed regession in chanRipper folder naming", diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/ButttoucherRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/ButttoucherRipper.java deleted file mode 100644 index 77a25902..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/ButttoucherRipper.java +++ /dev/null @@ -1,70 +0,0 @@ -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.nodes.Document; -import org.jsoup.nodes.Element; - -import com.rarchives.ripme.ripper.AbstractHTMLRipper; -import com.rarchives.ripme.utils.Http; - -public class ButttoucherRipper extends AbstractHTMLRipper { - - public ButttoucherRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "butttoucher"; - } - @Override - public String getDomain() { - return "butttoucher.com"; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p; Matcher m; - - p = Pattern.compile("^.*butttoucher.com/users/([a-zA-Z0-9_\\-]+).*$"); - m = p.matcher(url.toExternalForm()); - if (m.matches()) { - return m.group(1); - } - throw new MalformedURLException( - "Expected butttoucher.com gallery format: " - + "butttoucher.com/users/" - + " Got: " + url); - } - - @Override - public Document getFirstPage() throws IOException { - return Http.url(this.url).get(); - } - - @Override - public List getURLsFromPage(Document page) { - List thumbs = new ArrayList<>(); - for (Element thumb : page.select(".thumb img")) { - if (!thumb.hasAttr("src")) { - continue; - } - String smallImage = thumb.attr("src"); - thumbs.add(smallImage.replace("m.", ".")); - } - return thumbs; - } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); - } - -} \ No newline at end of file diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/CheebyRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/CheebyRipper.java deleted file mode 100644 index e7f8ef3a..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/CheebyRipper.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.rarchives.ripme.ripper.rippers; - -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; - -import com.rarchives.ripme.ripper.AbstractHTMLRipper; -import com.rarchives.ripme.ui.RipStatusMessage.STATUS; -import com.rarchives.ripme.utils.Http; - -public class CheebyRipper extends AbstractHTMLRipper { - - private int offset = 0; - private Map albumSets = new HashMap<>(); - - public CheebyRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "cheeby"; - } - @Override - public String getDomain() { - return "cheeby.com"; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("^https?://[w.]*cheeby.com/u/([a-zA-Z0-9\\-_]{3,}).*$"); - Matcher m = p.matcher(url.toExternalForm()); - if (m.matches()) { - return m.group(1); - } - throw new MalformedURLException("cheeby user not found in " + url + ", expected http://cheeby.com/u/username"); - } - - @Override - public URL sanitizeURL(URL url) throws MalformedURLException { - return new URL("http://cheeby.com/u/" + getGID(url) + "/pics"); - } - - @Override - public Document getFirstPage() throws IOException { - String url = this.url + "?limit=10&offset=0"; - return Http.url(url) - .get(); - } - - @Override - public Document getNextPage(Document doc) throws IOException { - sleep(500); - offset += 1; - String url = this.url + "?p=" + offset; - Document nextDoc = Http.url(url).get(); - if (nextDoc.select("div.i a img").size() == 0) { - throw new IOException("No more images to fetch"); - } - return nextDoc; - } - - @Override - public void downloadURL(URL url, int index) { - // Not implmeneted here - } - - @Override - public List getURLsFromPage(Document page) { - // Not implemented here - return null; - } - - private List getImagesFromPage(Document page) { - List imageURLs = new ArrayList<>(); - for (Element image : page.select("div.i a img")) { - // Get image URL - String imageURL = image.attr("src"); - imageURL = imageURL.replace("s.", "."); - - // Get "album" from image link - String href = image.parent().attr("href"); - while (href.endsWith("/")) { - href = href.substring(0, href.length() - 2); - } - String[] hrefs = href.split("/"); - String prefix = hrefs[hrefs.length - 1]; - - // Keep track of how many images are in this album - int albumSetCount = 0; - if (albumSets.containsKey(prefix)) { - albumSetCount = albumSets.get(prefix); - } - albumSetCount++; - albumSets.put(prefix, albumSetCount); - - imageURLs.add(new Image(imageURL, prefix, albumSetCount)); - - } - return imageURLs; - } - - @Override - public void rip() throws IOException { - logger.info("Retrieving " + this.url); - sendUpdate(STATUS.LOADING_RESOURCE, this.url.toExternalForm()); - Document doc = getFirstPage(); - - while (doc != null) { - List images = getImagesFromPage(doc); - - if (images.size() == 0) { - throw new IOException("No images found at " + doc.location()); - } - - for (Image image : images) { - if (isStopped()) { - break; - } - // Don't create subdirectory if "album" only has 1 image - if (albumSets.get(image.prefix) > 1) { - addURLToDownload(new URL(image.url), getPrefix(image.index), image.prefix); - } - else { - addURLToDownload(new URL(image.url)); - } - } - - if (isStopped()) { - break; - } - - try { - sendUpdate(STATUS.LOADING_RESOURCE, "next page"); - doc = getNextPage(doc); - } catch (IOException e) { - logger.info("Can't get next page: " + e.getMessage()); - break; - } - } - - // If they're using a thread pool, wait for it. - if (getThreadPool() != null) { - getThreadPool().waitForThreads(); - } - waitForThreads(); - - // Delete empty subdirectories - for (String prefix : albumSets.keySet()) { - if (prefix.trim().equals("")) { - continue; - } - File f = new File(this.workingDir, prefix); - if (f.list() != null && f.list().length == 0) { - logger.info("Deleting empty directory: " + f.getAbsolutePath()); - f.delete(); - } - } - } - - private class Image { - String url, prefix; - int index; - Image(String url, String prefix, int index) { - this.url = url; - this.prefix = prefix; - this.index = index; - } - } -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/DatwinRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/DatwinRipper.java deleted file mode 100644 index 38708230..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/DatwinRipper.java +++ /dev/null @@ -1,65 +0,0 @@ -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.nodes.Document; -import org.jsoup.nodes.Element; - -import com.rarchives.ripme.ripper.AbstractHTMLRipper; -import com.rarchives.ripme.utils.Http; - -public class DatwinRipper extends AbstractHTMLRipper { - - public DatwinRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "datwin"; - } - @Override - public String getDomain() { - return "datw.in"; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("^.*datw.in/([a-zA-Z0-9\\-_]+).*$"); - Matcher m = p.matcher(url.toExternalForm()); - if (m.matches()) { - return m.group(1); - } - throw new MalformedURLException( - "Expected datw.in gallery formats: " - + "datw.in/..." - + " Got: " + url); - } - - @Override - public Document getFirstPage() throws IOException { - return Http.url(url).get(); - } - - @Override - public List getURLsFromPage(Document doc) { - List imageURLs = new ArrayList<>(); - for (Element thumb : doc.select("img.attachment-thumbnail")) { - String image = thumb.attr("src"); - image = image.replaceAll("-\\d{1,3}x\\d{1,3}", ""); - imageURLs.add(image); - } - return imageURLs; - } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); - } -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/FapprovedRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/FapprovedRipper.java deleted file mode 100644 index e630b3a3..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/FapprovedRipper.java +++ /dev/null @@ -1,101 +0,0 @@ -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.nodes.Document; -import org.jsoup.nodes.Element; - -import com.rarchives.ripme.ripper.AbstractHTMLRipper; -import com.rarchives.ripme.utils.Http; - -public class FapprovedRipper extends AbstractHTMLRipper { - - private int pageIndex = 1; - private String username = null; - - public FapprovedRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "fapproved"; - } - @Override - public String getDomain() { - return "fapproved.com"; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("^https?://[w.]*fapproved.com/users/([a-zA-Z0-9\\-_]{3,}).*$"); - Matcher m = p.matcher(url.toExternalForm()); - if (m.matches()) { - username = m.group(1); - return username; - } - throw new MalformedURLException("Fapproved user not found in " + url + ", expected http://fapproved.com/users/username/images"); - } - - @Override - public URL sanitizeURL(URL url) throws MalformedURLException { - return new URL("http://fapproved.com/users/" + getGID(url)); - } - - @Override - public Document getFirstPage() throws IOException { - pageIndex = 1; - String pageURL = getPageURL(pageIndex); - return Http.url(pageURL) - .ignoreContentType() - .get(); - } - - @Override - public Document getNextPage(Document doc) throws IOException { - if ((doc.select("div.pagination li.next.disabled").size() != 0) - || (doc.select("div.pagination").size() == 0)) { - throw new IOException("No more pages found"); - } - sleep(1000); - pageIndex++; - String pageURL = getPageURL(pageIndex); - return Http.url(pageURL) - .ignoreContentType() - .get(); - } - - private String getPageURL(int index) throws IOException { - if (username == null) { - username = getGID(this.url); - } - return "http://fapproved.com/users/" + username + "/images?page=" + pageIndex; - } - - @Override - public List getURLsFromPage(Document page) { - List imageURLs = new ArrayList<>(); - for (Element image : page.select("div.actual-image img")) { - String imageURL = image.attr("src"); - if (imageURL.startsWith("//")) { - imageURL = "http:" + imageURL; - } - else if (imageURL.startsWith("/")) { - imageURL = "http://fapproved.com" + imageURL; - } - imageURLs.add(imageURL); - } - return imageURLs; - } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); - } -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/FineboxRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/FineboxRipper.java deleted file mode 100644 index a89e2d1b..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/FineboxRipper.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.rarchives.ripme.ripper.rippers; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.jsoup.HttpStatusException; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; - -import com.rarchives.ripme.ripper.AlbumRipper; -import com.rarchives.ripme.ui.RipStatusMessage.STATUS; -import com.rarchives.ripme.utils.Http; -import org.jsoup.select.Elements; - -public class FineboxRipper extends AlbumRipper { - - private static final String DOMAIN = "finebox.co", - DOMAIN_OLD = "vinebox.co", - HOST = "finebox"; - - public FineboxRipper(URL url) throws IOException { - super(url); - } - - @Override - public boolean canRip(URL url) { - return url.getHost().endsWith(DOMAIN) || url.getHost().endsWith(DOMAIN_OLD); - } - - @Override - public URL sanitizeURL(URL url) throws MalformedURLException { - return new URL("http://"+DOMAIN+"/u/" + getGID(url)); - } - - @Override - public void rip() throws IOException { - int page = 0; - Document doc; - Boolean hasPagesLeft = true; - while (hasPagesLeft) { - page++; - String urlPaged = this.url.toExternalForm() + "?page=" + page; - logger.info("Retrieving " + urlPaged); - sendUpdate(STATUS.LOADING_RESOURCE, urlPaged); - try { - doc = Http.url(this.url).get(); - } catch (HttpStatusException e) { - logger.debug("Hit end of pages at page " + page, e); - break; - } - Elements videos = doc.select("video"); - for (Element element : videos) { - String videourl = element.select("source").attr("src"); - if (!videourl.startsWith("http")) { - videourl = "http://" + DOMAIN + videourl; - } - logger.info("URL to download: " + videourl); - if (!addURLToDownload(new URL(videourl))) { - hasPagesLeft = false; - break; - } - } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - logger.error("[!] Interrupted while waiting to load next page", e); - break; - } - } - waitForThreads(); - } - - @Override - public String getHost() { - return HOST; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("^https?://(www\\.)?([vf])inebox\\.co/u/([a-zA-Z0-9]+).*$"); - Matcher m = p.matcher(url.toExternalForm()); - if (!m.matches()) { - throw new MalformedURLException("Expected format: http://"+DOMAIN+"/u/USERNAME"); - } - return m.group(m.groupCount()); - } - -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/FuraffinityRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/FuraffinityRipper.java index 9c4b89aa..a12912a5 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/FuraffinityRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/FuraffinityRipper.java @@ -55,15 +55,12 @@ public class FuraffinityRipper extends AbstractHTMLRipper { } @Override public boolean hasDescriptionSupport() { - return true; + return false; } @Override public Document getFirstPage() throws IOException { - if (cookies == null || cookies.size() == 0) { - login(); - } - return Http.url(url).cookies(cookies).get(); + return Http.url(url).get(); } private void login() throws IOException { @@ -84,7 +81,6 @@ public class FuraffinityRipper extends AbstractHTMLRipper { Response doLogin = Http.url(urlBase + "/login/?ref=" + url) .referrer(urlBase + "/login/") - .cookies(cookies) .data(formData) .method(Method.POST) .response(); @@ -101,7 +97,7 @@ public class FuraffinityRipper extends AbstractHTMLRipper { String nextUrl = urlBase + nextPageUrl.first().attr("action"); sleep(500); - Document nextPage = Http.url(nextUrl).cookies(cookies).get(); + Document nextPage = Http.url(nextUrl).get(); Elements hrefs = nextPage.select("div#no-images"); if (hrefs.size() != 0) { @@ -110,12 +106,21 @@ public class FuraffinityRipper extends AbstractHTMLRipper { return nextPage; } + private String getImageFromPost(String url) { + try { + logger.info("found url " + Http.url(url).get().select("meta[property=og:image]").attr("content")); + return Http.url(url).get().select("meta[property=og:image]").attr("content"); + } catch (IOException e) { + return ""; + } + } + @Override public List getURLsFromPage(Document page) { List urls = new ArrayList<>(); Elements urlElements = page.select("figure.t-image > b > u > a"); for (Element e : urlElements) { - urls.add(urlBase + e.select("a").first().attr("href")); + urls.add(getImageFromPost(urlBase + e.select("a").first().attr("href"))); } return urls; } @@ -138,7 +143,6 @@ public class FuraffinityRipper extends AbstractHTMLRipper { // Fetch the image page Response resp = Http.url(page) .referrer(this.url) - .cookies(cookies) .response(); cookies.putAll(resp.cookies()); @@ -210,8 +214,7 @@ public class FuraffinityRipper extends AbstractHTMLRipper { } @Override public void downloadURL(URL url, int index) { - furaffinityThreadPool.addThread(new FuraffinityDocumentThread(url)); - sleep(250); + addURLToDownload(url, getPrefix(index)); } @Override @@ -222,6 +225,7 @@ public class FuraffinityRipper extends AbstractHTMLRipper { if (m.matches()) { return m.group(1); } + throw new MalformedURLException("Expected furaffinity.net URL format: " + "www.furaffinity.net/gallery/username - got " + url + " instead"); @@ -235,37 +239,8 @@ public class FuraffinityRipper extends AbstractHTMLRipper { this.url = url; } - @Override - public void run() { - try { - Document doc = Http.url(url).cookies(cookies).get(); - // Find image - Elements donwloadLink = doc.select("div.alt1 b a[href^=//d.facdn.net/]"); - if (donwloadLink.size() == 0) { - logger.warn("Could not download " + this.url); - return; - } - String link = "http:" + donwloadLink.first().attr("href"); - logger.info("Found URL " + link); - String[] fileNameSplit = link.split("/"); - String fileName = fileNameSplit[fileNameSplit.length -1]; - fileName = fileName.replaceAll("[0-9]*\\.", ""); - String[] fileExtSplit = link.split("\\."); - String fileExt = fileExtSplit[fileExtSplit.length -1]; - fileName = fileName.replaceAll(fileExt, ""); - File saveAS; - fileName = fileName.replace("[0-9]*\\.", ""); - saveAS = new File( - workingDir.getCanonicalPath() - + File.separator - + fileName - + "." - + fileExt); - addURLToDownload(new URL(link),saveAS,"",cookies); - } catch (IOException e) { - logger.error("[!] Exception while loading/parsing " + this.url, e); - } - } + } + } diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/GifyoRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/GifyoRipper.java deleted file mode 100644 index e844e782..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/GifyoRipper.java +++ /dev/null @@ -1,113 +0,0 @@ -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.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.jsoup.Connection.Method; -import org.jsoup.Connection.Response; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; - -import com.rarchives.ripme.ripper.AbstractHTMLRipper; -import com.rarchives.ripme.ui.RipStatusMessage.STATUS; -import com.rarchives.ripme.utils.Http; - -public class GifyoRipper extends AbstractHTMLRipper { - - private int page = 0; - private Map cookies = new HashMap<>(); - - public GifyoRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "gifyo"; - } - @Override - public String getDomain() { - return "gifyo.com"; - } - - @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"); - } - - @Override - public URL sanitizeURL(URL url) throws MalformedURLException { - return new URL("http://gifyo.com/" + getGID(url) + "/"); - } - - @Override - public Document getFirstPage() throws IOException { - Response resp = Http.url(this.url) - .ignoreContentType() - .response(); - cookies = resp.cookies(); - - Document doc = resp.parse(); - if (doc.html().contains("profile is private")) { - sendUpdate(STATUS.RIP_ERRORED, "User has private profile"); - throw new IOException("User has private profile"); - } - return doc; - } - - @Override - public Document getNextPage(Document doc) throws IOException { - page++; - Map postData = new HashMap<>(); - postData.put("cmd", "refreshData"); - postData.put("view", "gif"); - postData.put("layout", "grid"); - postData.put("page", Integer.toString(page)); - Response resp = Http.url(this.url) - .ignoreContentType() - .data(postData) - .cookies(cookies) - .method(Method.POST) - .response(); - cookies.putAll(resp.cookies()); - Document nextDoc = resp.parse(); - if (nextDoc.select("div.gif img").size() == 0) { - throw new IOException("No more images found"); - } - sleep(2000); - return nextDoc; - } - - @Override - public List getURLsFromPage(Document doc) { - List imageURLs = new ArrayList<>(); - for (Element image : doc.select("img.profile_gif")) { - String imageUrl = image.attr("data-animated"); - if (imageUrl.startsWith("//")) { - imageUrl = "http:" + imageUrl; - } - imageUrl = imageUrl.replace("/medium/", "/large/"); - imageUrl = imageUrl.replace("_s.gif", ".gif"); - imageURLs.add(imageUrl); - } - logger.debug("Found " + imageURLs.size() + " images"); - return imageURLs; - } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url); - } -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/ImagestashRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/ImagestashRipper.java deleted file mode 100644 index c8cc3d74..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/ImagestashRipper.java +++ /dev/null @@ -1,87 +0,0 @@ -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.json.JSONArray; -import org.json.JSONObject; - -import com.rarchives.ripme.ripper.AbstractJSONRipper; -import com.rarchives.ripme.utils.Http; - -public class ImagestashRipper extends AbstractJSONRipper { - - private int page = 1; - - public ImagestashRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "imagestash"; - } - @Override - public String getDomain() { - return "imagestash.org"; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("^.*imagestash.org/tag/([a-zA-Z0-9\\-_]+)$"); - Matcher m = p.matcher(url.toExternalForm()); - if (m.matches()) { - return m.group(1); - } - throw new MalformedURLException( - "Expected imagestash.org tag formats: " - + "imagestash.org/tag/tagname" - + " Got: " + url); - } - - @Override - public JSONObject getFirstPage() throws IOException { - String baseURL = "https://imagestash.org/images?tags=" - + getGID(url) - + "&page=" + page; - return Http.url(baseURL).getJSON(); - } - - @Override - public JSONObject getNextPage(JSONObject json) throws IOException { - int count = json.getInt("count"), - offset = json.getInt("offset"), - total = json.getInt("total"); - if (count + offset >= total || json.getJSONArray("images").length() == 0) { - throw new IOException("No more images"); - } - sleep(1000); - page++; - return getFirstPage(); - } - - @Override - public List getURLsFromJSON(JSONObject json) { - List imageURLs = new ArrayList<>(); - JSONArray images = json.getJSONArray("images"); - for (int i = 0; i < images.length(); i++) { - JSONObject image = images.getJSONObject(i); - String imageURL = image.getString("src"); - if (imageURL.startsWith("/")) { - imageURL = "https://imagestash.org" + imageURL; - } - imageURLs.add(imageURL); - } - return imageURLs; - } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); - } -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/InstagramRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/InstagramRipper.java index 564227f6..337b658d 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/InstagramRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/InstagramRipper.java @@ -50,6 +50,42 @@ public class InstagramRipper extends AbstractHTMLRipper { return san_url; } + private List getPostsFromSinglePage(Document Doc) { + List imageURLs = new ArrayList<>(); + JSONArray datas; + try { + JSONObject json = getJSONFromPage(Doc); + if (json.getJSONObject("entry_data").getJSONArray("PostPage") + .getJSONObject(0).getJSONObject("graphql").getJSONObject("shortcode_media") + .has("edge_sidecar_to_children")) { + datas = json.getJSONObject("entry_data").getJSONArray("PostPage") + .getJSONObject(0).getJSONObject("graphql").getJSONObject("shortcode_media") + .getJSONObject("edge_sidecar_to_children").getJSONArray("edges"); + for (int i = 0; i < datas.length(); i++) { + JSONObject data = (JSONObject) datas.get(i); + data = data.getJSONObject("node"); + if (data.has("is_video") && data.getBoolean("is_video")) { + imageURLs.add(data.getString("video_url")); + } else { + imageURLs.add(data.getString("display_url")); + } + } + } else { + JSONObject data = json.getJSONObject("entry_data").getJSONArray("PostPage") + .getJSONObject(0).getJSONObject("graphql").getJSONObject("shortcode_media"); + if (data.getBoolean("is_video")) { + imageURLs.add(data.getString("video_url")); + } else { + imageURLs.add(data.getString("display_url")); + } + } + return imageURLs; + } catch (IOException e) { + logger.error("Unable to get JSON from page " + url.toExternalForm()); + return null; + } + } + @Override public String getGID(URL url) throws MalformedURLException { Pattern p = Pattern.compile("^https?://instagram.com/([^/]+)/?"); @@ -64,7 +100,19 @@ public class InstagramRipper extends AbstractHTMLRipper { return m.group(1); } - p = Pattern.compile("^https?://www.instagram.com/p/[a-zA-Z0-9_-]+/\\?taken-by=([^/]+)/?"); + p = Pattern.compile("^https?://www.instagram.com/p/([a-zA-Z0-9_-]+)/\\?taken-by=([^/]+)/?"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(2) + "_" + m.group(1); + } + + p = Pattern.compile("^https?://www.instagram.com/p/([a-zA-Z0-9_-]+)/?"); + m = p.matcher(url.toExternalForm()); + if (m.matches()) { + return m.group(1); + } + + p = Pattern.compile("^https?://www.instagram.com/p/([a-zA-Z0-9_-]+)/?(?:\\?hl=\\S*)?/?"); m = p.matcher(url.toExternalForm()); if (m.matches()) { return m.group(1); @@ -148,9 +196,8 @@ public class InstagramRipper extends AbstractHTMLRipper { logger.warn("Unable to exact json from page"); } - Pattern p = Pattern.compile("^.*instagram.com/p/([a-zA-Z0-9\\-_.]+)/?"); - Matcher m = p.matcher(url.toExternalForm()); - if (!m.matches()) { + + if (!url.toExternalForm().contains("/p/")) { JSONArray datas = new JSONArray(); try { JSONArray profilePage = json.getJSONObject("entry_data").getJSONArray("ProfilePage"); @@ -216,16 +263,9 @@ public class InstagramRipper extends AbstractHTMLRipper { } } else { // We're ripping from a single page logger.info("Ripping from single page"); - if (!doc.select("meta[property=og:video]").attr("content").equals("")) { - String videoURL = doc.select("meta[property=og:video]").attr("content"); - // We're ripping a page with a video on it - imageURLs.add(videoURL); - } else { - // We're ripping a picture - imageURLs.add(doc.select("meta[property=og:image]").attr("content")); - } - + imageURLs = getPostsFromSinglePage(doc); } + return imageURLs; } diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/MediacrushRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/MediacrushRipper.java deleted file mode 100644 index 687ca509..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/MediacrushRipper.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.rarchives.ripme.ripper.rippers; - -import java.awt.Desktop; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.net.ssl.SSLException; -import javax.swing.JOptionPane; - -import org.json.JSONArray; -import org.json.JSONObject; - -import com.rarchives.ripme.ripper.AbstractJSONRipper; -import com.rarchives.ripme.ui.RipStatusMessage.STATUS; -import com.rarchives.ripme.utils.Http; - -public class MediacrushRipper extends AbstractJSONRipper { - - /** Ordered list of preferred formats, sorted by preference (low-to-high) */ - private static final Map PREFERRED_FORMATS = new HashMap<>(); - static { - PREFERRED_FORMATS.put("mp4", 0); - PREFERRED_FORMATS.put("wemb",1); - PREFERRED_FORMATS.put("ogv", 2); - PREFERRED_FORMATS.put("mp3", 3); - PREFERRED_FORMATS.put("ogg", 4); - PREFERRED_FORMATS.put("gif", 5); - PREFERRED_FORMATS.put("png", 6); - PREFERRED_FORMATS.put("jpg", 7); - PREFERRED_FORMATS.put("jpeg",8); - } - - public MediacrushRipper(URL url) throws IOException { - super(url); - } - - @Override - public String getHost() { - return "mediacrush"; - } - @Override - public String getDomain() { - return "mediacru.sh"; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - Pattern p = Pattern.compile("https?://[wm.]*mediacru\\.sh/([a-zA-Z0-9]+).*"); - Matcher m = p.matcher(url.toExternalForm()); - if (m.matches()) { - return m.group(1); - } - throw new MalformedURLException("Could not find mediacru.sh page ID from " + url - + " expected format: http://mediacru.sh/pageid"); - } - - @Override - public URL sanitizeURL(URL url) throws MalformedURLException { - String u = url.toExternalForm(); - // Strip trailing "/" characters - while (u.endsWith("/")) { - u = u.substring(0, u.length() - 1); - } - // Append .json - if (!u.endsWith(".json")) { - u += ".json"; - } - return new URL(u); - } - - @Override - public JSONObject getFirstPage() throws IOException { - try { - String jsonString = Http.url(url) - .ignoreContentType() - .connection() - .execute().body(); - jsonString = jsonString.replace(""", "\""); - return new JSONObject(jsonString); - } catch (SSLException re) { - // Check for >1024 bit encryption but in older versions of Java - // It's the bug. Suggest downloading the latest version. - int selection = JOptionPane.showOptionDialog(null, - "You need to upgrade to the latest Java (7+) to rip this album.\n" - + "Do you want to open java.com and download the latest version?", - "RipMe - Java Error", - JOptionPane.OK_CANCEL_OPTION, - JOptionPane.ERROR_MESSAGE, - null, - new String[] {"Go to java.com", "Cancel"}, - 0); - sendUpdate(STATUS.RIP_ERRORED, "Your version of Java can't handle some secure websites"); - if (selection == 0) { - URL javaUrl = new URL("https://www.java.com/en/download/"); - try { - Desktop.getDesktop().browse(javaUrl.toURI()); - } catch (URISyntaxException use) { } - } - throw new IOException("Cannot rip due to limitations in Java installation, consider upgrading Java", re.getCause()); - } - catch (Exception e) { - throw new IOException("Unexpected error: " + e.getMessage(), e); - } - } - - @Override - public List getURLsFromJSON(JSONObject json) { - List imageURLs = new ArrayList<>(); - // Iterate over all files - JSONArray files = json.getJSONArray("files"); - for (int i = 0; i < files.length(); i++) { - JSONObject file = (JSONObject) files.get(i); - // Find preferred file format - JSONArray subfiles = file.getJSONArray("files"); - String preferredUrl = getPreferredUrl(subfiles); - if (preferredUrl == null) { - logger.warn("Could not find 'file' inside of " + file); - sendUpdate(STATUS.DOWNLOAD_ERRORED, "Could not find file inside of " + file); - continue; - } - - imageURLs.add(preferredUrl); - } - return imageURLs; - } - - @Override - public void downloadURL(URL url, int index) { - addURLToDownload(url, getPrefix(index)); - } - - /** - * Iterates over list if "file" objects and returns the preferred - * image format. - * @param subfiles Array of "files" (JSONObjects) which contain - * @return Preferred media format. - */ - private String getPreferredUrl(JSONArray subfiles) { - String preferredUrl = null; - int preferredIndex = Integer.MAX_VALUE; - // Iterate over all media types - for (int j = 0; j < subfiles.length(); j++) { - JSONObject subfile = subfiles.getJSONObject(j); - String thisurl = subfile.getString("url"); - String extension = thisurl.substring(thisurl.lastIndexOf(".") + 1); - if (!PREFERRED_FORMATS.containsKey(extension)) { - continue; - } - // Keep track of the most-preferred format - int thisindex = PREFERRED_FORMATS.get(extension); - if (preferredUrl == null || thisindex < preferredIndex) { - preferredIndex = thisindex; - preferredUrl = thisurl; - } - } - return preferredUrl; - } -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/SupertangasRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/SupertangasRipper.java deleted file mode 100644 index d8fb6b26..00000000 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/SupertangasRipper.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.rarchives.ripme.ripper.rippers; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.jsoup.HttpStatusException; -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; -import com.rarchives.ripme.utils.Http; - -/** - * Appears to be broken as of 2015-02-11. - * Looks like supertangas changed their site completely. - */ -public class SupertangasRipper extends AlbumRipper { - - private static final String DOMAIN = "supertangas.com", - HOST = "supertangas"; - - public SupertangasRipper(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 { - return url; - } - - @Override - public void rip() throws IOException { - int page = 0; - String baseURL = "http://www.supertangas.com/fotos/?level=search&exact=1&searchterms=" + this.getGID(this.url); - Document doc; - while (true) { - page++; - String theURL = baseURL; - if (page > 1) { - theURL += "&plog_page=" + page; - } - try { - logger.info(" Retrieving " + theURL); - sendUpdate(STATUS.LOADING_RESOURCE, theURL); - doc = Http.url(theURL).get(); - } catch (HttpStatusException e) { - logger.debug("Hit end of pages at page " + page, e); - break; - } - Elements images = doc.select("li.thumbnail a"); - if (images.size() == 0) { - break; - } - for (Element imageElement : images) { - String image = imageElement.attr("href"); - image = image.replaceAll("/fotos/", "/fotos/images/"); - addURLToDownload(new URL(image)); - } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - logger.error("[!] Interrupted while waiting to load next page", e); - break; - } - } - waitForThreads(); - } - - @Override - public String getHost() { - return HOST; - } - - @Override - public String getGID(URL url) throws MalformedURLException { - // http://www.supertangas.com/fotos/?level=search&exact=1&searchterms=Tahiticora%20(France) - Pattern p = Pattern.compile("^https?://[w.]*supertangas\\.com/fotos/\\?.*&searchterms=([a-zA-Z0-9%()+]+).*$"); - Matcher m = p.matcher(url.toExternalForm()); - if (!m.matches()) { - throw new MalformedURLException("Expected format: http://supertangas.com/fotos/?level=search&exact=1&searchterms=..."); - } - return m.group(m.groupCount()); - } - -} diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/WebtoonsRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/WebtoonsRipper.java index 57fda38f..f7b74133 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/WebtoonsRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/WebtoonsRipper.java @@ -50,7 +50,7 @@ public class WebtoonsRipper extends AbstractHTMLRipper { Pattern pat = Pattern.compile("https?://www.webtoons.com/[a-zA-Z]+/[a-zA-Z]+/([a-zA-Z0-9_-]*)/[a-zA-Z0-9_-]+/\\S*"); Matcher mat = pat.matcher(url.toExternalForm()); if (mat.matches()) { - return mat.group(1); + return getHost() + "_" + mat.group(1); } return super.getAlbumTitle(url); diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/WordpressComicRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/WordpressComicRipper.java index e8405fd8..6c19e704 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/WordpressComicRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/WordpressComicRipper.java @@ -22,7 +22,7 @@ public class WordpressComicRipper extends AbstractHTMLRipper { super(url); } - // Test links: + // Test links (see also WordpressComicRipperTest.java) // http://www.totempole666.com/comic/first-time-for-everything-00-cover/ // http://buttsmithy.com/archives/comic/p1 // http://themonsterunderthebed.net/?comic=test-post @@ -30,7 +30,7 @@ public class WordpressComicRipper extends AbstractHTMLRipper { // http://www.konradokonski.com/sawdust/ // http://www.konradokonski.com/wiory/ // http://freeadultcomix.com/finders-feepaid-in-full-sparrow/ - // http://comics-xxx.com/republic-rendezvous-palcomix-star-wars-xxx/ + // http://thisis.delvecomic.com/NewWP/comic/in-too-deep/ // http://tnbtu.com/comic/01-00/ // http://shipinbottle.pepsaga.com/?p=281 @@ -42,7 +42,6 @@ public class WordpressComicRipper extends AbstractHTMLRipper { "www.konradokonski.com", "freeadultcomix.com", "thisis.delvecomic.com", - "comics-xxx.com", "tnbtu.com", "shipinbottle.pepsaga.com" ); @@ -275,9 +274,10 @@ public class WordpressComicRipper extends AbstractHTMLRipper { } // freeadultcomix gets it own if because it needs to add http://freeadultcomix.com to the start of each link + // TODO review the above comment which no longer applies -- see if there's a refactoring we should do here. if (url.toExternalForm().contains("freeadultcomix.com")) { for (Element elem : doc.select("div.single-post > p > img.aligncenter")) { - result.add("http://freeadultcomix.com" + elem.attr("src")); + result.add(elem.attr("src")); } } diff --git a/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java b/src/main/java/com/rarchives/ripme/ui/UpdateUtils.java index 448d0f77..53841875 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 @@ import com.rarchives.ripme.utils.Utils; public class UpdateUtils { private static final Logger logger = Logger.getLogger(UpdateUtils.class); - private static final String DEFAULT_VERSION = "1.6.13"; + private static final String DEFAULT_VERSION = "1.7.2"; private static final String REPO_NAME = "ripmeapp/ripme"; private static final String updateJsonURL = "https://raw.githubusercontent.com/" + REPO_NAME + "/master/ripme.json"; private static final String mainFileName = "ripme.jar"; diff --git a/src/main/java/com/rarchives/ripme/utils/RipUtils.java b/src/main/java/com/rarchives/ripme/utils/RipUtils.java index 6f3835aa..b7b8c239 100644 --- a/src/main/java/com/rarchives/ripme/utils/RipUtils.java +++ b/src/main/java/com/rarchives/ripme/utils/RipUtils.java @@ -155,12 +155,8 @@ public class RipUtils { if (url == null) url = urlFromDeviantartDirectoryName(dir); if (url == null) url = urlFromRedditDirectoryName(dir); if (url == null) url = urlFromSiteDirectoryName(dir, "bfcakes", "http://www.bcfakes.com/celebritylist/", ""); - if (url == null) url = urlFromSiteDirectoryName(dir, "butttoucher", "http://butttoucher.com/users/", ""); - if (url == null) url = urlFromSiteDirectoryName(dir, "cheeby", "http://cheeby.com/u/", ""); - if (url == null) url = urlFromSiteDirectoryName(dir, "datwin", "http://datw.in/", ""); if (url == null) url = urlFromSiteDirectoryName(dir, "drawcrowd", "http://drawcrowd.com/", ""); if (url == null) url = urlFromSiteDirectoryName(dir.replace("-", "/"), "ehentai", "http://g.e-hentai.org/g/", ""); - if (url == null) url = urlFromSiteDirectoryName(dir, "fapproved", "http://fapproved.com/users/", ""); if (url == null) url = urlFromSiteDirectoryName(dir, "vinebox", "http://finebox.co/u/", ""); if (url == null) url = urlFromSiteDirectoryName(dir, "imgbox", "http://imgbox.com/g/", ""); if (url == null) url = urlFromSiteDirectoryName(dir, "modelmayhem", "http://www.modelmayhem.com/", ""); diff --git a/src/test/java/com/rarchives/ripme/tst/AppTest.java b/src/test/java/com/rarchives/ripme/tst/AppTest.java index 630e46d9..fb9bc680 100644 --- a/src/test/java/com/rarchives/ripme/tst/AppTest.java +++ b/src/test/java/com/rarchives/ripme/tst/AppTest.java @@ -10,21 +10,21 @@ public class AppTest extends TestCase { * * @param testName name of the test case */ - public AppTest( String testName ) { - super( testName ); + public AppTest(String testName) { + super(testName); } /** * @return the suite of tests being tested */ public static Test suite() { - return new TestSuite( AppTest.class ); + return new TestSuite(AppTest.class); } /** * Rigourous Test :-) */ public void testApp() { - assertTrue( true ); + assertTrue(true); } } diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/AerisdiesRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/AerisdiesRipperTest.java new file mode 100644 index 00000000..fb991ec7 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/AerisdiesRipperTest.java @@ -0,0 +1,20 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.AerisdiesRipper;; + +public class AerisdiesRipperTest extends RippersTest { + public void testAlbum() throws IOException { + AerisdiesRipper ripper = new AerisdiesRipper(new URL("http://www.aerisdies.com/html/lb/alb_1097_1.html")); + testRipper(ripper); + } + + public void testSubAlbum() throws IOException { + AerisdiesRipper ripper = new AerisdiesRipper(new URL("http://www.aerisdies.com/html/lb/alb_3692_1.html")); + testRipper(ripper); + } + + // TODO: Add a test for an album with a title. +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/BasicRippersTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/BasicRippersTest.java deleted file mode 100644 index 751242c6..00000000 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/BasicRippersTest.java +++ /dev/null @@ -1,301 +0,0 @@ -package com.rarchives.ripme.tst.ripper.rippers; - -import java.io.IOException; -import java.net.URL; - -import com.rarchives.ripme.ripper.AbstractRipper; -import com.rarchives.ripme.ripper.rippers.DeviantartRipper; -import com.rarchives.ripme.ripper.rippers.EightmusesRipper; -import com.rarchives.ripme.ripper.rippers.FivehundredpxRipper; -import com.rarchives.ripme.ripper.rippers.FuraffinityRipper; -import com.rarchives.ripme.ripper.rippers.GirlsOfDesireRipper; -import com.rarchives.ripme.ripper.rippers.HentaifoundryRipper; -import com.rarchives.ripme.ripper.rippers.ImagearnRipper; -import com.rarchives.ripme.ripper.rippers.ImagebamRipper; -import com.rarchives.ripme.ripper.rippers.ImagevenueRipper; -import com.rarchives.ripme.ripper.rippers.ImgboxRipper; -import com.rarchives.ripme.ripper.rippers.ModelmayhemRipper; -import com.rarchives.ripme.ripper.rippers.MotherlessRipper; -import com.rarchives.ripme.ripper.rippers.NfsfwRipper; -import com.rarchives.ripme.ripper.rippers.PhotobucketRipper; -import com.rarchives.ripme.ripper.rippers.PornhubRipper; -import com.rarchives.ripme.ripper.rippers.ShesFreakyRipper; -import com.rarchives.ripme.ripper.rippers.TapasticRipper; -import com.rarchives.ripme.ripper.rippers.TeenplanetRipper; -import com.rarchives.ripme.ripper.rippers.TwitterRipper; -import com.rarchives.ripme.ripper.rippers.TwodgalleriesRipper; -import com.rarchives.ripme.ripper.rippers.VidbleRipper; -import com.rarchives.ripme.ripper.rippers.VineRipper; -import com.rarchives.ripme.ripper.rippers.VkRipper; -import com.rarchives.ripme.ripper.rippers.XhamsterRipper; -import com.rarchives.ripme.ripper.rippers.PichunterRipper; -import com.rarchives.ripme.ripper.rippers.TheyiffgalleryRipper; - - -/** - * Simple test cases for various rippers. - * These tests only require a URL, no other special validation. - */ -public class BasicRippersTest extends RippersTest { - - public void testDeviantartAlbum() throws IOException { - DeviantartRipper ripper = new DeviantartRipper(new URL("http://airgee.deviantart.com/gallery/")); - testRipper(ripper); - } - public void testDeviantartNSFWAlbum() throws IOException { - // NSFW gallery - DeviantartRipper ripper = new DeviantartRipper(new URL("http://faterkcx.deviantart.com/gallery/")); - testRipper(ripper); - } - - public void testEightmusesAlbum() throws IOException { - EightmusesRipper ripper = new EightmusesRipper(new URL("https://www.8muses.com/album/jab-comics/a-model-life")); - testRipper(ripper); - } - - /* - public void testVineboxAlbum() throws IOException { - FineboxRipper ripper = new FineboxRipper(new URL("http://vinebox.co/u/wi57hMjc2Ka")); - testRipper(ripper); - } - */ - - /* - public void testFineboxAlbum() throws IOException { - FineboxRipper ripper = new FineboxRipper(new URL("http://finebox.co/u/wi57hMjc2Ka")); - testRipper(ripper); - } - */ - - /* - public void testRedditSubredditRip() throws IOException { - RedditRipper ripper = new RedditRipper(new URL("http://www.reddit.com/r/nsfw_oc")); - testRipper(ripper); - } - public void testRedditSubredditTopRip() throws IOException { - RedditRipper ripper = new RedditRipper(new URL("http://www.reddit.com/r/nsfw_oc/top?t=all")); - testRipper(ripper); - } - public void testRedditPostRip() throws IOException { - RedditRipper ripper = new RedditRipper(new URL("http://www.reddit.com/r/UnrealGirls/comments/1ziuhl/in_class_veronique_popa/")); - testRipper(ripper); - } - - public void testTumblrFullRip() throws IOException { - TumblrRipper ripper = new TumblrRipper(new URL("http://wrouinr.tumblr.com/archive")); - testRipper(ripper); - } - public void testTumblrTagRip() throws IOException { - TumblrRipper ripper = new TumblrRipper(new URL("http://topinstagirls.tumblr.com/tagged/berlinskaya")); - testRipper(ripper); - } - public void testTumblrPostRip() throws IOException { - TumblrRipper ripper = new TumblrRipper(new URL("http://sadbaffoon.tumblr.com/post/132045920789/what-a-hoe")); - testRipper(ripper); - } - */ - - public void testTwitterUserRip() throws IOException { - TwitterRipper ripper = new TwitterRipper(new URL("https://twitter.com/danngamber01/media")); - testRipper(ripper); - } - /* - public void testTwitterSearchRip() throws IOException { - TwitterRipper ripper = new TwitterRipper(new URL("https://twitter.com/search?q=from%3ADaisyfairymfc%20filter%3Aimages&src=typd")); - testRipper(ripper); - } - */ - - public void test500pxAlbum() throws IOException { - FivehundredpxRipper ripper = new FivehundredpxRipper(new URL("https://marketplace.500px.com/alexander_hurman")); - testRipper(ripper); - } - - /* - public void testFlickrAlbum() throws IOException { - FlickrRipper ripper = new FlickrRipper(new URL("https://www.flickr.com/photos/leavingallbehind/sets/72157621895942720/")); - testRipper(ripper); - } - */ - - /* - public void testFuraffinityAlbum() throws IOException { - FuraffinityRipper ripper = new FuraffinityRipper(new URL("https://www.furaffinity.net/gallery/mustardgas/")); - testRipper(ripper); - } - */ - - /* - public void testFuskatorAlbum() throws IOException { - FuskatorRipper ripper = new FuskatorRipper(new URL("http://fuskator.com/full/emJa1U6cqbi/index.html")); - testRipper(ripper); - } - */ - - public void testGirlsofdesireAlbum() throws IOException { - GirlsOfDesireRipper ripper = new GirlsOfDesireRipper(new URL("http://www.girlsofdesire.org/galleries/krillia/")); - testRipper(ripper); - } - - public void testHentaifoundryRip() throws IOException { - HentaifoundryRipper ripper = new HentaifoundryRipper(new URL("http://www.hentai-foundry.com/pictures/user/personalami")); - testRipper(ripper); - } - - public void testImagearnRip() throws IOException { - AbstractRipper ripper = new ImagearnRipper(new URL("http://imagearn.com//gallery.php?id=578682")); - testRipper(ripper); - } - - public void testImagebamRip() throws IOException { - AbstractRipper ripper = new ImagebamRipper(new URL("http://www.imagebam.com/gallery/488cc796sllyf7o5srds8kpaz1t4m78i")); - testRipper(ripper); - } - - /* - public void testImagestashRip() throws IOException { - AbstractRipper ripper = new ImagestashRipper(new URL("https://imagestash.org/tag/everydayuncensor")); - testRipper(ripper); - } - */ - - public void testImagevenueRip() throws IOException { - AbstractRipper ripper = new ImagevenueRipper(new URL("http://img120.imagevenue.com/galshow.php?gal=gallery_1373818527696_191lo")); - testRipper(ripper); - } - - public void testImgboxRip() throws IOException { - AbstractRipper ripper = new ImgboxRipper(new URL("https://imgbox.com/g/FJPF7t26FD")); - testRipper(ripper); - } - - /* - public void testMinusUserRip() throws IOException { - AbstractRipper ripper = new MinusRipper(new URL("http://vampyr3.minus.com/")); - testRipper(ripper); - deleteSubdirs(ripper.getWorkingDir()); - deleteDir(ripper.getWorkingDir()); - } - public void testMinusUserAlbumRip() throws IOException { - AbstractRipper ripper = new MinusRipper(new URL("http://vampyr3.minus.com/mw7ztQ6xzP7ae")); - testRipper(ripper); - } - public void testMinusUserUploadsRip() throws IOException { - AbstractRipper ripper = new MinusRipper(new URL("http://vampyr3.minus.com/uploads")); - testRipper(ripper); - } - public void testMinusAlbumRip() throws IOException { - AbstractRipper ripper = new MinusRipper(new URL("http://minus.com/mw7ztQ6xzP7ae")); - testRipper(ripper); - } - */ - - public void testModelmayhemRip() throws IOException { - AbstractRipper ripper = new ModelmayhemRipper(new URL("https://www.modelmayhem.com/portfolio/520206/viewall")); - testRipper(ripper); - } - - public void testPichunterRip() throws IOException { - // A non-photoset - AbstractRipper ripper = new PichunterRipper(new URL("https://www.pichunter.com/models/Madison_Ivy")); - testRipper(ripper); - // a photo set - ripper = new PichunterRipper(new URL("http://www.pichunter.com/gallery/3270642/Its_not_only_those_who")); - testRipper(ripper); - - } - - public void testMotherlessAlbumRip() throws IOException { - MotherlessRipper ripper = new MotherlessRipper(new URL("http://motherless.com/G4DAA18D")); - testRipper(ripper); - } - - public void testNfsfwRip() throws IOException { - AbstractRipper ripper = new NfsfwRipper(new URL("http://nfsfw.com/gallery/v/Kitten/")); - testRipper(ripper); - } - - /* - // https://github.com/RipMeApp/ripme/issues/229 : Disabled test (temporary) : BasicRippersTest#testPhotobucketRip (timing out) - public void testPhotobucketRip() throws IOException { - AbstractRipper ripper = new PhotobucketRipper(new URL("http://s844.photobucket.com/user/SpazzySpizzy/library/Album%20Covers?sort=3&page=1")); - testRipper(ripper); - deleteSubdirs(ripper.getWorkingDir()); - deleteDir(ripper.getWorkingDir()); - } - */ - - public void testPornhubRip() throws IOException { - AbstractRipper ripper = new PornhubRipper(new URL("https://www.pornhub.com/album/15680522")); - testRipper(ripper); - } - - public void testTheyiffgallery() throws IOException { - AbstractRipper ripper = new TheyiffgalleryRipper(new URL("https://theyiffgallery.com/index?/category/4303")); - testRipper(ripper); - } - - /* - public void testSankakuChanRip() throws IOException { - AbstractRipper ripper = new SankakuComplexRipper(new URL("https://chan.sankakucomplex.com/?tags=cleavage")); - testRipper(ripper); - } - public void testSankakuIdolRip() throws IOException { - AbstractRipper ripper = new SankakuComplexRipper(new URL("https://idol.sankakucomplex.com/?tags=meme_%28me%21me%21me%21%29_%28cosplay%29")); - testRipper(ripper); - } - */ - - public void testShesFreakyRip() throws IOException { - AbstractRipper ripper = new ShesFreakyRipper(new URL("http://www.shesfreaky.com/gallery/nicee-snow-bunny-579NbPjUcYa.html")); - testRipper(ripper); - } - - public void testTapasticRip() throws IOException { - AbstractRipper ripper = new TapasticRipper(new URL("http://tapastic.com/episode/2139")); - testRipper(ripper); - } - - public void testTeenplanetRip() throws IOException { - AbstractRipper ripper = new TeenplanetRipper(new URL("http://teenplanet.org/galleries/the-perfect-side-of-me-6588.html")); - testRipper(ripper); - } - - /* - public void testTwodgalleriesRip() throws IOException { - AbstractRipper ripper = new TwodgalleriesRipper(new URL("http://www.2dgalleries.com/artist/regis-loisel-6477")); - testRipper(ripper); - } - */ - - public void testVidbleRip() throws IOException { - AbstractRipper ripper = new VidbleRipper(new URL("http://www.vidble.com/album/y1oyh3zd")); - testRipper(ripper); - } - - /* - public void testVineRip() throws IOException { - AbstractRipper ripper = new VineRipper(new URL("https://vine.co/u/954440445776334848")); - testRipper(ripper); - } - */ - - public void testVkSubalbumRip() throws IOException { - VkRipper ripper = new VkRipper(new URL("http://vk.com/album45506334_0")); - testRipper(ripper); - } - public void testVkRootAlbumRip() throws IOException { - VkRipper ripper = new VkRipper(new URL("https://vk.com/album45506334_0")); - testRipper(ripper); - } - public void testVkPhotosRip() throws IOException { - VkRipper ripper = new VkRipper(new URL("https://vk.com/photos45506334")); - testRipper(ripper); - } - - // https://github.com/RipMeApp/ripme/issues/206 : Disabled test : BasicRippersTest#testXhamsterAlbums -- fix and re-enable - // public void testXhamsterAlbums() throws IOException { - // XhamsterRipper ripper = new XhamsterRipper(new URL("https://xhamster.com/photos/gallery/sexy-preggo-girls-9026608")); - // testRipper(ripper); - // } -} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DeviantartRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DeviantartRipperTest.java new file mode 100644 index 00000000..a3fdfd81 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DeviantartRipperTest.java @@ -0,0 +1,19 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.DeviantartRipper; + +public class DeviantartRipperTest extends RippersTest { + public void testDeviantartAlbum() throws IOException { + DeviantartRipper ripper = new DeviantartRipper(new URL("http://airgee.deviantart.com/gallery/")); + testRipper(ripper); + } + + public void testDeviantartNSFWAlbum() throws IOException { + // NSFW gallery + DeviantartRipper ripper = new DeviantartRipper(new URL("http://faterkcx.deviantart.com/gallery/")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java new file mode 100644 index 00000000..00a3f8b6 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EhentaiRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.EHentaiRipper; + +public class EhentaiRipperTest extends RippersTest { + public void testEHentaiAlbum() throws IOException { + EHentaiRipper ripper = new EHentaiRipper(new URL("https://e-hentai.org/g/1144492/e823bdf9a5/")); + testRipper(ripper); + } +} \ No newline at end of file diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EightmusesRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EightmusesRipperTest.java new file mode 100644 index 00000000..068f9a81 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/EightmusesRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.EightmusesRipper; + +public class EightmusesRipperTest extends RippersTest { + public void testEightmusesAlbum() throws IOException { + EightmusesRipper ripper = new EightmusesRipper(new URL("https://www.8muses.com/album/jab-comics/a-model-life")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FivehundredpxRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FivehundredpxRipperTest.java new file mode 100644 index 00000000..538d493c --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FivehundredpxRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.FivehundredpxRipper; + +public class FivehundredpxRipperTest extends RippersTest { + public void test500pxAlbum() throws IOException { + FivehundredpxRipper ripper = new FivehundredpxRipper(new URL("https://marketplace.500px.com/alexander_hurman")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FlickrRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FlickrRipperTest.java new file mode 100644 index 00000000..82ca58d1 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FlickrRipperTest.java @@ -0,0 +1,16 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.FlickrRipper; + +public class FlickrRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/243 + /* + public void testFlickrAlbum() throws IOException { + FlickrRipper ripper = new FlickrRipper(new URL("https://www.flickr.com/photos/leavingallbehind/sets/72157621895942720/")); + testRipper(ripper); + } + */ +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FuraffinityRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FuraffinityRipperTest.java new file mode 100644 index 00000000..4285993b --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FuraffinityRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.FuraffinityRipper; + +public class FuraffinityRipperTest extends RippersTest { + public void testFuraffinityAlbum() throws IOException { + FuraffinityRipper ripper = new FuraffinityRipper(new URL("https://www.furaffinity.net/gallery/mustardgas/")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FuskatorRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FuskatorRipperTest.java new file mode 100644 index 00000000..952887e5 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/FuskatorRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.FuskatorRipper; + +public class FuskatorRipperTest extends RippersTest { + public void testFuskatorAlbum() throws IOException { + FuskatorRipper ripper = new FuskatorRipper(new URL("http://fuskator.com/full/emJa1U6cqbi/index.html")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/GirlsOfDesireRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/GirlsOfDesireRipperTest.java new file mode 100644 index 00000000..fa51a262 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/GirlsOfDesireRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.GirlsOfDesireRipper; + +public class GirlsOfDesireRipperTest extends RippersTest { + public void testGirlsofdesireAlbum() throws IOException { + GirlsOfDesireRipper ripper = new GirlsOfDesireRipper(new URL("http://www.girlsofdesire.org/galleries/krillia/")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/Hentai2readRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/Hentai2readRipperTest.java new file mode 100644 index 00000000..144606fc --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/Hentai2readRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.Hentai2readRipper; + +public class Hentai2readRipperTest extends RippersTest { + public void testHentai2readAlbum() throws IOException { + Hentai2readRipper ripper = new Hentai2readRipper(new URL("https://hentai2read.com/sm_school_memorial/")); + testRipper(ripper); + } +} \ No newline at end of file diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/HentaicafeRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/HentaicafeRipperTest.java new file mode 100644 index 00000000..eae13f73 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/HentaicafeRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.HentaiCafeRipper; + +public class HentaicafeRipperTest extends RippersTest { + public void testHentaiCafeAlbum() throws IOException { + HentaiCafeRipper ripper = new HentaiCafeRipper(new URL("https://hentai.cafe/kikuta-the-oni-in-the-room/")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/HentaifoundryRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/HentaifoundryRipperTest.java new file mode 100644 index 00000000..9dadbd27 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/HentaifoundryRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.HentaifoundryRipper; + +public class HentaifoundryRipperTest extends RippersTest { + public void testHentaifoundryRip() throws IOException { + HentaifoundryRipper ripper = new HentaifoundryRipper(new URL("http://www.hentai-foundry.com/pictures/user/personalami")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagearnRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagearnRipperTest.java new file mode 100644 index 00000000..b9710635 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagearnRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ImagearnRipper; + +public class ImagearnRipperTest extends RippersTest { + public void testImagearnRip() throws IOException { + ImagearnRipper ripper = new ImagearnRipper(new URL("http://imagearn.com//gallery.php?id=578682")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagebamRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagebamRipperTest.java new file mode 100644 index 00000000..0c3e0761 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagebamRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ImagebamRipper; + +public class ImagebamRipperTest extends RippersTest { + public void testImagebamRip() throws IOException { + ImagebamRipper ripper = new ImagebamRipper(new URL("http://www.imagebam.com/gallery/488cc796sllyf7o5srds8kpaz1t4m78i")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagefapRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagefapRipperTest.java index bd2f5a49..95649015 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagefapRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagefapRipperTest.java @@ -8,13 +8,9 @@ import java.util.Map; import com.rarchives.ripme.ripper.rippers.ImagefapRipper; public class ImagefapRipperTest extends RippersTest { - public void testImagefapAlbums() throws IOException { Map testURLs = new HashMap<>(); - /* - Temporarily disabled test. See issue https://github.com/RipMeApp/ripme/issues/226 - // Album with specific title testURLs.put(new URL("http://www.imagefap.com/pictures/4649440/Frozen-%28Elsa-and-Anna%29?view=2"), "Frozen (Elsa and Anna)"); @@ -22,12 +18,10 @@ public class ImagefapRipperTest extends RippersTest { // New URL format testURLs.put(new URL("http://www.imagefap.com/gallery.php?pgid=fffd68f659befa5535cf78f014e348f1"), "imagefap_fffd68f659befa5535cf78f014e348f1"); - */ for (URL url : testURLs.keySet()) { ImagefapRipper ripper = new ImagefapRipper(url); testRipper(ripper); } } - } diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagevenueRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagevenueRipperTest.java new file mode 100644 index 00000000..135a7b0a --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImagevenueRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ImagevenueRipper; + +public class ImagevenueRipperTest extends RippersTest { + public void testImagevenueRip() throws IOException { + ImagevenueRipper ripper = new ImagevenueRipper(new URL("http://img120.imagevenue.com/galshow.php?gal=gallery_1373818527696_191lo")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImgboxRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImgboxRipperTest.java new file mode 100644 index 00000000..db8e1680 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ImgboxRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ImgboxRipper; + +public class ImgboxRipperTest extends RippersTest { + public void testImgboxRip() throws IOException { + ImgboxRipper ripper = new ImgboxRipper(new URL("https://imgbox.com/g/FJPF7t26FD")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/InstagramRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/InstagramRipperTest.java index fd989b92..cf9c05e2 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/InstagramRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/InstagramRipperTest.java @@ -15,6 +15,10 @@ public class InstagramRipperTest extends RippersTest { Map testURLs = new HashMap<>(); testURLs.put(new URL("http://instagram.com/Test_User"), "Test_User"); testURLs.put(new URL("http://instagram.com/_test_user_"), "_test_user_"); + testURLs.put(new URL("https://www.instagram.com/p/BZ4egP7njW5/?hl=en"), "BZ4egP7njW5"); + testURLs.put(new URL("https://www.instagram.com/p/BZ4egP7njW5"), "BZ4egP7njW5"); + testURLs.put(new URL("https://www.instagram.com/p/BaNPpaHn2zU/?taken-by=hilaryduff"), "hilaryduff_BaNPpaHn2zU"); + testURLs.put(new URL("https://www.instagram.com/p/BaNPpaHn2zU/"), "BaNPpaHn2zU"); for (URL url : testURLs.keySet()) { InstagramRipper ripper = new InstagramRipper(url); ripper.setup(); @@ -23,15 +27,15 @@ public class InstagramRipperTest extends RippersTest { } } - /* public void testInstagramAlbums() throws IOException { List contentURLs = new ArrayList<>(); - contentURLs.add(new URL("http://instagram.com/anacheri")); + // This unit test is a bit flaky + //contentURLs.add(new URL("https://www.instagram.com/Test_User/")); + contentURLs.add(new URL("https://www.instagram.com/p/BZ4egP7njW5/?hl=en")); + contentURLs.add(new URL("https://www.instagram.com/p/BaNPpaHn2zU/")); for (URL url : contentURLs) { InstagramRipper ripper = new InstagramRipper(url); testRipper(ripper); } } - */ - } diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ModelmayhemRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ModelmayhemRipperTest.java new file mode 100644 index 00000000..621d77c3 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ModelmayhemRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ModelmayhemRipper; + +public class ModelmayhemRipperTest extends RippersTest { + public void testModelmayhemRip() throws IOException { + ModelmayhemRipper ripper = new ModelmayhemRipper(new URL("https://www.modelmayhem.com/portfolio/520206/viewall")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/MotherlessRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/MotherlessRipperTest.java new file mode 100644 index 00000000..6b00f170 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/MotherlessRipperTest.java @@ -0,0 +1,14 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.MotherlessRipper; + +public class MotherlessRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/238 - MotherlessRipperTest is flaky on Travis CI + public void testMotherlessAlbumRip() throws IOException { + MotherlessRipper ripper = new MotherlessRipper(new URL("http://motherless.com/G4DAA18D")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/MyhentaicomicsRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/MyhentaicomicsRipperTest.java new file mode 100644 index 00000000..6714195d --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/MyhentaicomicsRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.MyhentaicomicsRipper; + +public class MyhentaicomicsRipperTest extends RippersTest { + public void testMyhentaicomicsAlbum() throws IOException { + MyhentaicomicsRipper ripper = new MyhentaicomicsRipper(new URL("http://myhentaicomics.com/index.php/Nienna-Lost-Tales")); + testRipper(ripper); + } +} \ No newline at end of file diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/NfsfwRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/NfsfwRipperTest.java new file mode 100644 index 00000000..bc0d4908 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/NfsfwRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.NfsfwRipper; + +public class NfsfwRipperTest extends RippersTest { + public void testNfsfwRip() throws IOException { + NfsfwRipper ripper = new NfsfwRipper(new URL("http://nfsfw.com/gallery/v/Kitten/")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PhotobucketRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PhotobucketRipperTest.java new file mode 100644 index 00000000..dff101a0 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PhotobucketRipperTest.java @@ -0,0 +1,21 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.PhotobucketRipper; + +public class PhotobucketRipperTest extends RippersTest { + /* + // https://github.com/RipMeApp/ripme/issues/229 : Disabled test (temporary) : BasicRippersTest#testPhotobucketRip (timing out) + public void testPhotobucketRip() throws IOException { + PhotobucketRipper ripper = new PhotobucketRipper(new URL("http://s844.photobucket.com/user/SpazzySpizzy/library/Album%20Covers?sort=3&page=1")); + testRipper(ripper); + deleteSubdirs(ripper.getWorkingDir()); + deleteDir(ripper.getWorkingDir()); + } + */ +} + + + diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PichunterRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PichunterRipperTest.java new file mode 100644 index 00000000..43d70884 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PichunterRipperTest.java @@ -0,0 +1,20 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.PichunterRipper; + +public class PichunterRipperTest extends RippersTest { + public void testPichunterModelPageRip() throws IOException { + // A non-photoset + PichunterRipper ripper = new PichunterRipper(new URL("https://www.pichunter.com/models/Madison_Ivy")); + testRipper(ripper); + } + + public void testPichunterGalleryRip() throws IOException { + // a photo set + PichunterRipper ripper = new PichunterRipper(new URL("http://www.pichunter.com/gallery/3270642/Its_not_only_those_who")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PorncomixRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PorncomixRipperTest.java new file mode 100644 index 00000000..7abe6e1e --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PorncomixRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.PorncomixRipper; + +public class PorncomixRipperTest extends RippersTest { + public void testPorncomixAlbum() throws IOException { + PorncomixRipper ripper = new PorncomixRipper(new URL("http://www.porncomix.info/lust-unleashed-desire-to-submit/")); + testRipper(ripper); + } +} \ No newline at end of file diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PornhubRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PornhubRipperTest.java new file mode 100644 index 00000000..96685cbc --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/PornhubRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.PornhubRipper; + +public class PornhubRipperTest extends RippersTest { + public void testPornhubRip() throws IOException { + PornhubRipper ripper = new PornhubRipper(new URL("https://www.pornhub.com/album/15680522")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java new file mode 100644 index 00000000..f20a21f2 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/RedditRipperTest.java @@ -0,0 +1,25 @@ + +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.RedditRipper; + +public class RedditRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/253 - Disabled tests: RedditRipperTest#testRedditSubreddit*Rip is flaky + /* + public void testRedditSubredditRip() throws IOException { + RedditRipper ripper = new RedditRipper(new URL("http://www.reddit.com/r/nsfw_oc")); + testRipper(ripper); + } + public void testRedditSubredditTopRip() throws IOException { + RedditRipper ripper = new RedditRipper(new URL("http://www.reddit.com/r/nsfw_oc/top?t=all")); + testRipper(ripper); + } + */ + public void testRedditPostRip() throws IOException { + RedditRipper ripper = new RedditRipper(new URL("http://www.reddit.com/r/UnrealGirls/comments/1ziuhl/in_class_veronique_popa/")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/SankakuComplexRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/SankakuComplexRipperTest.java new file mode 100644 index 00000000..6bbc8890 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/SankakuComplexRipperTest.java @@ -0,0 +1,20 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.SankakuComplexRipper; + +public class SankakuComplexRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/257 + /* + public void testSankakuChanRip() throws IOException { + SankakuComplexRipper ripper = new SankakuComplexRipper(new URL("https://chan.sankakucomplex.com/?tags=cleavage")); + testRipper(ripper); + } + public void testSankakuIdolRip() throws IOException { + SankakuComplexRipper ripper = new SankakuComplexRipper(new URL("https://idol.sankakucomplex.com/?tags=meme_%28me%21me%21me%21%29_%28cosplay%29")); + testRipper(ripper); + } + */ +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ShesFreakyRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ShesFreakyRipperTest.java new file mode 100644 index 00000000..3efa31b4 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/ShesFreakyRipperTest.java @@ -0,0 +1,16 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.ShesFreakyRipper; + +public class ShesFreakyRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/254 + /* + public void testShesFreakyRip() throws IOException { + ShesFreakyRipper ripper = new ShesFreakyRipper(new URL("http://www.shesfreaky.com/gallery/nicee-snow-bunny-579NbPjUcYa.html")); + testRipper(ripper); + } + */ +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/SinnercomicsRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/SinnercomicsRipperTest.java new file mode 100644 index 00000000..d1ce6b33 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/SinnercomicsRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.SinnercomicsRipper; + +public class SinnercomicsRipperTest extends RippersTest { + public void testSinnercomicsAlbum() throws IOException { + SinnercomicsRipper ripper = new SinnercomicsRipper(new URL("https://sinnercomics.com/comic/beyond-the-hotel-page-01/")); + testRipper(ripper); + } +} \ No newline at end of file diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TapasticRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TapasticRipperTest.java new file mode 100644 index 00000000..efef40cd --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TapasticRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.TapasticRipper; + +public class TapasticRipperTest extends RippersTest { + public void testTapasticRip() throws IOException { + TapasticRipper ripper = new TapasticRipper(new URL("http://tapastic.com/episode/2139")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TeenplanetRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TeenplanetRipperTest.java new file mode 100644 index 00000000..aa43103b --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TeenplanetRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.TeenplanetRipper; + +public class TeenplanetRipperTest extends RippersTest { + public void testTeenplanetRip() throws IOException { + TeenplanetRipper ripper = new TeenplanetRipper(new URL("http://teenplanet.org/galleries/the-perfect-side-of-me-6588.html")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TheyiffgalleryRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TheyiffgalleryRipperTest.java new file mode 100644 index 00000000..3c7a8fbd --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TheyiffgalleryRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.TheyiffgalleryRipper; + +public class TheyiffgalleryRipperTest extends RippersTest { + public void testTheyiffgallery() throws IOException { + TheyiffgalleryRipper ripper = new TheyiffgalleryRipper(new URL("https://theyiffgallery.com/index?/category/4303")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TumblrRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TumblrRipperTest.java new file mode 100644 index 00000000..eb616c4a --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TumblrRipperTest.java @@ -0,0 +1,25 @@ + +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.TumblrRipper; + +public class TumblrRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/250 + /* + public void testTumblrFullRip() throws IOException { + TumblrRipper ripper = new TumblrRipper(new URL("http://wrouinr.tumblr.com/archive")); + testRipper(ripper); + } + public void testTumblrTagRip() throws IOException { + TumblrRipper ripper = new TumblrRipper(new URL("http://topinstagirls.tumblr.com/tagged/berlinskaya")); + testRipper(ripper); + } + public void testTumblrPostRip() throws IOException { + TumblrRipper ripper = new TumblrRipper(new URL("http://sadbaffoon.tumblr.com/post/132045920789/what-a-hoe")); + testRipper(ripper); + } + */ +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TwitterRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TwitterRipperTest.java new file mode 100644 index 00000000..5a40ef02 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TwitterRipperTest.java @@ -0,0 +1,21 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.TwitterRipper; + +public class TwitterRipperTest extends RippersTest { + public void testTwitterUserRip() throws IOException { + TwitterRipper ripper = new TwitterRipper(new URL("https://twitter.com/danngamber01/media")); + testRipper(ripper); + } + + // https://github.com/RipMeApp/ripme/issues/251 + /* + public void testTwitterSearchRip() throws IOException { + TwitterRipper ripper = new TwitterRipper(new URL("https://twitter.com/search?f=tweets&q=from%3Aalinalixxx%20filter%3Aimages&src=typd")); + testRipper(ripper); + } + */ +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TwodgalleriesRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TwodgalleriesRipperTest.java new file mode 100644 index 00000000..a11efbdb --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/TwodgalleriesRipperTest.java @@ -0,0 +1,17 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.TwodgalleriesRipper; + +public class TwodgalleriesRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/182 + /* + public void testTwodgalleriesRip() throws IOException { + TwodgalleriesRipper ripper = new TwodgalleriesRipper(new URL("http://www.2dgalleries.com/artist/regis-loisel-6477")); + testRipper(ripper); + } + */ +} + diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VidbleRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VidbleRipperTest.java new file mode 100644 index 00000000..ccbeb8bb --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VidbleRipperTest.java @@ -0,0 +1,14 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.VidbleRipper; + +public class VidbleRipperTest extends RippersTest { + public void testVidbleRip() throws IOException { + VidbleRipper ripper = new VidbleRipper(new URL("http://www.vidble.com/album/y1oyh3zd")); + testRipper(ripper); + } +} + diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VideoRippersTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VideoRippersTest.java index e855fbe4..73c818d0 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VideoRippersTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VideoRippersTest.java @@ -45,6 +45,7 @@ public class VideoRippersTest extends RippersTest { } } + // https://github.com/RipMeApp/ripme/issues/187 /* public void testPornhubRipper() throws IOException { List contentURLs = new ArrayList<>(); @@ -56,6 +57,7 @@ public class VideoRippersTest extends RippersTest { } */ + // https://github.com/RipMeApp/ripme/issues/186 /* public void testVineRipper() throws IOException { List contentURLs = new ArrayList<>(); diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VineRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VineRipperTest.java new file mode 100644 index 00000000..343a72b0 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VineRipperTest.java @@ -0,0 +1,16 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.VineRipper; + +public class VineRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/181 + /* + public void testVineRip() throws IOException { + VineRipper ripper = new VineRipper(new URL("https://vine.co/u/954440445776334848")); + testRipper(ripper); + } + */ +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java new file mode 100644 index 00000000..cc15ff99 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/VkRipperTest.java @@ -0,0 +1,29 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.VkRipper; + +public class VkRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/252 + // Not supported (error): https://vk.com/helga_model (Profile Page) + // Not supported (rips nothing): https://vk.com/albums45506334 (all albums under a Profile Page) + + // EXAMPLE: https://vk.com/photos45506334 (all photos for a model) + // EXAMPLE: https://vk.com/album45506334_0 (a single album - profile pictures) + // EXAMPLE: https://vk.com/album45506334_00?rev=1 (a single album - wall pictures) + // EXAMPLE: https://vk.com/album45506334_101886701 (a single album - custom) + public void testVkAlbumHttpRip() throws IOException { + VkRipper ripper = new VkRipper(new URL("http://vk.com/album45506334_0")); + testRipper(ripper); + } + public void testVkAlbumHttpsRip() throws IOException { + VkRipper ripper = new VkRipper(new URL("https://vk.com/album45506334_0")); + testRipper(ripper); + } + public void testVkPhotosRip() throws IOException { + VkRipper ripper = new VkRipper(new URL("https://vk.com/photos45506334")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/WebtoonsRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/WebtoonsRipperTest.java new file mode 100644 index 00000000..20cf17b8 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/WebtoonsRipperTest.java @@ -0,0 +1,13 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.WebtoonsRipper; + +public class WebtoonsRipperTest extends RippersTest { + public void testWebtoonsAlbum() throws IOException { + WebtoonsRipper ripper = new WebtoonsRipper(new URL("http://www.webtoons.com/en/drama/my-boo/ep-33/viewer?title_no=1185&episode_no=33")); + testRipper(ripper); + } +} diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/WordpressComicRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/WordpressComicRipperTest.java new file mode 100644 index 00000000..a4c90a9a --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/WordpressComicRipperTest.java @@ -0,0 +1,96 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.WordpressComicRipper; + +public class WordpressComicRipperTest extends RippersTest { + // Test links (see also WordpressComicRipper.java) + // http://www.totempole666.com/comic/first-time-for-everything-00-cover/ + // http://buttsmithy.com/archives/comic/p1 + // http://themonsterunderthebed.net/?comic=test-post + // http://prismblush.com/comic/hella-trap-pg-01/ + // http://www.konradokonski.com/sawdust/ + // http://www.konradokonski.com/wiory/ + // http://freeadultcomix.com/finders-feepaid-in-full-sparrow/ + // http://thisis.delvecomic.com/NewWP/comic/in-too-deep/ + // http://tnbtu.com/comic/01-00/ + // http://shipinbottle.pepsaga.com/?p=281 + + /* + // https://github.com/RipMeApp/ripme/issues/269 - Disabled test - WordpressRipperTest: various domains flaky in CI + public void test_totempole666() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://www.totempole666.com/comic/first-time-for-everything-00-cover/")); + testRipper(ripper); + } + */ + + /* + // https://github.com/RipMeApp/ripme/issues/269 - Disabled test - WordpressRipperTest: various domains flaky in CI + public void test_buttsmithy() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://buttsmithy.com/archives/comic/p1")); + testRipper(ripper); + } + */ + + /* + // https://github.com/RipMeApp/ripme/issues/269 - Disabled test - WordpressRipperTest: various domains flaky in CI + public void test_themonsterunderthebed() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://themonsterunderthebed.net/?comic=test-post")); + testRipper(ripper); + } + */ + + public void test_prismblush() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://prismblush.com/comic/hella-trap-pg-01/")); + testRipper(ripper); + } + + /* + // https://github.com/RipMeApp/ripme/issues/266 - WordpressRipper: konradokonski.com previously supported but now cannot rip + + public void test_konradokonski_1() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://www.konradokonski.com/sawdust/")); + testRipper(ripper); + } + + public void test_konradokonski_2() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://www.konradokonski.com/wiory/")); + testRipper(ripper); + } + */ + + /* + // https://github.com/RipMeApp/ripme/issues/269 - Disabled test - WordpressRipperTest: various domains flaky in CI + public void test_freeadultcomix() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://freeadultcomix.com/finders-feepaid-in-full-sparrow/")); + testRipper(ripper); + } + */ + + public void test_delvecomic() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://thisis.delvecomic.com/NewWP/comic/in-too-deep/")); + testRipper(ripper); + } + + public void test_tnbtu() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://tnbtu.com/comic/01-00/")); + testRipper(ripper); + } + + public void test_pepsaga() throws IOException { + WordpressComicRipper ripper = new WordpressComicRipper( + new URL("http://shipinbottle.pepsaga.com/?p=281")); + testRipper(ripper); + } +} 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 new file mode 100644 index 00000000..fa6f1b24 --- /dev/null +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/XhamsterRipperTest.java @@ -0,0 +1,22 @@ +package com.rarchives.ripme.tst.ripper.rippers; + +import java.io.IOException; +import java.net.URL; + +import com.rarchives.ripme.ripper.rippers.XhamsterRipper; + +public class XhamsterRipperTest extends RippersTest { + // https://github.com/RipMeApp/ripme/issues/206 - Disabled tests: XhamsterRipperTest test cases are flaky in Travis CI + + /* + public void testXhamsterAlbum1() throws IOException { + XhamsterRipper ripper = new XhamsterRipper(new URL("https://xhamster.com/photos/gallery/sexy-preggo-girls-9026608")); + testRipper(ripper); + } + + public void testXhamsterAlbum2() throws IOException { + XhamsterRipper ripper = new XhamsterRipper(new URL("https://xhamster.com/photos/gallery/japanese-dolls-4-asahi-mizuno-7254664")); + testRipper(ripper); + } + */ +}