package com.pan.simplepicture.model;
import android.text.TextUtils;
import com.pan.simplepicture.bean.Lz13;
import com.pan.simplepicture.inter.Callback;
import com.pan.simplepicture.model.impl.IArticleFragmentModel;
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 java.util.Map;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
/**
* Created by sysadminl on 2016/1/18.
*/
public class ArticleFragmentModel implements IArticleFragmentModel {
@Override
public void parserLZ13(final Map<String, String> params, final Callback<List<Lz13>> mCallback) {
Observable.create(new Observable.OnSubscribe<List<Lz13>>() {
@Override
public void call(Subscriber<? super List<Lz13>> subscriber) {
try {
Document result = Jsoup.connect(params.get("url")).get();
Elements postHeads = result.getElementsByClass("PostHead");
Elements postContent1s = result.getElementsByClass("PostContent1");
List<Lz13> list = new ArrayList<Lz13>(postHeads.size());
for (int i = 0; i < postHeads.size(); i++) {
Lz13 lz13 = new Lz13();
Element postHead = postHeads.get(i);
Element a = postHead.getElementsByTag("a").get(0);
lz13.href = a.attr("href");
lz13.title = a.text();
Element postContent1 = postContent1s.get(i);
lz13.text = postContent1.text().replace(lz13.title, "");
String[] split = lz13.text.split("\\s{2,}");
StringBuffer sb = new StringBuffer();
for (String s : split) {
if (TextUtils.isEmpty(s)) {
continue;
}
if (lz13.title.equals(s)) {
continue;
}
if (s.startsWith("文/")) {
lz13.auth = s;
continue;
}
sb.append(" ").append(s).append("<br/>");
}
int index = sb.lastIndexOf("<br/>");
if (index == -1) continue;
lz13.text = sb.substring(0, sb.lastIndexOf("<br/>") - 1) + "......";
list.add(lz13);
}
subscriber.onNext(list);
} catch (Exception e) {
e.printStackTrace();
subscriber.onNext(null);
}
}
}
).
subscribeOn(Schedulers.io()
).
observeOn(AndroidSchedulers.mainThread()
).
subscribe(new Action1<List<Lz13>>() {
@Override
public void call(List<Lz13> list) {
if (null == list) {
mCallback.onFaild();
} else {
mCallback.onSccuss(list);
}
}
});
}
}