diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/ZizkiRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/ZizkiRipper.java new file mode 100644 index 00000000..b200c413 --- /dev/null +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/ZizkiRipper.java @@ -0,0 +1,125 @@ +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.Collections; +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.Response; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import com.rarchives.ripme.ripper.AbstractHTMLRipper; +import com.rarchives.ripme.ui.RipStatusMessage.STATUS; +import com.rarchives.ripme.utils.Http; + +public class ZizkiRipper extends AbstractHTMLRipper { + + private Document albumDoc = null; + private Map cookies = new HashMap(); + + public ZizkiRipper(URL url) throws IOException { + super(url); + } + + @Override + public String getHost() { + return "zizki"; + } + @Override + public String getDomain() { + return "zizki.com"; + } + + @Override + public String getGID(URL url) throws MalformedURLException { + Pattern p = Pattern.compile("^https?://(www\\.)?zizki\\.com/([a-zA-Z0-9\\-_]+).*$"); + Matcher m = p.matcher(url.toExternalForm()); + if (!m.matches()) { + throw new MalformedURLException("Expected URL format: http://www.zizki.com/author/albumname, got: " + url); + } + return m.group(m.groupCount()); + } + + @Override + public String getAlbumTitle(URL url) throws MalformedURLException { + try { + // Attempt to use album title as GID + Element titleElement = getFirstPage().select("meta[name=description]").first(); + String title = titleElement.attr("content"); + title = title.substring(title.lastIndexOf('/') + 1); + + Element authorSpan = getFirstPage().select("span[class=creator]").first(); + String author = authorSpan.select("a").first().text(); + logger.debug("Author: " + author); + return getHost() + "_" + author + "_" + title.trim(); + } catch (IOException e) { + // Fall back to default album naming convention + logger.info("Unable to find title at " + url); + } + return super.getAlbumTitle(url); + } + + @Override + public Document getFirstPage() throws IOException { + if (albumDoc == null) { + Response resp = Http.url(url).response(); + cookies.putAll(resp.cookies()); + albumDoc = resp.parse(); + } + return albumDoc; + } + + @Override + public List getURLsFromPage(Document page) { + List imageURLs = new ArrayList(); + // Page contains images + logger.info("Look for images."); + for (Element thumb : page.select("img")) { + logger.info("Img"); + if (super.isStopped()) break; + // Find thumbnail image source + String image = null; + String img_type = null; + String src = null; + if (thumb.hasAttr("typeof")) { + img_type = thumb.attr("typeof"); + if (img_type.equals("foaf:Image")) { + logger.debug("Found image with " + img_type); + if (thumb.parent() != null && + thumb.parent().parent() != null && + thumb.parent().parent().attr("class") != null && + thumb.parent().parent().attr("class").equals("aimage-center") + ) + { + src = thumb.attr("src"); + logger.debug("Found url with " + src); + if (!src.contains("zizki.com")) { + continue; + } else { + imageURLs.add(src.replace("/styles/medium/public/","/styles/large/public/")); + } + } + } + } + } + return imageURLs; + } + + @Override + public void downloadURL(URL url, int index) { + addURLToDownload(url, getPrefix(index), "", this.url.toExternalForm(), cookies); + } + + @Override + public String getPrefix(int index) { + return String.format("%03d_", index); + } +}