diff --git a/app/src/main/java/com/github/catvod/bean/Class.java b/app/src/main/java/com/github/catvod/bean/Class.java index d26be087..8a26178c 100644 --- a/app/src/main/java/com/github/catvod/bean/Class.java +++ b/app/src/main/java/com/github/catvod/bean/Class.java @@ -24,6 +24,10 @@ public class Class { return items; } + public Class(String typeId) { + this(typeId, typeId); + } + public Class(String typeId, String typeName) { this(typeId, typeName, ""); } diff --git a/app/src/main/java/com/github/catvod/bean/Filter.java b/app/src/main/java/com/github/catvod/bean/Filter.java index 808d59e2..4b8e3525 100644 --- a/app/src/main/java/com/github/catvod/bean/Filter.java +++ b/app/src/main/java/com/github/catvod/bean/Filter.java @@ -32,6 +32,11 @@ public class Filter { @SerializedName("v") private String v; + public Value(String value) { + this.n = Trans.get(value); + this.v = value; + } + public Value(String n, String v) { this.n = Trans.get(n); this.v = v; diff --git a/app/src/main/java/com/github/catvod/demo/MainActivity.java b/app/src/main/java/com/github/catvod/demo/MainActivity.java index 61a98f45..2a3de8c1 100644 --- a/app/src/main/java/com/github/catvod/demo/MainActivity.java +++ b/app/src/main/java/com/github/catvod/demo/MainActivity.java @@ -12,7 +12,6 @@ public class MainActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(() -> { - }).start(); } } \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Dm84.java b/app/src/main/java/com/github/catvod/spider/Dm84.java index f63fa2d8..47278a97 100644 --- a/app/src/main/java/com/github/catvod/spider/Dm84.java +++ b/app/src/main/java/com/github/catvod/spider/Dm84.java @@ -35,7 +35,7 @@ public class Dm84 extends Spider { return headers; } - private Filter addFilter(String name, String key, List texts) { + private Filter getFilter(String name, String key, List texts) { List values = new ArrayList<>(); for (String text : texts) { if (text.isEmpty()) continue; @@ -67,9 +67,9 @@ public class Dm84 extends Spider { doc = Jsoup.parse(OkHttpUtil.string(siteUrl + "/list-" + item.getTypeId() + ".html", getHeaders())); Elements elements = doc.select("ul.list_filter > li > div"); List array = new ArrayList<>(); - array.add(addFilter("類型", "type", elements.get(0).select("a").eachText())); - array.add(addFilter("時間", "year", elements.get(1).select("a").eachText())); - array.add(addFilter("排序", "by", elements.get(2).select("a").eachText())); + array.add(getFilter("類型", "type", elements.get(0).select("a").eachText())); + array.add(getFilter("時間", "year", elements.get(1).select("a").eachText())); + array.add(getFilter("排序", "by", elements.get(2).select("a").eachText())); filters.put(item.getTypeId(), array); } for (Element element : doc.select("div.item")) { diff --git a/app/src/main/java/com/github/catvod/spider/Ying.java b/app/src/main/java/com/github/catvod/spider/Ying.java new file mode 100644 index 00000000..dce6ffeb --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Ying.java @@ -0,0 +1,172 @@ +package com.github.catvod.spider; + +import android.text.TextUtils; + +import com.github.catvod.bean.Class; +import com.github.catvod.bean.Filter; +import com.github.catvod.bean.Result; +import com.github.catvod.bean.Vod; +import com.github.catvod.crawler.Spider; +import com.github.catvod.net.OkHttpUtil; +import com.github.catvod.utils.Misc; +import com.github.catvod.utils.Trans; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class Ying extends Spider { + + private static final String siteUrl = "https://www.yhdmp.cc"; + private static final String listUrl = siteUrl + "/list/"; + private static final String showUrl = siteUrl + "/showp/"; + private static final String filterUrl = "https://www.xmfans.me/yxsf/js/yx_catalog.js"; + + private HashMap getHeaders() { + HashMap headers = new HashMap<>(); + headers.put("User-Agent", Misc.CHROME); + return headers; + } + + private Filter getFilter(String[] texts) { + List values = new ArrayList<>(); + for (int i = 2; i < texts.length; i++) { + if (!texts[i].isEmpty()) values.add(new Filter.Value(texts[i].trim())); + } + return new Filter(texts[0].trim(), texts[1].trim(), values); + } + + private void addClasses(List classes, String[] texts) { + for (int i = 2; i < texts.length; i++) { + if (!texts[i].isEmpty()) classes.add(new Class(texts[i].trim())); + } + } + + private void checkExtend(StringBuilder sb, HashMap extend, String column) { + if (!extend.containsKey(column) || extend.get(column).equals("全部") || extend.get(column).equals("更新时间")) return; + sb.append("&").append(column).append("=").append(extend.get(column)); + } + + @Override + public String homeContent(boolean filter) { + List list = new ArrayList<>(); + List classes = new ArrayList<>(); + List array = new ArrayList<>(); + LinkedHashMap> filters = new LinkedHashMap<>(); + Document doc1 = Jsoup.parse(OkHttpUtil.string(filterUrl, getHeaders())); + String[] split = doc1.text().split("_labels = "); + for (int i = 0; i < split.length; i++) { + if (split[i].startsWith("[")) { + split[i] = split[i].substring(0, split[i].indexOf(";")).replace("[", "").replace("]", "").replace("\"", ""); + if (split[i].startsWith("region")) addClasses(classes, split[i].split(",")); + else array.add(getFilter(split[i].split(","))); + } + } + for (Class type : classes) filters.put(type.getTypeId(), array); + Document doc2 = Jsoup.parse(OkHttpUtil.string(listUrl, getHeaders())); + for (Element element : doc2.select("div.lpic > ul > li")) { + String id = element.select("a").attr("href").split("/")[2]; + String name = element.select("h2").text(); + String pic = "https:".concat(element.select("a > img").attr("src")); + String remarks = element.select("span > font").text(); + remarks = remarks.contains(":") ? remarks.split(" ")[1] : remarks; + list.add(new Vod(id, name, pic, remarks)); + } + return Result.string(classes, list, filters); + } + + @Override + public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { + List list = new ArrayList<>(); + StringBuilder sb = new StringBuilder(); + sb.append("?pagesize=24&pageindex=").append(Integer.parseInt(pg) - 1); + if (!tid.equals("全部")) sb.append("®ion=").append(tid); + checkExtend(sb, extend, "genre"); + checkExtend(sb, extend, "letter"); + checkExtend(sb, extend, "year"); + checkExtend(sb, extend, "season"); + checkExtend(sb, extend, "status"); + checkExtend(sb, extend, "label"); + checkExtend(sb, extend, "resource"); + checkExtend(sb, extend, "order"); + Document doc = Jsoup.parse(OkHttpUtil.string(listUrl.concat(sb.toString()), getHeaders())); + for (Element element : doc.select("div.lpic > ul > li")) { + String id = element.select("a").attr("href").split("/")[2]; + String name = element.select("h2").text(); + String pic = "https:".concat(element.select("a > img").attr("src")); + String remarks = element.select("span > font").text(); + remarks = remarks.contains(":") ? remarks.split(" ")[1] : remarks; + list.add(new Vod(id, name, pic, remarks)); + } + return Result.string(list); + } + + @Override + public String detailContent(List ids) { + Document doc = Jsoup.parse(OkHttpUtil.string(showUrl.concat(ids.get(0)), getHeaders())); + String name = doc.select("div.rate > h1").text(); + String pic = "https:".concat(doc.select("div.thumb > img").attr("src")); + String content = doc.select("div.info").text(); + Elements element = doc.select("div.sinfo > span > a"); + + Vod vod = new Vod(); + vod.setVodId(ids.get(0)); + vod.setVodName(name); + vod.setVodPic(pic); + vod.setVodContent(content); + vod.setVodArea(element.get(1).text()); + vod.setVodYear(element.get(0).text()); + vod.setTypeName(element.get(2).text()); + + Map sites = new LinkedHashMap<>(); + Elements sources = doc.select("ul.menu0 > li"); + Elements sourceList = doc.select("div.main0 > div"); + for (int i = 0; i < sources.size(); i++) { + Element source = sources.get(i); + String sourceName = source.text(); + Elements playList = sourceList.get(i).select("a"); + List vodItems = new ArrayList<>(); + for (int j = 0; j < playList.size(); j++) { + Element e = playList.get(j); + vodItems.add(Trans.get(e.text()) + "$" + e.attr("href")); + } + if (vodItems.size() > 0) { + sites.put(sourceName, TextUtils.join("#", vodItems)); + } + } + if (sites.size() > 0) { + vod.setVodPlayFrom(TextUtils.join("$$$", sites.keySet())); + vod.setVodPlayUrl(TextUtils.join("$$$", sites.values())); + } + return Result.string(vod); + } + + @Override + public String searchContent(String key, boolean quick) { + List list = new ArrayList<>(); + String target = siteUrl + "/s_all?ex=1&kw=" + URLEncoder.encode(key); + Document doc = Jsoup.parse(OkHttpUtil.string(target, getHeaders())); + for (Element element : doc.select("div.lpic > ul > li")) { + String id = element.select("a").attr("href").split("/")[2]; + String name = element.select("h2").text(); + String pic = "https:".concat(element.select("a > img").attr("src")); + String remarks = element.select("span > font").text(); + remarks = remarks.contains(":") ? remarks.split(" ")[1] : remarks; + list.add(new Vod(id, name, pic, remarks)); + } + return Result.string(list); + } + + @Override + public String playerContent(String flag, String id, List vipFlags) { + return Result.get().url(siteUrl + id).parse().header(getHeaders()).string(); + } +} diff --git a/app/src/main/java/com/github/catvod/spider/Ysj.java b/app/src/main/java/com/github/catvod/spider/Ysj.java index b896ab8d..ed5d5542 100644 --- a/app/src/main/java/com/github/catvod/spider/Ysj.java +++ b/app/src/main/java/com/github/catvod/spider/Ysj.java @@ -38,7 +38,7 @@ public class Ysj extends Spider { return headers; } - private Filter addFilter(String name, String key, List texts) { + private Filter getFilter(String name, String key, List texts) { List values = new ArrayList<>(); for (String text : texts) { if (text.isEmpty()) continue; @@ -49,15 +49,15 @@ public class Ysj extends Spider { @Override public String homeContent(boolean filter) { - LinkedHashMap> filters = new LinkedHashMap<>(); + List list = new ArrayList<>(); List classes = new ArrayList<>(); List array = new ArrayList<>(); - List list = new ArrayList<>(); + LinkedHashMap> filters = new LinkedHashMap<>(); Document doc = Jsoup.parse(OkHttpUtil.string(homeUrl, getHeaders())); - array.add(addFilter("地區", "area", doc.select("div#hl03").select("a").eachText())); - array.add(addFilter("年份", "year", doc.select("div#hl04").select("a").eachText())); - array.add(addFilter("語言", "lang", doc.select("div#hl05").select("a").eachText())); - array.add(addFilter("字母", "letter", doc.select("div#hl06").select("a").eachText())); + array.add(getFilter("地區", "area", doc.select("div#hl03").select("a").eachText())); + array.add(getFilter("年份", "year", doc.select("div#hl04").select("a").eachText())); + array.add(getFilter("語言", "lang", doc.select("div#hl05").select("a").eachText())); + array.add(getFilter("字母", "letter", doc.select("div#hl06").select("a").eachText())); for (Element element : doc.select("div#hl02").select("a")) { String typeId = element.attr("href").split("/")[5]; typeId = typeId.contains(".html") ? "" : typeId; @@ -119,7 +119,7 @@ public class Ysj extends Spider { vod.setVodActor(actor); vod.setVodContent(content); vod.setVodDirector(director); - vod.setVodName(type); + vod.setTypeName(type); Map sites = new LinkedHashMap<>(); Elements sources = doc.select("div.play_source_tab > a"); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index b7829ef9..f16d70df 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index d0ebaa00..e1287552 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -80948ea66592b950a4c231de11ebaf78 +f56657fee19cd217607a458809c350b4