低端影视修复

This commit is contained in:
lushunming 2024-09-23 15:20:27 +08:00
parent 528d97ed9d
commit cdb2ed4561
7 changed files with 83 additions and 83 deletions

View File

@ -1,20 +1,17 @@
package com.github.catvod.spider;
import android.content.Context;
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.Json;
import com.github.catvod.utils.ProxyVideo;
import com.github.catvod.utils.Util;
import com.google.gson.JsonElement;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@ -25,9 +22,7 @@ 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;
@ -37,7 +32,7 @@ import java.util.regex.Pattern;
* Source from Author: CatVod
*/
public class Ddrk extends Spider {
public class Ddrk extends Cloud {
private static String siteUrl = "https://ddys.mov";
@ -53,6 +48,25 @@ public class Ddrk extends Spider {
// protected Pattern t = Pattern.compile("(\\S+)");
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;
}
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;
}
@Override
public void init(Context context, String extend) throws Exception {
@ -83,13 +97,6 @@ public class Ddrk extends Spider {
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;
}
/**
* 获取分类数据 + 首页最近更新视频列表数据
*
@ -144,7 +151,6 @@ public class Ddrk extends Spider {
return Result.string(classes, vods, filterConfig);
}
/**
* 获取分类信息数据
*
@ -167,12 +173,10 @@ public class Ddrk extends Spider {
} else {
url = siteUrl + "/category/" + tid;
}
;
}
} else {
url = siteUrl + "/category/" + tid;
}
;
if (pg.equals("1")) {
url = url + "/";
} else {
@ -317,60 +321,44 @@ public class Ddrk extends Spider {
vodList.put("vod_actor", actor);
vodList.put("vod_director", director);
vodList.put("vod_content", desc);
Vod.VodPlayBuilder builder = new Vod.VodPlayBuilder();
List<String> shareLinks = new ArrayList<>();
getVodDetail(doc, builder, "1");
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("src0");
String vodName = src.getString("caption");
String pzm = getPlayUrl(adk);
vodItems.add(vodName + "$" + pzm);
}
vod_play.put(sourceName, TextUtils.join("#", vodItems));
}
//多季剧集处理
Elements sources = doc.select(".post-page-numbers");
if (!sources.isEmpty()) {
for (Element source : sources) {
sourceName = "" + source.text() + "";
String Purl = siteUrl + "/" + ids.get(0) + "/" + source.text() + "/";
if (!source.select("a").isEmpty()) {
String Purl = source.select("a").attr("href");
Document docs = Jsoup.parse(OkHttp.string(Purl, getHeaders(Purl)));
Elements allScripts = docs.select(".wp-playlist-script");
for (Element script : allScripts) {
String scContent = script.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("src0");
String vodName = src.getString("caption");
String pzm = getPlayUrl(adk);
vodItems2.add(vodName + "$" + pzm);
getVodDetail(docs, builder, source.text());
}
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);
Elements clouds = doc.select("p > a");
if (!clouds.isEmpty()) {
for (Element cloud : clouds) {
String cloudUrl = cloud.attr("href");
if (!Util.findByRegex(Util.patternQuark, cloudUrl, 0).isBlank()) {
shareLinks.add(cloudUrl);
}
}
}
String quarkNames = "";
String quarkUrls = "";
if (!shareLinks.isEmpty()) {
quarkUrls = super.detailContentVodPlayUrl(shareLinks);
quarkNames = super.detailContentVodPlayFrom(shareLinks);
}
Vod.VodPlayBuilder.BuildResult buildResult = builder.build();
vodList.put("vod_play_from", buildResult.vodPlayFrom + "$$$" + quarkNames);
vodList.put("vod_play_url", buildResult.vodPlayUrl + "$$$" + quarkUrls);
JSONArray list = new JSONArray();
list.put(vodList);
@ -383,6 +371,30 @@ public class Ddrk extends Spider {
return "";
}
private void getVodDetail(Document doc, Vod.VodPlayBuilder builder, String index) throws JSONException {
Elements allScript = doc.select(".wp-playlist-script");
String sourceName = "" + index + "";
for (Element element : allScript) {
String scContent = element.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");
List<Vod.VodPlayBuilder.PlayUrl> list = new ArrayList<>();
for (int k = 0; k < Track.length(); k++) {
JSONObject src = Track.getJSONObject(k);
String adk = src.getString("src0");
String vodName = src.getString("caption");
String pzm = getPlayUrl(adk);
Vod.VodPlayBuilder.PlayUrl playUrl = new Vod.VodPlayBuilder.PlayUrl();
playUrl.name = vodName;
playUrl.url = ProxyVideo.buildCommonProxyUrl(pzm, Util.webHeaders(siteUrl));
list.add(playUrl);
}
builder.append(sourceName, list);
}
}
public String getPlayUrl(String source) {
if (source.endsWith("m3u8")) {
@ -407,7 +419,6 @@ public class Ddrk extends Spider {
return Result.get().url(ProxyVideo.buildCommonProxyUrl(id, Util.webHeaders(siteUrl))).string();
}
@Override
public String searchContent(String key, boolean quick) {
@ -423,18 +434,5 @@ public class Ddrk extends Spider {
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

@ -28,7 +28,9 @@ public class DdrkTest {
mockContext = RuntimeEnvironment.application;
Init.init(mockContext);
spider = new Ddrk();
spider.init(mockContext, " {\"site\":\"https://ddys.info/\"}");
spider.init(mockContext, "{\"site\":\"https://ddys.info/\" ,\"cookie\":\"b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; _UP_A4A_11_=wb9661c6dfb642f88f73d8e0c7edd398; b-user-id=89ede34e-0efc-e1dd-c997-f16aaa792d0c; ctoken=wla6p3EUOLyn1FSB8IKp1SEW; grey-id=5583e32b-39df-4bf0-f39f-1adf83f604a2; grey-id.sig=p8ReBIMG2BeZu1sYvsuOAZxYbx-MVrsfKEiCv87MsTM; isQuark=true; isQuark.sig=hUgqObykqFom5Y09bll94T1sS9abT1X-4Df_lzgl8nM; _UP_F7E_8D_=ZkyvVHnrBLp1A1NFJIjWi0PwKLOVbxJPcg0RzQPI6KmBtV6ZMgPh38l93pgubgHDQqhaZ2Sfc0qv%2BRantbfg1mWGAUpRMP4RqXP78Wvu%2FCfvkWWGc5NhCTV71tGOIGgDBR3%2Bu6%2Fjj44KlE5biSNDOWW7Bigcz27lvOTidzNw8s%2FWtKAIxWbnCzZn4%2FJMBUub1SIMcW89g57k4mfPmDlCgpZKzxwl6beSfdtZ4RUWXmZOn5v5NkxVKhU4wR0Pq7NklczEGdRq2nIAcu7v22Uw2o%2FxMY0xBdeC9Korm5%2FNHnxl6K%2Bd6FXSoT9a3XIMQO359auZPiZWzrNlZe%2BqnOahXcx7KAhQIRqSOapSmL4ygJor4r5isJhRuDoXy7vJAVuH%2FRDtEJJ8rZTq0BdC23Bz%2B0MrsdgbK%2BiW; _UP_D_=pc; __wpkreporterwid_=3d3f74a7-99b7-4916-3f78-911fc2eb9d87; tfstk=fIoZNxjnbhKwPOu0TWZ4LsaRqirTcudSSmNbnxD0C5VgClMm8xMyB-GsnSu4tjpOflAOmSD-9PNiGl120XrgkVNb1SrqHbJBN3tSBAEYoQOWVUUg9qZ8n1bGGkD3CqGYINKSBABhjnXgp3_Vywz6gSc0Syj3BWf0mr2DLW24eZfiiovEKWefj1q0swq3E82iNEMinMy7SLrcpA4Fh3z_ZAViCfih3PbtdW5N_DuU77AaTijmYRkL2Wq54ENoy5a7ZXxCbok33XzS7QSZgxD-oyoVsdGotql0p2dVu7umC4nLStbiLmParc4FELHrI-c0u2dPVRrs8zoZWKCnIbNZrlHfUCMUz2z8KyXVSlgSFmUojh58OzeqTzgwaGll4YCYKwctDV5coP2LL79eKHxpNTXHmre1kZU32JPWCR_AkP2LL79eLZQY-WeUNdw1.; __pus=2051c82285199d8be553be41dd5a2100AAQ+mmv35G4FDDZ5x+3Mhe2OMbNgweQ1ODbW8zDt9YuP1LQVqHUuAAz9KWLsPjpNtim0AVGHusN4MCosTmbq/khM; __kp=e6604120-6051-11ef-bfe4-c31b6cdd0766; __kps=AATcZArVgS76EPn0FMaV4HEj; __ktd=sii/iz4ePzEaoVirXul7QQ==; __uid=AATcZArVgS76EPn0FMaV4HEj; __itrace_wid=5829b95d-dac1-48d3-bfd5-f60cd9462786; __puus=7da0b96cb710fa1b376934485f977e05AATp/q8/QupT7IiBR1GWqZhxlIRT677smMvoHlLxQA0Lk6CkP0YJBOTl+p9DZgzlMz6w4hPXPgWsokukk8PW7ZfhFfPmv8tKMgLpCGLW+tk57luhNghmSdTeVPkAF59STtyCPBEtiNzNAd/zZJ6qILJDi5ywEBAAAg+gOyWHoLHNUR+QxeHRuQa8g5WWA95J8jebIlrr8rCvI1vjTbtiYktT\",\"token\":\"26fc6787afff43e78b78992e782502f1\"}");
}
@ -67,7 +69,7 @@ public class DdrkTest {
@org.junit.Test
public void detailContent() throws Exception {
String content = spider.detailContent(Arrays.asList("https://ddys.pro/the-fable/"));
String content = spider.detailContent(Arrays.asList("https://ddys.pro/dahmer-monster/"));
JsonObject map = Json.safeObject(content);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println("detailContent--" + gson.toJson(map));

Binary file not shown.

View File

@ -1 +1 @@
6b32420ea8da1560ff69f609769fc883
3414fbf0c21f59f02b3cf03a7473cabb

View File

@ -1,5 +1,5 @@
{
"spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;6b32420ea8da1560ff69f609769fc883",
"spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;3414fbf0c21f59f02b3cf03a7473cabb",
"lives": [
{
"name": "直播ipv6",

View File

@ -1,5 +1,5 @@
{
"spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;6b32420ea8da1560ff69f609769fc883",
"spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;3414fbf0c21f59f02b3cf03a7473cabb",
"lives": [
{
"name": "直播ipv6",

View File

@ -1,5 +1,5 @@
{
"spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;6b32420ea8da1560ff69f609769fc883",
"spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;3414fbf0c21f59f02b3cf03a7473cabb",
"lives": [
{
"name": "直播ipv6",