package com.hotbitmapgg.moequest.utils; import com.hotbitmapgg.moequest.entity.douban.DoubanMeizi; import com.hotbitmapgg.moequest.entity.gank.GankMeizi; import com.hotbitmapgg.moequest.entity.gank.GankMeiziInfo; import com.hotbitmapgg.moequest.entity.meizitu.MeiziTu; import io.realm.Realm; import java.util.ArrayList; import java.util.List; import okhttp3.ResponseBody; import retrofit2.Response; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; /** * 萌妹纸工具类 */ public class MeiziUtil { private static volatile MeiziUtil mCache; private MeiziUtil() { } public static MeiziUtil getInstance() { if (mCache == null) { synchronized (MeiziUtil.class) { if (mCache == null) { mCache = new MeiziUtil(); } } } return mCache; } /** * 保存gank妹子到数据库中 */ public void putGankMeiziCache(List<GankMeiziInfo> gankMeiziInfos) { GankMeizi meizi; Realm realm = Realm.getDefaultInstance(); realm.beginTransaction(); for (int i = 0; i < gankMeiziInfos.size(); i++) { meizi = new GankMeizi(); String url = gankMeiziInfos.get(i).url; String desc = gankMeiziInfos.get(i).desc; meizi.setUrl(url); meizi.setDesc(desc); realm.copyToRealm(meizi); } realm.commitTransaction(); realm.close(); } /** * 保存豆瓣妹子数据到数据库中 */ public void putDoubanMeiziCache(int type, Response<ResponseBody> response) { try { Realm realm = Realm.getDefaultInstance(); realm.beginTransaction(); String string = response.body().string(); Document parse = Jsoup.parse(string); Elements elements = parse.select("div[class=thumbnail]>div[class=img_single]>a>img"); DoubanMeizi meizi; for (Element e : elements) { String src = e.attr("src"); String title = e.attr("title"); meizi = new DoubanMeizi(); meizi.setUrl(src); meizi.setTitle(title); meizi.setType(type); realm.copyToRealm(meizi); } realm.commitTransaction(); realm.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 解析妹子图html */ public List<MeiziTu> parserMeiziTuHtml(String html, String type) { List<MeiziTu> list = new ArrayList<>(); Document doc = Jsoup.parse(html); Elements links = doc.select("li"); Element aelement; Element imgelement; for (int i = 7; i < links.size(); i++) { imgelement = links.get(i).select("img").first(); aelement = links.get(i).select("a").first(); MeiziTu bean = new MeiziTu(); bean.setOrder(i); bean.setTitle(imgelement.attr("alt")); bean.setType(type); bean.setHeight(354); bean.setWidth(236); bean.setImageurl(imgelement.attr("data-original")); bean.setUrl(aelement.attr("href")); bean.setGroupid(url2groupid(bean.getUrl())); list.add(bean); } return list; } /** * 解析自拍妹子Html */ public List<MeiziTu> parserMeiziTuByAutodyne(String html, String type) { List<MeiziTu> list = new ArrayList<>(); Document doc = Jsoup.parse(html); Elements p = doc.getElementsByTag("p"); MeiziTu meiziTu; Element img; for (int i = 0; i < 15; i++) { meiziTu = new MeiziTu(); img = p.get(i).select("img").first(); String src = img.attr("src"); String title = img.attr("alt"); meiziTu.setOrder(i); meiziTu.setType(type); meiziTu.setWidth(0); meiziTu.setHeight(0); meiziTu.setImageurl(src); meiziTu.setTitle(title); list.add(meiziTu); } return list; } /** * 获取妹子图的GroupId */ private int url2groupid(String url) { return Integer.parseInt(url.split("/")[3]); } /** * 保存妹子图数据到数据库中 */ public void putMeiziTuCache(List<MeiziTu> list) { Realm realm = Realm.getDefaultInstance(); realm.beginTransaction(); realm.copyToRealmOrUpdate(list); realm.commitTransaction(); realm.close(); } }