X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fgofetch%2Fsupport%2FPipedot.java;h=17388b21030f5cbdbbd12518b9b0b1023594fff5;hb=136ab80122a17caa0720116d6d2552521239fbb3;hp=4d68fe7821df1c7b781d7ef02e52384384e44530;hpb=2d95a873f4dc858d9ed55fa1889b1cf29a78f5eb;p=gofetch.git diff --git a/src/be/nikiroo/gofetch/support/Pipedot.java b/src/be/nikiroo/gofetch/support/Pipedot.java index 4d68fe7..17388b2 100644 --- a/src/be/nikiroo/gofetch/support/Pipedot.java +++ b/src/be/nikiroo/gofetch/support/Pipedot.java @@ -9,6 +9,7 @@ import java.util.List; import org.jsoup.helper.DataUtil; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; +import org.jsoup.nodes.Node; import org.jsoup.select.Elements; import be.nikiroo.gofetch.data.Comment; @@ -30,11 +31,11 @@ public class Pipedot extends BasicSupport { List list = new ArrayList(); URL url = new URL("https://pipedot.org/"); - InputStream in = open(url); + InputStream in = downloader.open(url); Document doc = DataUtil.load(in, "UTF-8", url.toString()); - Elements stories = doc.getElementsByClass("story"); - for (Element story : stories) { - Elements titles = story.getElementsByTag("h1"); + Elements articles = doc.getElementsByClass("story"); + for (Element article : articles) { + Elements titles = article.getElementsByTag("h1"); if (titles.size() == 0) { continue; } @@ -42,7 +43,7 @@ public class Pipedot extends BasicSupport { Element title = titles.get(0); String id = ""; - for (Element idElem : story.getElementsByTag("a")) { + for (Element idElem : article.getElementsByTag("a")) { if (idElem.attr("href").startsWith("/pipe/")) { id = idElem.attr("href").substring("/pipe/".length()); break; @@ -52,7 +53,7 @@ public class Pipedot extends BasicSupport { String intUrl = null; String extUrl = null; - Elements links = story.getElementsByTag("a"); + Elements links = article.getElementsByTag("a"); if (links.size() > 0) { intUrl = links.get(0).absUrl("href"); } @@ -67,13 +68,13 @@ public class Pipedot extends BasicSupport { } String details = ""; - Elements detailsElements = story.getElementsByTag("div"); + Elements detailsElements = article.getElementsByTag("div"); if (detailsElements.size() > 0) { details = detailsElements.get(0).text(); } String body = ""; - for (Element elem : story.children()) { + for (Element elem : article.children()) { String tag = elem.tag().toString(); if (!tag.equals("header") && !tag.equals("footer")) { body = elem.text(); @@ -89,18 +90,18 @@ public class Pipedot extends BasicSupport { } @Override - public List getComments(Story story) throws IOException { + public void fetch(Story story) throws IOException { List comments = new ArrayList(); URL url = new URL(story.getUrlInternal()); - InputStream in = open(url); + InputStream in = downloader.open(url); Document doc = DataUtil.load(in, "UTF-8", url.toString()); Elements listing = doc.getElementsByTag("main"); if (listing.size() > 0) { comments.addAll(getComments(listing.get(0))); } - return comments; + story.setComments(comments); } private List getComments(Element listing) { @@ -117,9 +118,9 @@ public class Pipedot extends BasicSupport { } private Comment getComment(Element commentElement) { - String title = firstOrEmptyTag(commentElement, "h3"); - String author = firstOrEmpty(commentElement, "h4"); - String content = firstOrEmpty(commentElement, "comment-body"); + String title = firstOrEmptyTag(commentElement, "h3").text(); + String author = firstOrEmpty(commentElement, "h4").text(); + Element content = firstOrEmpty(commentElement, "comment-body"); String date = ""; int pos = author.lastIndexOf(" on "); @@ -129,7 +130,7 @@ public class Pipedot extends BasicSupport { } Comment comment = new Comment(commentElement.id(), author, title, date, - content); + toLines(content)); Elements commentOutline = commentElement .getElementsByClass("comment-outline"); @@ -140,43 +141,20 @@ public class Pipedot extends BasicSupport { return comment; } - /** - * Get the first element of the given class, or an empty {@link String} if - * none found. - * - * @param element - * the element to look in - * @param className - * the class to look for - * - * @return the value or an empty {@link String} - */ - private String firstOrEmpty(Element element, String className) { - Elements subElements = element.getElementsByClass(className); - if (subElements.size() > 0) { - return subElements.get(0).text(); - } - - return ""; - } - - /** - * Get the first element of the given tag, or an empty {@link String} if - * none found. - * - * @param element - * the element to look in - * @param tagName - * the tag to look for - * - * @return the value or an empty {@link String} - */ - private String firstOrEmptyTag(Element element, String tagName) { - Elements subElements = element.getElementsByTag(tagName); - if (subElements.size() > 0) { - return subElements.get(0).text(); - } + private List toLines(Element element) { + return toLines(element, new BasicElementProcessor() { + @Override + public boolean detectQuote(Node node) { + if (node instanceof Element) { + Element elementNode = (Element) node; + if (elementNode.tagName().equals("blockquote") + || elementNode.hasClass("quote")) { + return true; + } + } - return ""; + return false; + } + }); } }