package jianshu.io.app.model.datapool;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import jianshu.io.app.model.ArticleInfo;
import jianshu.io.app.model.ArticleItem;
/**
* Created by Administrator on 2014/3/29.
*/
public class HomePageDataPool extends ArticleDataPool {
public final static String HOME_PAGE_URL = "http://jianshu.io";
protected final static String ARTICLE_SELECTOR = "div.article";
protected final static String TITLE_SELECTOR = "a.title";
protected final static String AVATAR_SELECTOR = "a.avatar > img";
protected final static String CONTENT_SELECTOR = "a.content";
protected final static String LOAD_MORE_SELECTOR = "div.load-more button";
protected final static String URL_SELECTOR = "a.content";
protected final static String AUTHOR_SELECTOR = "a.author";
protected final static String CURRENT_USER_SLUG = "meta#current_user_slug";
public HomePageDataPool() {
super(HOME_PAGE_URL);
}
@Override
protected void onRefresh() {
//nothing to do
}
@Override
protected ArticleItem[] getArticleItems(Document doc) {
Elements loadMoreElements = doc.select(LOAD_MORE_SELECTOR);
if (loadMoreElements.size() > 0) {
mLoadMoreUrl = getHtmlUrl(loadMoreElements.get(0).attr("data-url"));
} else {
mLoadMoreUrl = null;
mIsAtTheEnd = true;
}
Elements articleElements = doc.select(ARTICLE_SELECTOR);
if (articleElements != null) {
int i = 0;
ArticleItem[] result = new ArticleItem[articleElements.size()];
for (Element el : articleElements) {
result[i++] = parseElement(el);
}
return result;
} else {
return null;
}
}
private String getHtmlUrl(String url) {
String[] fragments = url.split("\\?");
return HOME_PAGE_URL + fragments[0] + ".html?" + fragments[1];
}
public ArticleItem parseElement(Element el) {
Element titleEl = el.select(TITLE_SELECTOR).get(0);
String title = titleEl.text();
Element avatarEl = el.select(AVATAR_SELECTOR).get(0);
String avatarUrl = avatarEl.attr("src");
Element contentEl = el.select(CONTENT_SELECTOR).get(0);
String content = contentEl.text();
Element urlEl = el.select(URL_SELECTOR).get(0);
String url = HOME_PAGE_URL + urlEl.attr("href");
Element authorEl = el.select(AUTHOR_SELECTOR).get(0);
String author = authorEl.text();
Element articleInfoEl = el.select("div.article-info").get(0);
ArticleInfo articleInfo = parseArticleInfo(articleInfoEl);
return new ArticleItem(title, avatarUrl, content, url, author, articleInfo);
}
}