diff --git a/app/src/main/java/com/github/catvod/spider/Hanime.java b/app/src/main/java/com/github/catvod/spider/Hanime.java new file mode 100644 index 00000000..35f22c6b --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/Hanime.java @@ -0,0 +1,136 @@ +package com.github.catvod.spider; + +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 org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +public class Hanime extends Spider { + + private static final String siteUrl = "https://hanime1.me"; + + private HashMap getHeaders() { + HashMap headers = new HashMap<>(); + headers.put("User-Agent", Misc.CHROME); + return headers; + } + + private Filter getFilter(String name, String key, List texts) { + List values = new ArrayList<>(); + if (!key.equals("by")) values.add(new Filter.Value("全部", "")); + for (String text : texts) { + if (text.isEmpty()) continue; + values.add(new Filter.Value(text)); + } + return new Filter(key, name, values); + } + + @Override + public String homeContent(boolean filter) throws Exception { + List list = new ArrayList<>(); + List classes = new ArrayList<>(); + LinkedHashMap> filters = new LinkedHashMap<>(); + Document doc1 = Jsoup.parse(OkHttpUtil.string(siteUrl.concat("/search?genre=裏番"), getHeaders())); + List sorts = doc1.select("div.hentai-sort-options").eachText(); + List years = doc1.getElementById("year").select("option").eachAttr("value"); + Document doc2 = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders())); + for (Element element : doc2.select("a.nav-item")) { + String text = element.text(); + if (text.equals("新番預告") || text.equals("H漫畫") || text.equals("我的清單")) continue; + classes.add(new Class(text)); + List array = new ArrayList<>(); + array.add(getFilter("排序", "by", sorts)); + array.add(getFilter("年份", "year", years)); + filters.put(text, array); + } + for (Element element : doc2.select("a")) { + if (element.attr("href").contains("watch")) { + String pic = element.select("div > img").attr("src"); + String url = element.attr("href"); + String name = element.select("div > div").text(); + String id = url.split("=")[1]; + if (name.contains("smart_display") || name.isEmpty()) continue; + list.add(new Vod(id, name, pic)); + } + } + return Result.string(classes, list, filters); + } + + @Override + public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { + List list = new ArrayList<>(); + if (extend.get("by") == null) extend.put("by", "最新上市"); + if (extend.get("year") == null) extend.put("year", ""); + String target = siteUrl.concat("/search?genre=").concat(tid).concat("&page=").concat(pg).concat("&sort=").concat(extend.get("by")).concat("&year=").concat(extend.get("year")); + Document doc = Jsoup.parse(OkHttpUtil.string(target, getHeaders())); + for (Element element : doc.select("div.col-xs-6")) { + String pic = element.select("div > a > div >img").get(1).attr("src"); + String url = element.select("div > div > div > a").attr("href"); + String name = element.select("div > div > div > a").text(); + String id = url.split("=")[1]; + list.add(new Vod(id, name, pic)); + } + if (list.isEmpty()) { + for (Element element : doc.select("a")) { + if (element.attr("href").contains("watch")) { + String pic = element.select("div > img").attr("src"); + String url = element.attr("href"); + String name = element.select("div > div").text(); + String id = url.split("=")[1]; + if (name.contains("smart_display")) continue; + list.add(new Vod(id, name, pic)); + } + } + } + return Result.string(list); + } + + @Override + public String detailContent(List ids) throws Exception { + Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl.concat("/watch?v=").concat(ids.get(0)), getHeaders())); + String name = doc.getElementById("shareBtn-title").text(); + String content = doc.getElementById("caption").text(); + String pic = doc.select("meta[property=og:image]").attr("content"); + String url = doc.getElementById("video-sd").attr("value"); + Vod vod = new Vod(); + vod.setVodId(ids.get(0)); + vod.setVodPic(pic); + vod.setVodName(name); + vod.setVodContent(content); + vod.setVodPlayFrom("Hanime1"); + vod.setVodPlayUrl("播放$" + url); + return Result.string(vod); + } + + @Override + public String searchContent(String key, boolean quick) throws Exception { + List list = new ArrayList<>(); + String target = siteUrl.concat("/search?query=").concat(key).concat("&genre=&sort=&year=&month=&duration="); + Document doc = Jsoup.parse(OkHttpUtil.string(target, getHeaders())); + for (Element element : doc.select("div.col-xs-6")) { + String pic = element.select("div > a > div >img").get(1).attr("src"); + String url = element.select("div > div > div > a").attr("href"); + String name = element.select("div > div > div > a").text(); + String id = url.split("=")[1]; + list.add(new Vod(id, name, pic)); + } + return Result.string(list); + } + + @Override + public String playerContent(String flag, String id, List vipFlags) throws Exception { + return Result.get().url(id).header(getHeaders()).string(); + } +} diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 67b7ee07..c23ce994 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 50cd994c..21ce6c0f 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -0064f03c02c06b3670e9f5a9d16f53dc +162ce0994f9fc538a13c2c8bd7fe2cf1 diff --git a/json/adult.json b/json/adult.json index 68ec8e60..93b1402e 100644 --- a/json/adult.json +++ b/json/adult.json @@ -1,5 +1,5 @@ { - "spider": "https://raw.githubusercontents.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;f56657fee19cd217607a458809c350b4", + "spider": "https://raw.githubusercontents.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;162ce0994f9fc538a13c2c8bd7fe2cf1", "sites": [ { "key": "AList", @@ -38,6 +38,15 @@ "searchable": 1, "filterable": 1 }, + { + "key": "Hanime", + "name": "Hanime", + "type": 1, + "api": "csp_Hanime", + "quickSearch": 1, + "searchable": 1, + "filterable": 1 + }, { "key": "madouse.la", "name": "成人01", diff --git a/json/config.json b/json/config.json index ff10c816..6d05acff 100644 --- a/json/config.json +++ b/json/config.json @@ -1,5 +1,5 @@ { - "spider": "https://raw.githubusercontents.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;f56657fee19cd217607a458809c350b4", + "spider": "https://raw.githubusercontents.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;162ce0994f9fc538a13c2c8bd7fe2cf1", "sites": [ { "key": "哔哩",