package com.yuantiku.yyl.helper; import com.yuantiku.dbdata.Account; import com.yuantiku.yyl.webadapter.WikiAdapter; import com.yuantiku.yyl.webadapter.WikiAdapter.WikiService; import java.io.IOException; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import retrofit.client.Response; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; /** * @author lirui * @date 15/4/29. */ public enum ZGYWikiHelper { helper; private WikiService service; ZGYWikiHelper() { service = WikiAdapter.getService(); } public Observable<Response> login(String name, String password) { return service.login(name, password, "Login"); } public void loadMembers(Action1<List<Account>> onNextAction, Action1<Throwable> onErrorAction) { service.getMembers() .subscribe(response -> parseResponse(response, onNextAction), onErrorAction); } private void parseResponse(Response response, Action1<List<Account>> onNextAction) { Document document; try { document = Jsoup.parse(response.getBody().in(), "UTF-8", "https://wiki.zhenguanyu.com/"); } catch (IOException e) { e.printStackTrace(); return; } Elements items = document.getElementsByTag("tr"); Observable.from(items) .skip(1) // 第一个item是标题 .map(item -> item.getElementsByTag("td").text().split(" ")) .map(this::parseAccount) .toList() .doOnNext(accountList -> { AccountDBHelper.helper.clear(); AccountDBHelper.helper.save(accountList); }) .observeOn(AndroidSchedulers.mainThread()) .subscribe(onNextAction); ; } private Account parseAccount(String[] info) { if (info.length < 8) { return null; } Account account = new Account(); account.setName(info[0]); account.setLdap(info[1]); account.setEmail(info[2]); account.setPhone(info[3]); account.setDept(info[4]); account.setGoogleAccount(info[5]); account.setBirth(info[6]); account.setConstellation(info[7]); return account; } }