From cc090a5fe30f6c9fccab66b57197457c87a8ce82 Mon Sep 17 00:00:00 2001
From: lushunming <1357197829@qq.com>
Date: Mon, 5 Aug 2024 14:29:31 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BD=8E=E7=AB=AF=E5=BD=B1=E8=A7=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/github/catvod/spider/Ddrk.java | 429 ++++++++++++++++++
app/src/test/java/DdrkTest.java | 99 ++++
jar/custom_spider.jar | Bin 346623 -> 349382 bytes
jar/custom_spider.jar.md5 | 2 +-
json/index.json | 10 +-
5 files changed, 538 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/com/github/catvod/spider/Ddrk.java
create mode 100644 app/src/test/java/DdrkTest.java
diff --git a/app/src/main/java/com/github/catvod/spider/Ddrk.java b/app/src/main/java/com/github/catvod/spider/Ddrk.java
new file mode 100644
index 00000000..889cef14
--- /dev/null
+++ b/app/src/main/java/com/github/catvod/spider/Ddrk.java
@@ -0,0 +1,429 @@
+package com.github.catvod.spider;
+
+import android.text.TextUtils;
+
+import com.github.catvod.bean.Class;
+import com.github.catvod.bean.Result;
+import com.github.catvod.bean.Vod;
+import com.github.catvod.crawler.Spider;
+import com.github.catvod.crawler.SpiderDebug;
+import com.github.catvod.net.OkHttp;
+import com.github.catvod.utils.Util;
+
+import org.json.JSONArray;
+import org.json.JSONObject;
+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.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Demo for self study
+ *
+ * Source from Author: CatVod
+ */
+
+public class Ddrk extends Spider {
+
+ private static final String siteUrl = "https://ddys.pro";
+ private static final String siteHost = "ddys.pro";
+
+ protected JSONObject filterConfig;
+
+ protected Pattern regexCategory = Pattern.compile("/category/(\\S+)/");
+ protected Pattern regexVid = Pattern.compile("https://ddys.pro/(\\S+)/");
+
+ protected Pattern regexPage = Pattern.compile("\\S+/page/(\\S+)\\S+");
+ protected Pattern m = Pattern.compile("\\S+(http\\S+g)");
+ protected Pattern mark = Pattern.compile("\\S+(.*)");
+
+ // protected Pattern t = Pattern.compile("(\\S+)");
+
+
+ /**
+ * 爬虫headers
+ *
+ * @param url
+ * @return
+ */
+ protected HashMap getHeaders(String url) {
+ HashMap headers = new HashMap<>();
+ headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.62 Safari/537.36");
+ headers.put("Referer", siteUrl);
+ return headers;
+ }
+
+ protected static HashMap Headers() {
+ HashMap headers = new HashMap<>();
+ headers.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36");
+ headers.put("Referer", siteUrl);
+ return headers;
+ }
+
+ /**
+ * 获取分类数据 + 首页最近更新视频列表数据
+ *
+ * @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关
+ * @return
+ */
+ @Override
+ public String homeContent(boolean filter) {
+
+ List vods = new ArrayList<>();
+ String url = siteUrl + '/';
+ Document doc = Jsoup.parse(OkHttp.string(url, getHeaders(url)));
+ Elements elements = doc.select("li.menu-item a");
+ List classes = new ArrayList<>();
+ ArrayList allClass = new ArrayList<>();
+ for (Element ele : elements) {
+ String name = ele.attr("title");
+ boolean show = !filter || (name.equals("热映中") || name.equals("欧美剧") || name.equals("日剧") || name.equals("韩剧") || name.equals("华语剧") || name.equals("其他地区") || name.equals("全部") || name.equals("欧美电影") || name.equals("日韩电影") || name.equals("华语电影") || name.equals("新番") || name.equals("动画") || name.equals("纪录片") || name.equals("综艺"));
+ if (allClass.contains(name)) show = false;
+ if (show) {
+ allClass.add(name);
+ Matcher mather = regexCategory.matcher(ele.attr("href"));
+ if (!mather.find()) continue;
+ // 把分类的id和名称取出来加到列表里
+ String id = mather.group(1).trim();
+
+ classes.add(new Class(id, name));
+ }
+ }
+
+
+ // 取首页推荐视频列表
+ Elements list = doc.select("div.post-box-container");
+
+ for (int i = 0; i < list.size(); i++) {
+ Element vod = list.get(i);
+ String title = vod.selectFirst(".post-box-title > a").text();
+ String id = vod.selectFirst(".post-box-title > a").attr("href");
+ String imageHtml = vod.selectFirst("div.post-box-image").attr("style");
+ String image = "";
+ String regex = "url\\((.*?)\\)";
+
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(imageHtml);
+ if (matcher.find()) {
+ image = matcher.group(1);
+ }
+ vods.add(new Vod(id, title, image));
+ }
+
+
+ return Result.string(classes, vods, filterConfig);
+ }
+
+
+ /**
+ * 获取分类信息数据
+ *
+ * @param tid 分类id
+ * @param pg 页数
+ * @param filter 同homeContent方法中的filter
+ * @param extend 筛选参数{k:v, k1:v1}
+ * @return
+ */
+ @Override
+ public String categoryContent(String tid, String pg, boolean filter, HashMap extend) {
+ String url = "";
+ try {
+ if (extend != null && extend.size() > 0) {
+ for (Iterator it = extend.keySet().iterator(); it.hasNext(); ) {
+ String key = it.next();
+ String value = extend.get(key);
+ if (value != null && value.length() != 0 && value != " ") {
+ url = siteUrl + "/category/" + tid + "/" + value;
+ } else {
+ url = siteUrl + "/category/" + tid;
+ }
+ ;
+ }
+ } else {
+ url = siteUrl + "/category/" + tid;
+ }
+ ;
+ if (pg.equals("1")) {
+ url = url + "/";
+ } else {
+ url = url + "/page/" + pg + "/";
+ }
+ //System.out.println(url);
+ String html = OkHttp.string(url, getHeaders(url));
+ Document doc = Jsoup.parse(html);
+ JSONObject result = new JSONObject();
+ int pageCount = 0;
+ int page = -1;
+
+ // 取页码相关信息
+ Elements pageInfo = doc.select("div.nav-links");
+ if (pageInfo.size() == 0) {
+ page = Integer.parseInt(pg);
+ pageCount = page;
+ } else {
+ for (int i = 0; i < pageInfo.size(); i++) {
+ Element li = pageInfo.get(i);
+ Element a = li.selectFirst("a");
+ if (a == null) continue;
+ String wy = doc.select("div.nav-links a").last().attr("href");
+ String span = doc.select("span.current").text().trim();
+ if (page == -1) {
+ page = Integer.parseInt(span);
+ } else {
+
+ page = 0;
+ }
+ Matcher matcher = regexPage.matcher(wy);
+ if (matcher.find()) {
+ //System.out.println("尾页" + matcher.group(1));
+ pageCount = Integer.parseInt(matcher.group(1));
+ } else {
+ pageCount = 0;
+ }
+ break;
+ }
+ }
+
+ JSONArray videos = new JSONArray();
+ if (!html.contains("没有找到您想要的结果哦")) {
+ // 取当前分类页的视频列表
+ Elements list = doc.select("div.post-box-container");
+ for (int i = 0; i < list.size(); i++) {
+ Element vod = list.get(i);
+ String a = vod.selectFirst(".post-box-title a").text();
+ if (a.contains("(")) {
+ String[] item = a.split("\\(");
+ String title = item[0];
+ String remark = item[1].replace(")", "");
+ String cover = doReplaceRegex(m, vod.selectFirst(".post-box-image").attr("style"));
+
+ String id = vod.selectFirst(".post-box-title a").attr("href");
+ JSONObject v = new JSONObject();
+ v.put("vod_id", id);
+ v.put("vod_name", title);
+ v.put("vod_pic", cover);
+ v.put("vod_remarks", remark);
+ videos.put(v);
+ } else {
+ String title = a;
+ String cover = doReplaceRegex(m, vod.selectFirst(".post-box-image").attr("style"));
+ String remark = doReplaceRegex(mark, vod.selectFirst(".post-box-title a").text());
+ Matcher matcher = regexVid.matcher(vod.selectFirst(".post-box-title a").attr("href"));
+ if (!matcher.find()) continue;
+ String id = matcher.group(1);
+ JSONObject v = new JSONObject();
+ v.put("vod_id", id);
+ v.put("vod_name", title);
+ v.put("vod_pic", cover);
+ v.put("vod_remarks", remark);
+ videos.put(v);
+ }
+ }
+ }
+ result.put("page", page);
+ result.put("pagecount", pageCount);
+ result.put("limit", 24);
+ result.put("total", pageCount <= 1 ? videos.length() : pageCount * 24);
+
+ result.put("list", videos);
+ return result.toString();
+ } catch (Exception e) {
+ SpiderDebug.log(e);
+ }
+ return "";
+ }
+
+ /**
+ * 视频详情信息
+ *
+ * @param ids 视频id
+ * @return
+ */
+ @Override
+ public String detailContent(List ids) {
+ try {
+ // 视频详情url
+ String url = ids.get(0);
+ Document doc = Jsoup.parse(OkHttp.string(url, getHeaders(url)));
+ JSONObject result = new JSONObject();
+ JSONObject vodList = new JSONObject();
+
+ // 取基本数据
+ String cover = doc.select("div.post img").attr("src");
+ String ab = doc.select("h1.post-title").text();
+ if (ab.contains("(")) {
+ String[] b = ab.split("\\(");
+ String title = b[0];
+ String remark = b[1].replace("(", "");
+ vodList.put("vod_name", title);
+ vodList.put("vod_remarks", remark);
+ } else {
+ vodList.put("vod_name", ab);
+ String remark = doc.select("time").text().trim();
+ vodList.put("vod_remarks", "全");
+ }
+ String str2 = doc.select("div.abstract").text().replace(" ", "");
+ String replace = str2.replace("
", "");
+ String text = replace.replace("", "");
+ Pattern categorys = Pattern.compile("类型:(.*)制");
+ String category = doReplaceRegex(categorys, text);
+ Pattern a = Pattern.compile("年份:(.*)简");
+ String year = doReplaceRegex(a, text);
+ Pattern b = Pattern.compile("地区:(.*)年份");
+ String area = doReplaceRegex(b, text);
+ Pattern c = Pattern.compile("演员:(.*)类");
+ String actor = doReplaceRegex(c, text);
+ Pattern d = Pattern.compile("导演:(.*)演");
+ String director = doReplaceRegex(d, text);
+ Pattern e = Pattern.compile("简介:(.*)");
+ String desc = doReplaceRegex(e, text);
+
+
+ vodList.put("vod_id", ids.get(0));
+ vodList.put("vod_pic", cover);
+ vodList.put("type_name", category);
+ vodList.put("vod_year", year);
+ vodList.put("vod_area", area);
+ vodList.put("vod_actor", actor);
+ vodList.put("vod_director", director);
+ vodList.put("vod_content", desc);
+
+ List vodItems = new ArrayList<>();
+ List vodItems2 = new ArrayList<>();
+ Map vod_play = new LinkedHashMap<>();
+
+ Elements allScript = doc.select(".wp-playlist-script");
+ String sourceName = "第1季";
+ for (int j = 0; j < allScript.size(); j++) {
+ String scContent = allScript.get(j).html().trim();
+ int start = scContent.indexOf('{');
+ int end = scContent.lastIndexOf('}') + 1;
+ String json = scContent.substring(start, end);
+ JSONObject UJson = new JSONObject(json);
+ JSONArray Track = UJson.getJSONArray("tracks");
+ for (int k = 0; k < Track.length(); k++) {
+ JSONObject src = Track.getJSONObject(k);
+ String adk = src.getString("src1");
+ String vodName = src.getString("caption");
+ String playURL = siteUrl + "/getvddr/video?id=" + adk + "&type=mix";
+ String zm = siteUrl + "/subddr/" + src.getString("subsrc");
+ String pzm = playURL + "|" + zm;
+ vodItems.add(vodName + "$" + pzm);
+ }
+ vod_play.put(sourceName, TextUtils.join("#", vodItems));
+ }
+ Elements sources = doc.select(".post-page-numbers");
+ if (!sources.isEmpty()) for (int i = 0; i < sources.size(); i++) {
+ Element source = sources.get(i);
+ sourceName = "第" + source.text() + "季";
+ String Purl = siteUrl + "/" + ids.get(0) + "/" + source.text() + "/";
+ Document docs = Jsoup.parse(OkHttp.string(Purl, getHeaders(Purl)));
+ Elements allScripts = docs.select(".wp-playlist-script");
+ for (int j = 0; j < allScripts.size(); j++) {
+ String scContent = allScripts.get(j).html().trim();
+ int start = scContent.indexOf('{');
+ int end = scContent.lastIndexOf('}') + 1;
+ String json = scContent.substring(start, end);
+ JSONObject UJson = new JSONObject(json);
+ JSONArray Track = UJson.getJSONArray("tracks");
+ for (int k = 0; k < Track.length(); k++) {
+ JSONObject src = Track.getJSONObject(k);
+ String adk = src.getString("src1");
+ String vodName = src.getString("caption");
+ String playURL = siteUrl + "/getvddr/video?id=" + adk + "&type=mix";
+ String zm = siteUrl + "/subddr/" + src.getString("subsrc");
+ String pzm = playURL + "|" + zm;
+ vodItems2.add(vodName + "$" + pzm);
+ }
+ vod_play.put(sourceName, TextUtils.join("#", vodItems2));
+ }
+ vodItems2.removeAll(vodItems2);
+ }
+
+ String vod_play_from = TextUtils.join("$$$", vod_play.keySet());
+ String vod_play_url = TextUtils.join("$$$", vod_play.values());
+ vodList.put("vod_play_from", vod_play_from);
+ vodList.put("vod_play_url", vod_play_url);
+
+ JSONArray list = new JSONArray();
+ list.put(vodList);
+ result.put("list", list);
+ return result.toString();
+
+ } catch (Exception e) {
+ SpiderDebug.log(e);
+ }
+ return "";
+ }
+
+
+ /**
+ * 获取视频播放信息
+ *
+ * @param flag 播放源
+ * @param id 视频id
+ * @param vipFlags 所有可能需要vip解析的源
+ * @return
+ */
+ @Override
+ public String playerContent(String flag, String id, List vipFlags) {
+
+ String[] item = id.split("\\|");
+ String playUrl = item[0];
+ String ZiMu = item[1];
+
+ String content = OkHttp.string(playUrl, getHeaders(playUrl));
+
+ String RealUrl = "";
+ String regex = "\"src0\":\"(.*?)\",";
+
+ Pattern pattern = Pattern.compile(regex);
+ Matcher matcher = pattern.matcher(content);
+ if (matcher.find()) {
+ RealUrl = matcher.group(1);
+ }
+
+ return Result.get().url(siteUrl + RealUrl.replace("\\/", "/")).header(Headers()).string();
+ }
+
+
+ @Override
+ public String searchContent(String key, boolean quick) {
+
+ String url = "https://ddys.pro/?s=" + URLEncoder.encode(key) + "&post_type=post";
+ Document doc = Jsoup.parse(OkHttp.string(url, getHeaders(url)));
+ List vods = new ArrayList<>();
+ Elements elements = doc.select("h2.post-title > a");
+ for (int i = 0; i < elements.size(); i++) {
+ String id = elements.get(i).attr("href");
+ String name = elements.get(i).text();
+ vods.add(new Vod(id, name, ""));
+ }
+ return Result.string(vods);
+ }
+
+ private static String doReplaceRegex(Pattern pattern, String src) {
+ if (pattern == null) return src;
+ try {
+ Matcher matcher = pattern.matcher(src);
+ if (matcher.find()) {
+ return matcher.group(1).trim();
+ }
+ } catch (Exception e) {
+ SpiderDebug.log(e);
+ }
+ return src;
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/test/java/DdrkTest.java b/app/src/test/java/DdrkTest.java
new file mode 100644
index 00000000..7b11c1e7
--- /dev/null
+++ b/app/src/test/java/DdrkTest.java
@@ -0,0 +1,99 @@
+import android.app.Application;
+
+import com.github.catvod.spider.Ddrk;
+import com.github.catvod.spider.HkTv;
+import com.github.catvod.spider.Init;
+import com.github.catvod.utils.Json;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+
+import org.junit.Assert;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+@RunWith(RobolectricTestRunner.class)
+public class DdrkTest {
+ // @Mock
+ private Application mockContext;
+
+ private Ddrk spider;
+
+ @org.junit.Before
+ public void setUp() throws Exception {
+ mockContext = RuntimeEnvironment.application;
+ Init.init(mockContext);
+ spider = new Ddrk();
+ spider.init(mockContext, "");
+ }
+
+ @org.junit.Test
+ public void homeContent() throws Exception {
+ String content = spider.homeContent(true);
+ JsonObject map = Json.safeObject(content);
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+
+ System.out.println("homeContent--" + gson.toJson(map));
+
+ //Assert.assertFalse(map.getAsJsonArray("list").isEmpty());
+ }
+
+ @org.junit.Test
+ public void homeVideoContent() throws Exception {
+ String content = spider.homeVideoContent();
+ JsonObject map = Json.safeObject(content);
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+
+ System.out.println("homeVideoContent--" + gson.toJson(map));
+
+ //Assert.assertFalse(map.getAsJsonArray("list").isEmpty());
+ }
+
+ @org.junit.Test
+ public void categoryContent() throws Exception {
+ String content = spider.categoryContent("drama/western-drama", "2", true, null);
+ JsonObject map = Json.safeObject(content);
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ System.out.println("categoryContent--" + gson.toJson(map));
+ Assert.assertFalse(map.getAsJsonArray("list").isEmpty());
+ }
+
+ @org.junit.Test
+ public void detailContent() throws Exception {
+
+ String content = spider.detailContent(Arrays.asList("https://ddys.pro/the-fable/"));
+ JsonObject map = Json.safeObject(content);
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ System.out.println("detailContent--" + gson.toJson(map));
+ Assert.assertFalse(map.getAsJsonArray("list").isEmpty());
+ }
+
+ @org.junit.Test
+ public void playerContent() throws Exception {
+ String froms = "第1季";
+ String urls = "第01集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfOrVlYXtr0IrFW8lVeTT91H%2BUSu5z72Gkx6JAGA8EXlJLvetAfVTXXDhxuKCGJ6Q3Ngws821BcBwndpb%2B2GPjbo%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E01.ddr#第02集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfML0vn1KlTxF0sG%2BEHO21R1cpLbSt%2BXLLxl1R4ROccMqgxKrfB%2BNEqcywjLdgdnFeNOYu8Jp86q1LceYrzyfRNA%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E02.ddr#第03集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfLSbJjBcNaYf0d9KYtSt4Dc4guy5jGVmk1NGoRUN%2FTKNo3wIPi9zaht0T3iaVrIG9aowYlrg4M3ZhF5tpKa5a3Q%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E03.ddr#第04集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfOhtDTTFt4SsSqDAXc29K%2FjRaWjRW4rFJYEkL3dGQ8lunDdVoVDCdwLM3MRdkE5GKZiwJnFV4yokt%2FJTlu6W9B0%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E04.ddr#第05集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfOekWLffYiwPueR2d%2F2jlsdoB2MFrn7KZ7RZxnTO2Cl79FQ6JxdhLFZVKQMUfXjl61OPbX6mB2pwuMC8EZDTZM0%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E05.ddr#第06集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfBlB%2BSpxUCnlGPrINcu%2F1SBXw9E48vZepi2rbznJEL%2B7KaG%2FemNxcMt6i2tonlv%2Fj7Yiciu6%2FJp%2FnYHm9azBMMg%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E06.ddr#第07集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfA3oc9ABVnVTvqzAM188IauJwfyfj0mjiLGQipukzelI2Q3Wr%2F8jwBx1eB8yXqjb8GyGOSE4HjylzNNZEeNIPOE%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E07.ddr#第08集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfJOKQJ6QC7TwGBw%2B7XCHqWtRHmOW78EwIA2WdpWoLK6LZMorbbBF7F8CY0%2F8%2BybxkKutVTxcbwJHLYeq5KfaWXE%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E08.ddr#第09集$https://ddys.pro/getvddr/video?id\u003dKqivU7FCez3AzaByqNMjDfGnF9itLkgWcRnE0NAeMTe7Z8DVPXWR%2FJvYQBGf52fOhv3jBlQ5LihxM6O5JO%2FANOmvP8XvKojMNTHvRaasviQ%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E09.ddr#第10集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfFuxdVAN%2F0ZWpHmPYouX2tGpQafvtO9opv55jVEdqxgnUQwDcXdACwZgP4oMbk0O41aQjab0YOv7F6a2%2BcyCxfk%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E10.ddr#第11集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfB7AzCUzGnvni8EaQgDUAeruvMOEP%2By29vrNL0bgRjV9I4o2IIifgYqTV8EVqhjFogonUNDLNcMFJ5w408hLH3k%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E11.ddr#第12集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfNEKVB%2FplZ4P8g2xyropO3Y344w4x0tjIUr6ZONvPl8QALRIdahfpQFpp5qbK4ufOGYGLHq6zXREpfmhWe0HAkI%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E12.ddr#第13集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfBFMTt9r5WqhZpmc4QQgU0iRjSqc8YQDAEEFCzIar44C%2FwGy4p9PfsBWfynJpu42%2BRv4DgCcpqB%2BXLsv8X24NDQ%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E13.ddr#第14集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfNSmR2YMg3lNOPuwjam%2BOxI4BpWDMdwFRRHLh4PixAzLN5296mDjoA763gkjeEDNYsn6HIU597ge05ZI%2BgWizC8%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E14.ddr#第15集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfI4TiWm%2FCMVOWx2lxRgpl%2BVtwmPeyHyP%2FtdIdfekVgRV69u4HkYZYbLrCHFMLabFTSn3jdgVM5TyCIjypo9O%2F0E%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E15.ddr#第16集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfMieUkuUIEB34HJ4yRt0c18%2F%2BfEyUXCCGYReb9sKVXc8X%2FfcV1nHUDLMb9HeDSZSuf14zDDFEk9DHQNpUgvFa8A%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E16.ddr#第17集$https://ddys.pro/getvddr/video?id\u003dfBG%2Flj6cvF9dk4FfQ5csfKeqB9W4XjNkL%2FsKDi7jnfOhHRtJsT4E1o9nXo8o28wnphO1591NKKbPAWn8Sf%2FFcmrKbymYzH4wwwzlKCL1IQY%3D\u0026type\u003dmix|https://ddys.pro/subddr//v/Anime/The_Fable/The_Fable_S01E17.ddr";
+ for (int i = 0; i < urls.split("\\$\\$\\$").length; i++) {
+ for (int i1 = 0; i1 < urls.split("\\$\\$\\$")[i].split("#").length; i1++) {
+ String content = spider.playerContent(froms.split("\\$\\$\\$")[i], urls.split("\\$\\$\\$")[i].split("#")[i1].split("\\$")[1], new ArrayList<>());
+ JsonObject map = Json.safeObject(content);
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ System.out.println("playerContent--" + gson.toJson(map));
+ Assert.assertFalse(map.getAsJsonPrimitive("url").getAsString().isEmpty());
+ }
+
+ }
+ }
+
+ @org.junit.Test
+ public void searchContent() throws Exception {
+ String content = spider.searchContent("海", false);
+ JsonObject map = Json.safeObject(content);
+ Gson gson = new GsonBuilder().setPrettyPrinting().create();
+ System.out.println("searchContent--" + gson.toJson(map));
+ Assert.assertFalse(map.getAsJsonArray("list").isEmpty());
+ }
+}
\ No newline at end of file
diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar
index 8cfe4356bc99ef1b39801d65cdd753aa4a010e74..9a64445e48af451c374c3d690aa713eb659e4ec9 100644
GIT binary patch
literal 349382
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