package jianshu.io.app.model.datapool; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.ArrayList; import java.util.List; import jianshu.io.app.model.ArticleInfo; import jianshu.io.app.model.ArticleItem; /** * Created by Administrator on 2014/6/8. */ public abstract class ArticleDataPool extends DataPool { public ArticleDataPool(String startUrl) { super(startUrl); } @Override protected Object[] getItems(Document doc) { return getArticleItems(doc); } protected ArticleInfo parseArticleInfo(Element el) { Element notebookEl = el.select("a.notebook").get(0); String notebook = notebookEl.text(); Elements topicEls = el.select("a.collections"); List<String> topics = new ArrayList<String>(topicEls.size()); for (Element topicEl : topicEls) { topics.add(topicEl.text()); } int commentCount = 0; Elements blankTargetEls = el.select("a[target=_blank]"); for (Element blankTargetEl : blankTargetEls) { if (blankTargetEl.attr("href").contains("#comments")) { commentCount = string2int(blankTargetEl.text()); break; } } boolean isLiking = false; Elements likeStateEls = el.select(".icon-heart"); if (likeStateEls.size() > 0) { isLiking = true; } else { isLiking = false; } Element likeEl = el.select("a.like-icon-button").get(0); int likeCount = string2int(likeEl.text()); return new ArticleInfo(notebook, topics, commentCount, likeCount, isLiking); } private int string2int(String str) { str = str.replace("\"", "").trim(); return Integer.parseInt(str); } protected abstract ArticleItem[] getArticleItems(Document doc); }