libvio add 夸克

This commit is contained in:
lushunming 2024-09-19 15:00:05 +08:00
parent 9fe5ea1240
commit 7a88c3c473
7 changed files with 67 additions and 36 deletions

View File

@ -8,8 +8,10 @@ import com.github.catvod.bean.Vod;
import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug; import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.net.OkHttp; import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Json;
import com.github.catvod.utils.Util; import com.github.catvod.utils.Util;
import com.google.gson.JsonElement;
import org.json.JSONObject; import org.json.JSONObject;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
@ -25,9 +27,9 @@ import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; 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"; 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 @Override
public void init(Context context, String extend) throws Exception { public void init(Context context, String extend) throws Exception {
JsonElement json = Json.parse(extend);
super.init(context, extend); super.init(context, extend);
String html = OkHttp.string(extend); String html = OkHttp.string(json.getAsJsonObject().get("site").getAsString());
Document doc = Jsoup.parse(html); 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 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 tabs = doc.select("div.stui-vodlist__head > div > h3");
Elements list = doc.select("div.stui-vodlist__head > ul.stui-content__playlist "); Elements list = doc.select("div.stui-vodlist__head > ul.stui-content__playlist ");
String PlayFrom = "";
String PlayUrl = ""; Vod.VodPlayBuilder builder = new Vod.VodPlayBuilder();
List<String> quarkList = new ArrayList<>();
for (int i = 0; i < tabs.size(); i++) { for (int i = 0; i < tabs.size(); i++) {
List<Vod.VodPlayBuilder.PlayUrl> playUrls = new ArrayList<>();
String tabName = tabs.get(i).text(); 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"); Elements li = list.get(i).select("a");
String liUrl = ""; for (Element element : li) {
for (int i1 = 0; i1 < li.size(); i1++) { if (tabName.contains("夸克")) {
if (!"".equals(liUrl)) { quarkList.add(element.attr("href"));
liUrl = liUrl + "#" + li.get(i1).text() + "$" + li.get(i1).attr("href").replace("/play/", "");
} else { } 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 (!tabName.contains("夸克")) {
builder.append(tabName, playUrls);
} }
} }
if (!"".equals(PlayUrl)) { List<String> shareLinks = new ArrayList<>();
PlayUrl = PlayUrl + "$$$" + liUrl; String quarkNames = "";
} else { String quarkUrls = "";
PlayUrl = PlayUrl + liUrl;
if (!quarkList.isEmpty()) {
for (String s : quarkList) {
Document detailPageDoc = Jsoup.parse(OkHttp.string(siteUrl.concat(s), getHeaders()));
Matcher matcher = Pattern.compile("player_aaaa=(.*?)</script>").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 vod = new Vod();
vod.setVodId(ids.get(0)); vod.setVodId(ids.get(0));
vod.setVodPic(siteUrl + pic); vod.setVodPic(siteUrl + pic);
vod.setVodName(name); vod.setVodName(name);
vod.setVodPlayFrom(PlayFrom); vod.setVodPlayFrom(result.vodPlayFrom + "$$$" + quarkNames);
vod.setVodPlayUrl(PlayUrl); vod.setVodPlayUrl(result.vodPlayUrl + "$$$" + quarkUrls);
return Result.string(vod); return Result.string(vod);
} }
@ -198,6 +221,9 @@ public class Libvio extends Spider {
@Override @Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception { public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
if (flag.contains("quark")) {
return super.playerContent(flag, id, vipFlags);
}
String target = siteUrl.concat("/play/").concat(id); String target = siteUrl.concat("/play/").concat(id);
Document doc = Jsoup.parse(OkHttp.string(target)); Document doc = Jsoup.parse(OkHttp.string(target));
Matcher matcher = Pattern.compile("player_aaaa=(.*?)</script>").matcher(doc.html()); Matcher matcher = Pattern.compile("player_aaaa=(.*?)</script>").matcher(doc.html());
@ -217,7 +243,7 @@ public class Libvio extends Spider {
} }
String playUrl = OkHttp.string(purl, getHeaders(target.replace("www.", ""))); 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(); return Result.get().url(realUrl).header(getHeaders()).string();
} }

View File

@ -28,7 +28,10 @@ public class LibvioTest {
mockContext = RuntimeEnvironment.application; mockContext = RuntimeEnvironment.application;
Init.init(mockContext); Init.init(mockContext);
spider = new Libvio(); 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 @org.junit.Test
@ -65,7 +68,9 @@ public class LibvioTest {
@org.junit.Test @org.junit.Test
public void detailContent() throws Exception { 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); JsonObject map = Json.safeObject(content);
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new GsonBuilder().setPrettyPrinting().create();
System.out.println("detailContent--" + gson.toJson(map)); System.out.println("detailContent--" + gson.toJson(map));
@ -74,8 +79,8 @@ public class LibvioTest {
@org.junit.Test @org.junit.Test
public void playerContent() throws Exception { public void playerContent() throws Exception {
String froms = "BD播放"; String froms = "HD播放$$$quark4K#01$$$quark超清#01$$$quark高清#01$$$quark普画#01";
String urls = "第01集$714891769-1-1.html#第02集$714891769-1-2.html#第03集$714891769-1-3.html#第04集$714891769-1-4.html"; 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++) { 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<>()); String content = spider.playerContent(froms.split("\\$\\$\\$")[i], urls.split("\\$\\$\\$")[i].split("#")[0].split("\\$")[1], new ArrayList<>());
JsonObject map = Json.safeObject(content); JsonObject map = Json.safeObject(content);

Binary file not shown.

View File

@ -1 +1 @@
c1b5e483406c4bbba9c10acc26e946d8 6b1386a9e267e6d0199f349fccd05122

View File

@ -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": [ "lives": [
{ {
"name": "直播ipv6", "name": "直播ipv6",
@ -164,7 +164,7 @@
"api": "csp_Libvio", "api": "csp_Libvio",
"searchable": 1, "searchable": 1,
"filterable": 0, "filterable": 0,
"ext": "https://www.libvio.app" "ext": "{ \"site\": \"https://www.libvio.app\" }"
}, },
{ {
"key": "Ddrk", "key": "Ddrk",

View File

@ -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": [ "lives": [
{ {
"name": "直播ipv6", "name": "直播ipv6",

View File

@ -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": [ "lives": [
{ {
"name": "直播ipv6", "name": "直播ipv6",
@ -162,7 +162,7 @@
"api": "csp_Libvio", "api": "csp_Libvio",
"searchable": 1, "searchable": 1,
"filterable": 0, "filterable": 0,
"ext": "https://www.libvio.app" "ext": "{ \"site\": \"https://www.libvio.app\" }"
}, },
{ {
"key": "Ddrk", "key": "Ddrk",