低端影视

This commit is contained in:
lushunming 2024-08-05 14:29:31 +08:00
parent d7141d287b
commit cc090a5fe3
5 changed files with 538 additions and 2 deletions

View File

@ -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
* <p>
* 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<String, String> getHeaders(String url) {
HashMap<String, String> 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<String, String> Headers() {
HashMap<String, String> 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<Vod> vods = new ArrayList<>();
String url = siteUrl + '/';
Document doc = Jsoup.parse(OkHttp.string(url, getHeaders(url)));
Elements elements = doc.select("li.menu-item a");
List<Class> classes = new ArrayList<>();
ArrayList<String> 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<String, String> extend) {
String url = "";
try {
if (extend != null && extend.size() > 0) {
for (Iterator<String> 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<String> 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("<br>", "");
String text = replace.replace("<p></p>", "");
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<String> vodItems = new ArrayList<>();
List<String> vodItems2 = new ArrayList<>();
Map<String, String> 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<String> 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<Vod> 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;
}
}

View File

@ -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());
}
}

Binary file not shown.

View File

@ -1 +1 @@
e3bc7843d766de40c20a38dd72c989cd
10c3ce1b9c5b8dd9f5d3ef1b88f42f19

View File

@ -1,5 +1,5 @@
{
"spider": "../jar/custom_spider.jar;md5;e3bc7843d766de40c20a38dd72c989cd",
"spider": "../jar/custom_spider.jar;md5;10c3ce1b9c5b8dd9f5d3ef1b88f42f19",
"lives": [
{
"name": "直播ipv6",
@ -127,6 +127,14 @@
"searchable": 1,
"filterable": 0,
"ext": "https://www.libvio.app"
}, {
"key": "Ddrk",
"name": "低端影视",
"type": 3,
"api": "csp_Ddrk",
"searchable": 1,
"filterable": 0
},
{
"key": "Ysj",