diff --git a/app/src/main/java/com/github/catvod/spider/Ddrk.java b/app/src/main/java/com/github/catvod/spider/Ddrk.java index 25a1fe5d..500e21e4 100644 --- a/app/src/main/java/com/github/catvod/spider/Ddrk.java +++ b/app/src/main/java/com/github/catvod/spider/Ddrk.java @@ -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 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; + } + + 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 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; - } - /** * 获取分类数据 + 首页最近更新视频列表数据 * @@ -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 shareLinks = new ArrayList<>(); + getVodDetail(doc, builder, "1"); - 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("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() + "/"; - 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); - } - vod_play.put(sourceName, TextUtils.join("#", vodItems2)); + if (!source.select("a").isEmpty()) { + + String Purl = source.select("a").attr("href"); + Document docs = Jsoup.parse(OkHttp.string(Purl, getHeaders(Purl))); + getVodDetail(docs, builder, source.text()); } - 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 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; - } - } \ No newline at end of file diff --git a/app/src/test/java/DdrkTest.java b/app/src/test/java/DdrkTest.java index 2c6c9cb3..88c72d27 100644 --- a/app/src/test/java/DdrkTest.java +++ b/app/src/test/java/DdrkTest.java @@ -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)); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index e1ed3803..4a268337 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 d651b012..e3d5a20c 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -6b32420ea8da1560ff69f609769fc883 +3414fbf0c21f59f02b3cf03a7473cabb diff --git a/json/index.json b/json/index.json index e23a98ae..80884ff1 100644 --- a/json/index.json +++ b/json/index.json @@ -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", diff --git a/json/index1.json b/json/index1.json index 56362dd4..08ee33be 100644 --- a/json/index1.json +++ b/json/index1.json @@ -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", diff --git a/json/index2.json b/json/index2.json index 58ff527f..e3bdd14c 100644 --- a/json/index2.json +++ b/json/index2.json @@ -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",