diff --git a/app/src/main/java/com/github/catvod/spider/Libvio.java b/app/src/main/java/com/github/catvod/spider/Libvio.java index b1108b58..40334934 100644 --- a/app/src/main/java/com/github/catvod/spider/Libvio.java +++ b/app/src/main/java/com/github/catvod/spider/Libvio.java @@ -8,8 +8,10 @@ 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.Util; +import com.google.gson.JsonElement; import org.json.JSONObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -25,9 +27,9 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class Libvio extends Spider { +public class Libvio extends Cloud { - private static String siteUrl = ""; + private static String siteUrl = "https://www.libvio.link/"; private static final String MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36"; @@ -49,10 +51,16 @@ public class Libvio extends Spider { @Override public void init(Context context, String extend) throws Exception { + JsonElement json = Json.parse(extend); super.init(context, extend); - String html = OkHttp.string(extend); + String html = OkHttp.string(json.getAsJsonObject().get("site").getAsString()); Document doc = Jsoup.parse(html); - siteUrl = doc.select("#all > div > div > div > div > ul > li > a:nth-child(2)").attr("href"); + for (Element element : doc.select(" a")) { + if (element.text().contains("可用")) { + siteUrl = element.attr("href"); + break; + } + } SpiderDebug.log("libvio跳转地址 =====>" + siteUrl); // js_debug.log } @@ -140,40 +148,55 @@ public class Libvio extends Spider { // 播放源 Elements tabs = doc.select("div.stui-vodlist__head > div > h3"); Elements list = doc.select("div.stui-vodlist__head > ul.stui-content__playlist "); - String PlayFrom = ""; - String PlayUrl = ""; + + Vod.VodPlayBuilder builder = new Vod.VodPlayBuilder(); + List quarkList = new ArrayList<>(); for (int i = 0; i < tabs.size(); i++) { + List playUrls = new ArrayList<>(); + String tabName = tabs.get(i).text(); - if (tabName.contains("夸克")) { - continue; - } - if (!"".equals(PlayFrom)) { - PlayFrom = PlayFrom + "$$$" + tabName; - } else { - PlayFrom = PlayFrom + tabName; - } + Elements li = list.get(i).select("a"); - String liUrl = ""; - for (int i1 = 0; i1 < li.size(); i1++) { - if (!"".equals(liUrl)) { - liUrl = liUrl + "#" + li.get(i1).text() + "$" + li.get(i1).attr("href").replace("/play/", ""); + for (Element element : li) { + if (tabName.contains("夸克")) { + quarkList.add(element.attr("href")); } else { - liUrl = liUrl + li.get(i1).text() + "$" + li.get(i1).attr("href").replace("/play/", ""); + Vod.VodPlayBuilder.PlayUrl playUrl = new Vod.VodPlayBuilder.PlayUrl(); + playUrl.name = element.text(); + playUrl.url = element.attr("href").replace("/play/", ""); + playUrls.add(playUrl); } + } - if (!"".equals(PlayUrl)) { - PlayUrl = PlayUrl + "$$$" + liUrl; - } else { - PlayUrl = PlayUrl + liUrl; + if (!tabName.contains("夸克")) { + builder.append(tabName, playUrls); } } + List shareLinks = new ArrayList<>(); + String quarkNames = ""; + String quarkUrls = ""; + + if (!quarkList.isEmpty()) { + for (String s : quarkList) { + Document detailPageDoc = Jsoup.parse(OkHttp.string(siteUrl.concat(s), getHeaders())); + Matcher matcher = Pattern.compile("player_aaaa=(.*?)").matcher(detailPageDoc.html()); + String json = matcher.find() ? matcher.group(1) : ""; + org.json.JSONObject player = new JSONObject(json); + String url = player.getString("url"); + shareLinks.add(url); + } + quarkUrls = super.detailContentVodPlayUrl(shareLinks); + quarkNames = super.detailContentVodPlayFrom(shareLinks); + } + + Vod.VodPlayBuilder.BuildResult result = builder.build(); Vod vod = new Vod(); vod.setVodId(ids.get(0)); vod.setVodPic(siteUrl + pic); vod.setVodName(name); - vod.setVodPlayFrom(PlayFrom); - vod.setVodPlayUrl(PlayUrl); + vod.setVodPlayFrom(result.vodPlayFrom + "$$$" + quarkNames); + vod.setVodPlayUrl(result.vodPlayUrl + "$$$" + quarkUrls); return Result.string(vod); } @@ -198,6 +221,9 @@ public class Libvio extends Spider { @Override public String playerContent(String flag, String id, List vipFlags) throws Exception { + if (flag.contains("quark")) { + return super.playerContent(flag, id, vipFlags); + } String target = siteUrl.concat("/play/").concat(id); Document doc = Jsoup.parse(OkHttp.string(target)); Matcher matcher = Pattern.compile("player_aaaa=(.*?)").matcher(doc.html()); @@ -217,7 +243,7 @@ public class Libvio extends Spider { } String playUrl = OkHttp.string(purl, getHeaders(target.replace("www.", ""))); - String realUrl = Util.getVar(playUrl, "urls"); + String realUrl = Util.getVar(playUrl, "vid"); return Result.get().url(realUrl).header(getHeaders()).string(); } diff --git a/app/src/test/java/LibvioTest.java b/app/src/test/java/LibvioTest.java index 6686c33b..7c20f821 100644 --- a/app/src/test/java/LibvioTest.java +++ b/app/src/test/java/LibvioTest.java @@ -28,7 +28,10 @@ public class LibvioTest { mockContext = RuntimeEnvironment.application; Init.init(mockContext); spider = new Libvio(); - spider.init(mockContext, "https://libvio.app"); + spider.init(mockContext, "{\"site\": \"https://www.libvio.app\" ,\"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\"}"); + + + } @org.junit.Test @@ -65,7 +68,9 @@ public class LibvioTest { @org.junit.Test public void detailContent() throws Exception { - String content = spider.detailContent(Arrays.asList("714891769.html")); + String content = spider.detailContent(Arrays.asList("714891892.html")); + System.out.println("detailContent--" + content); + JsonObject map = Json.safeObject(content); Gson gson = new GsonBuilder().setPrettyPrinting().create(); System.out.println("detailContent--" + gson.toJson(map)); @@ -74,8 +79,8 @@ public class LibvioTest { @org.junit.Test public void playerContent() throws Exception { - String froms = "BD播放"; - String urls = "第01集$714891769-1-1.html#第02集$714891769-1-2.html#第03集$714891769-1-3.html#第04集$714891769-1-4.html"; + String froms = "HD播放$$$quark4K#01$$$quark超清#01$$$quark高清#01$$$quark普画#01"; + String urls = "第01集$714891892-2-1.html#第02集$714891892-2-2.html$$$女巫阿加莎S01E01.mp4 873.45MB$1392fbcf2dd440f39ab91613c8a11bbf++fd658a5a021be6b9f2a5a701cb19467a++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mp4 908.26MB$0554004cf0d94840a7cd567a34d5a400++9ea8ab7fa561f537e0573ae04d32b74c++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E01.mkv 1.68GB$a938f4ca7ede4afbb35844edc97ef338++2c17995abfd9e4d4d239652179518480++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mkv 1.59GB$1b69a4c0ef2b46a281dbf616f0d1bea6++217e94c28c7fa60ae556d1a1fbcc48f9++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=$$$女巫阿加莎S01E01.mp4 873.45MB$1392fbcf2dd440f39ab91613c8a11bbf++fd658a5a021be6b9f2a5a701cb19467a++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mp4 908.26MB$0554004cf0d94840a7cd567a34d5a400++9ea8ab7fa561f537e0573ae04d32b74c++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E01.mkv 1.68GB$a938f4ca7ede4afbb35844edc97ef338++2c17995abfd9e4d4d239652179518480++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mkv 1.59GB$1b69a4c0ef2b46a281dbf616f0d1bea6++217e94c28c7fa60ae556d1a1fbcc48f9++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=$$$女巫阿加莎S01E01.mp4 873.45MB$1392fbcf2dd440f39ab91613c8a11bbf++fd658a5a021be6b9f2a5a701cb19467a++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mp4 908.26MB$0554004cf0d94840a7cd567a34d5a400++9ea8ab7fa561f537e0573ae04d32b74c++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E01.mkv 1.68GB$a938f4ca7ede4afbb35844edc97ef338++2c17995abfd9e4d4d239652179518480++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mkv 1.59GB$1b69a4c0ef2b46a281dbf616f0d1bea6++217e94c28c7fa60ae556d1a1fbcc48f9++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=$$$女巫阿加莎S01E01.mp4 873.45MB$1392fbcf2dd440f39ab91613c8a11bbf++fd658a5a021be6b9f2a5a701cb19467a++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mp4 908.26MB$0554004cf0d94840a7cd567a34d5a400++9ea8ab7fa561f537e0573ae04d32b74c++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E01.mkv 1.68GB$a938f4ca7ede4afbb35844edc97ef338++2c17995abfd9e4d4d239652179518480++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g=#女巫阿加莎S01E02.mkv 1.59GB$1b69a4c0ef2b46a281dbf616f0d1bea6++217e94c28c7fa60ae556d1a1fbcc48f9++4190fba22ff8++AssrQOfAvLi5VRwpv6zsXKP+AV2nAaThcsYmZYTr85g="; for (int i = 0; i < urls.split("\\$\\$\\$").length; i++) { String content = spider.playerContent(froms.split("\\$\\$\\$")[i], urls.split("\\$\\$\\$")[i].split("#")[0].split("\\$")[1], new ArrayList<>()); JsonObject map = Json.safeObject(content); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 761bbc75..9a342d0f 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 ffd54a44..51fd6d8c 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -c1b5e483406c4bbba9c10acc26e946d8 +6b1386a9e267e6d0199f349fccd05122 diff --git a/json/index.json b/json/index.json index 008fe49c..fe3172e5 100644 --- a/json/index.json +++ b/json/index.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;2e49412e2661e5328d9407c41b84893b", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;6b1386a9e267e6d0199f349fccd05122", "lives": [ { "name": "直播ipv6", @@ -164,7 +164,7 @@ "api": "csp_Libvio", "searchable": 1, "filterable": 0, - "ext": "https://www.libvio.app" + "ext": "{ \"site\": \"https://www.libvio.app\" }" }, { "key": "Ddrk", diff --git a/json/index1.json b/json/index1.json index 951bbc8f..015816a7 100644 --- a/json/index1.json +++ b/json/index1.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;2e49412e2661e5328d9407c41b84893b", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;6b1386a9e267e6d0199f349fccd05122", "lives": [ { "name": "直播ipv6", diff --git a/json/index2.json b/json/index2.json index beca0316..f59fb6cf 100644 --- a/json/index2.json +++ b/json/index2.json @@ -1,5 +1,5 @@ { - "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;2e49412e2661e5328d9407c41b84893b", + "spider": "https://androidcatvodspider.pages.dev/jar/custom_spider.jar;md5;6b1386a9e267e6d0199f349fccd05122", "lives": [ { "name": "直播ipv6", @@ -162,7 +162,7 @@ "api": "csp_Libvio", "searchable": 1, "filterable": 0, - "ext": "https://www.libvio.app" + "ext": "{ \"site\": \"https://www.libvio.app\" }" }, { "key": "Ddrk",