package ren.solid.ganhuoio.api;
import android.support.annotation.NonNull;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Single;
import io.reactivex.functions.Function;
import okhttp3.ResponseBody;
import ren.solid.ganhuoio.bean.XianDuCategory;
import ren.solid.ganhuoio.bean.XianDuItem;
import ren.solid.library.http.CommonService;
import ren.solid.library.http.ServiceFactory;
/**
* Created by _SOLID
* GitHub:https://github.com/burgessjp
* Date:2017/3/18
* Time:15:22
* Desc:使用Jsoup解析闲读数据
*/
public class XianDuService {
private final static String BASE_URL = "http://gank.io/xiandu";
public static Single<List<XianDuCategory>> getCategorys() {
return getDocumentObservable(BASE_URL)
.map(new Function<Document, List<XianDuCategory>>() {
@Override
public List<XianDuCategory> apply(@io.reactivex.annotations.NonNull Document document) throws Exception {
List<XianDuCategory> list = new ArrayList<>();
Elements elements = document.body().getElementById("xiandu_cat").getElementsByTag("a");
for (Element element : elements) {
XianDuCategory item = new XianDuCategory();
item.setTitle(element.text());
item.setCategory(element.attr("href").substring(element.attr("href").lastIndexOf("/") + 1));
list.add(item);
}
return list;
}
});
}
public static Single<List<XianDuItem>> getData(String category, int pageIndex) {
if ("xiandu".equals(category)) {//处理默认页
category = "wow";
}
final String requestUrl = BASE_URL + "/" + category + "/" + "page" + "/" + pageIndex;
return getDocumentObservable(requestUrl)
.map(new Function<Document, List<XianDuItem>>() {
@Override
public List<XianDuItem> apply(@io.reactivex.annotations.NonNull Document document) throws Exception {
List<XianDuItem> list = new ArrayList<>();
Elements items = document.body().getElementsByClass("xiandu_item");
for (Element element : items) {
String title = element.getElementsByClass("site-title").text();
String url = element.getElementsByClass("site-title").attr("href");
String time = element.getElementsByTag("small").text();
String source = element.getElementsByClass("site-name").get(0).attr("title");
String sourceAvatar = element.getElementsByClass("site-name").get(0)
.getElementsByTag("img").get(0).attr("src");
XianDuItem item = new XianDuItem();
item.setTitle(title);
item.setUrl(url);
item.setSource(source);
item.setTime(time);
item.setSourceAvatar(sourceAvatar);
list.add(item);
}
return list;
}
});
}
@NonNull
private static Single<Document> getDocumentObservable(String requestUrl) {
return ServiceFactory.getInstance()
.createService(CommonService.class)
.loadString(requestUrl)
.map(new Function<ResponseBody, Document>() {
@Override
public Document apply(@io.reactivex.annotations.NonNull ResponseBody responseBody) throws Exception {
return Jsoup.parse(responseBody.string());
}
});
}
}