mirror of
https://github.com/qist/tvbox.git
synced 2025-01-24 02:57:28 +08:00
update CAT
This commit is contained in:
parent
8a7360760f
commit
ab6af24701
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/fan.txt;md5;f4a9956bae884c4a952da9152c0ed446",
|
||||
"spider":"./jar/fan.txt;md5;70471410f8e5a1bf20eb64b6b402e5c2",
|
||||
"logo":"https://avatars.githubusercontent.com/u/58679624?v=4",
|
||||
"lives":[{"name":"初秋语•ipv4","type":0,"url":"./list.txt","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
||||
{"name":"YanG•综合","type":0,"url":"https://github.moeyy.xyz/https://raw.githubusercontent.com/YanG-1989/m3u/main/Gather.m3u","playerType":1,"epg":"http://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/fan.txt;md5;f4a9956bae884c4a952da9152c0ed446",
|
||||
"spider":"./jar/fan.txt;md5;70471410f8e5a1bf20eb64b6b402e5c2",
|
||||
"wallpaper":"https://深色壁纸.xxooo.cf/",
|
||||
|
||||
"sites":[
|
||||
|
@ -23,8 +23,9 @@ __export(index_config_exports, {
|
||||
});
|
||||
module.exports = __toCommonJS(index_config_exports);
|
||||
var index_config_default = {
|
||||
alitoken: "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
bilicookie: "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985",
|
||||
aliToken: "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
quarkCookie: "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ",
|
||||
biliCookie: "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985",
|
||||
ffm3u8: {
|
||||
url: "https://cj.ffzyapi.com/api.php/provide/vod/from/ffm3u8/",
|
||||
categories: ["国产剧", "香港剧", "韩国剧", "欧美剧", "台湾剧", "日本剧", "海外剧", "泰国剧", "短剧", "动作片", "喜剧片", "爱情片", "科幻片", "恐怖片", "剧情片", "战争片", "动漫片", "大陆综艺", "港台综艺", "日韩综艺", "欧美综艺", "国产动漫", "日韩动漫", "欧美动漫", "港台动漫", "海外动漫", "记录片"]
|
||||
|
@ -1 +1 @@
|
||||
afb8f27ebea65642f0fffe73cf24d00d
|
||||
03c5c9563bf5ca222811aea5e9e96299
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
8fbad07750fb5a0bc2a036c0fdd457da
|
||||
0972096d206b7b978e5a8f0d70d6875a
|
5
cat/dist/index.config.js
vendored
5
cat/dist/index.config.js
vendored
@ -23,8 +23,9 @@ __export(index_config_exports, {
|
||||
});
|
||||
module.exports = __toCommonJS(index_config_exports);
|
||||
var index_config_default = {
|
||||
alitoken: "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
bilicookie: "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985",
|
||||
aliToken: "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
quarkCookie: "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ",
|
||||
biliCookie: "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985",
|
||||
ffm3u8: {
|
||||
url: "https://cj.ffzyapi.com/api.php/provide/vod/from/ffm3u8/",
|
||||
categories: ["国产剧", "香港剧", "韩国剧", "欧美剧", "台湾剧", "日本剧", "海外剧", "泰国剧", "短剧", "动作片", "喜剧片", "爱情片", "科幻片", "恐怖片", "剧情片", "战争片", "动漫片", "大陆综艺", "港台综艺", "日韩综艺", "欧美综艺", "国产动漫", "日韩动漫", "欧美动漫", "港台动漫", "海外动漫", "记录片"]
|
||||
|
2
cat/dist/index.config.js.md5
vendored
2
cat/dist/index.config.js.md5
vendored
@ -1 +1 @@
|
||||
afb8f27ebea65642f0fffe73cf24d00d
|
||||
03c5c9563bf5ca222811aea5e9e96299
|
286
cat/dist/index.js
vendored
286
cat/dist/index.js
vendored
File diff suppressed because one or more lines are too long
2
cat/dist/index.js.md5
vendored
2
cat/dist/index.js.md5
vendored
@ -1 +1 @@
|
||||
6e80e0949dda51aad7ff06320e9a01f6
|
||||
c0fdca0e03d410e30fd736d1ae35ece7
|
@ -9,7 +9,7 @@
|
||||
|
||||
import {_, load} from "../lib/cat.js";
|
||||
import {Spider} from "./spider.js";
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import { detailContent,initCloud,playContent,getHeaders } from "../lib/cloud.js";
|
||||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
|
||||
@ -64,7 +64,7 @@ class GitCafeSpider extends Spider {
|
||||
async init(cfg) {
|
||||
await this.spiderInit()
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj);
|
||||
}
|
||||
|
||||
async parseClassFromDoc($) {
|
||||
@ -107,9 +107,9 @@ class GitCafeSpider extends Spider {
|
||||
let ali_url = await this.getAliUrl(obj["id"])
|
||||
await this.jadeLog.debug(`阿里分享链接为:${ali_url}`)
|
||||
if (!_.isEmpty(ali_url)) {
|
||||
let aliVodDetail = await detailContent([ali_url])
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
let playVod = await detailContent([ali_url],vodDetail.type_name)
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
}
|
||||
return vodDetail
|
||||
}
|
||||
@ -187,8 +187,8 @@ class GitCafeSpider extends Spider {
|
||||
}
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
let playObjStr = await playContent(flag, id, flags);
|
||||
this.playUrl = JSON.parse(playObjStr)["url"]
|
||||
this.playUrl = await playContent(flag, id, flags);
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,10 +8,9 @@
|
||||
*/
|
||||
import {_, load} from '../lib/cat.js';
|
||||
import {VodDetail, VodShort} from "../lib/vod.js"
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import { detailContent,initCloud,playContent,getHeaders} from "../lib/cloud.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {Spider} from "./spider.js";
|
||||
import {patternAli} from "../lib/utils.js";
|
||||
|
||||
let remark_list = ["4k", "4K"]
|
||||
|
||||
@ -23,7 +22,7 @@ class AliyunpanShare extends Spider {
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj);
|
||||
}
|
||||
|
||||
getName() {
|
||||
@ -129,10 +128,12 @@ class AliyunpanShare extends Spider {
|
||||
for (const share_url of share_url_list) {
|
||||
let matches = share_url.match(Utils.patternAli);
|
||||
if (!_.isEmpty(matches)) share_ali_url_list.push(matches[1])
|
||||
let quarkMatches = share_url.match(Utils.patternQuark);
|
||||
if (!_.isEmpty(quarkMatches)) share_ali_url_list.push(quarkMatches[1])
|
||||
}
|
||||
let aliVodDetail = await detailContent(share_ali_url_list)
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
let playVod = await detailContent([share_ali_url_list])
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
vodDetail.type_name = Utils.getStrByRegex(/标签(.*?)\n/, articleContent).replaceAll(":", "")
|
||||
vodDetail.vod_content = Utils.getStrByRegex(/描述(.*?)\n/, articleContent).replaceAll(":", "")
|
||||
return vodDetail
|
||||
@ -175,8 +176,8 @@ class AliyunpanShare extends Spider {
|
||||
}
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
let playObjStr = await playContent(flag, id, flags);
|
||||
this.playUrl = JSON.parse(playObjStr)["url"]
|
||||
this.playUrl = await playContent(flag, id, flags);
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
}
|
||||
|
||||
async setSearch(wd, quick) {
|
||||
|
@ -10,7 +10,7 @@ import {Spider} from "./spider.js";
|
||||
import {_, Crypto, load} from "../lib/cat.js";
|
||||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import { aliName, detailContent,initCloud,playContent, quarkName } from "../lib/cloud.js";
|
||||
|
||||
function cryptJs(text, key, iv, type) {
|
||||
let key_value = Crypto.enc.Utf8.parse(key || 'PBfAUnTdMjNDe6pL');
|
||||
@ -37,7 +37,7 @@ class ChangZhangSpider extends Spider {
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj);
|
||||
}
|
||||
|
||||
|
||||
@ -145,15 +145,16 @@ class ChangZhangSpider extends Spider {
|
||||
}
|
||||
vod_play_list.push(vodItems.join("#"))
|
||||
}
|
||||
let valify_formt_list = ["磁力链接", "阿里网盘"]
|
||||
let valify_formt_list = ["磁力链接", aliName]
|
||||
let otherPlayList = $("[class=\"ypbt_down_list\"]").find("li")
|
||||
let playVod = {}
|
||||
for (const otherPlay of otherPlayList) {
|
||||
let form_name = $(otherPlay).text()
|
||||
let is_valify = false
|
||||
for (const valify_format_name of valify_formt_list) {
|
||||
if (form_name.indexOf(valify_format_name) > -1) {
|
||||
is_valify = true
|
||||
if (form_name.indexOf("阿里网盘") === -1) {
|
||||
if (form_name.indexOf(aliName) === -1) {
|
||||
vod_play_from_list.push(valify_format_name)
|
||||
}
|
||||
}
|
||||
@ -162,33 +163,18 @@ class ChangZhangSpider extends Spider {
|
||||
let vodItems = []
|
||||
for (const ciliPlayUrl of $(otherPlay).find("a")) {
|
||||
let episodeUrl = ciliPlayUrl.attribs.href
|
||||
if ($(otherPlay).text().indexOf("阿里网盘")) {
|
||||
let aliVodDetail = await detailContent([episodeUrl])
|
||||
let aliPlayUrlList = aliVodDetail.vod_play_url.split("$$$")
|
||||
let is_exists = false
|
||||
for (const aliPlayUrl of aliPlayUrlList) {
|
||||
if (!_.isEmpty(aliPlayUrl)) {
|
||||
is_exists = true
|
||||
vod_play_list.push(aliPlayUrl)
|
||||
}
|
||||
}
|
||||
if (is_exists) {
|
||||
for (const aliFormatName of aliVodDetail.vod_play_from.split("$$$")) {
|
||||
vod_play_from_list.push("阿里云盘-" + aliFormatName)
|
||||
}
|
||||
}
|
||||
|
||||
if ($(otherPlay).text().indexOf(aliName)) {
|
||||
playVod = await detailContent([episodeUrl])
|
||||
} else {
|
||||
let episodeName = Utils.getStrByRegex(/\[(.*?)]/, $(ciliPlayUrl).text())
|
||||
vodItems.push(episodeName + "$" + episodeUrl)
|
||||
vod_play_list.push(vodItems.join("#"))
|
||||
playVod["磁力链接"] = (vodItems.join("#"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
vodDetail.vod_play_url = vod_play_list.join("$$$")
|
||||
vodDetail.vod_play_from = vod_play_from_list.join("$$$")
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
@ -267,9 +253,9 @@ class ChangZhangSpider extends Spider {
|
||||
}
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
if (flag.indexOf("阿里云盘") > -1) {
|
||||
flag = flag.replaceAll("阿里云盘-","")
|
||||
this.playUrl = JSON.parse(await playContent(flag, id, flags))["url"];
|
||||
if (flag.indexOf(aliName) > -1 || flag.indexOf(quarkName) > -1) {
|
||||
this.playUrl = await playContent(flag, id, flags)
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
} else {
|
||||
if (id.indexOf("magnet") > -1) {
|
||||
this.playUrl = id
|
||||
@ -344,4 +330,4 @@ export function __jsEvalReturn() {
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
export {spider}
|
||||
export {spider}
|
@ -9,7 +9,7 @@
|
||||
|
||||
import {_, load} from "../lib/cat.js";
|
||||
import {Spider} from "./spider.js";
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import { detailContent,initCloud,playContent,getHeaders} from "../lib/cloud.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||||
|
||||
@ -65,7 +65,7 @@ class GitCafeSpider extends Spider {
|
||||
async init(cfg) {
|
||||
await this.spiderInit()
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj);
|
||||
}
|
||||
|
||||
|
||||
@ -102,9 +102,11 @@ class GitCafeSpider extends Spider {
|
||||
vodDetail.type_name = classNamesList[classIdList.indexOf(obj["cat"])]
|
||||
vodDetail.vod_content = obj["des"]
|
||||
let ali_url = "https://www.aliyundrive.com/s/" + obj["alikey"]
|
||||
let aliVodDetail = await detailContent([ali_url])
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
let playVod = await detailContent([ali_url],vodDetail.type_name)
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
|
||||
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
@ -183,10 +185,11 @@ class GitCafeSpider extends Spider {
|
||||
return {"token": "", "date": ""}
|
||||
}
|
||||
}
|
||||
|
||||
async play(flag, id, flags) {
|
||||
return await playContent(flag, id, flags);
|
||||
async setPlay(flag, id, flags) {
|
||||
this.playUrl = await playContent(flag, id, flags);
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
let spider = new GitCafeSpider()
|
||||
|
@ -9,7 +9,7 @@
|
||||
import {_, load} from "../lib/cat.js";
|
||||
import {Spider} from "./spider.js";
|
||||
import {VodDetail, VodShort} from "../lib/vod.js";
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import { detailContent,initCloud,playContent,getHeaders } from "../lib/cloud.js";
|
||||
|
||||
class PanSearchSpider extends Spider {
|
||||
constructor() {
|
||||
@ -42,7 +42,7 @@ class PanSearchSpider extends Spider {
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj);
|
||||
}
|
||||
|
||||
async parseVodDetailfromJson(obj) {
|
||||
@ -65,13 +65,9 @@ class PanSearchSpider extends Spider {
|
||||
share_url = content.replaceAll(/<\\?[^>]+>/g, "").replace("链接:", "");
|
||||
}
|
||||
}
|
||||
try {
|
||||
let aliVodDetail = await detailContent([share_url])
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
} catch (e) {
|
||||
await this.jadeLog.error(`获取阿里视频播放失败,失败原因为:${e}`)
|
||||
}
|
||||
let playVod = await detailContent([share_url])
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
return vodDetail
|
||||
}
|
||||
|
||||
@ -109,8 +105,9 @@ class PanSearchSpider extends Spider {
|
||||
this.vodList = await this.parseVodShortListFromDocBySearch($, wd)
|
||||
}
|
||||
}
|
||||
async play(flag, id, flags) {
|
||||
return await playContent(flag, id, flags);
|
||||
async setPlay(flag, id, flags) {
|
||||
this.playUrl = await playContent(flag, id, flags);
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,10 +6,11 @@
|
||||
* @Software : Samples
|
||||
* @Desc :
|
||||
*/
|
||||
import {_} from "../lib/cat.js";
|
||||
import {Spider} from "./spider.js";
|
||||
import {VodDetail} from "../lib/vod.js";
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import { detailContent,initCloud,playContent,getHeaders} from "../lib/cloud.js";
|
||||
|
||||
class PushSpider extends Spider {
|
||||
constructor() {
|
||||
@ -36,7 +37,7 @@ class PushSpider extends Spider {
|
||||
try {
|
||||
this.cfgObj = await this.SpiderInit(cfg)
|
||||
this.catOpenStatus = this.cfgObj.CatOpenStatus
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj);
|
||||
} catch (e) {
|
||||
await this.jadeLog.error(`初始化失败,失败原因为:${e}`)
|
||||
}
|
||||
@ -58,11 +59,16 @@ class PushSpider extends Spider {
|
||||
let vodDetail = new VodDetail()
|
||||
vodDetail.vod_pic = Utils.RESOURCEURL + "/resources/push.jpg"
|
||||
let mather = Utils.patternAli.exec(id)
|
||||
let quarkMatcher = Utils.patternQuark.exec(id)
|
||||
if (mather !== null && mather.length > 0) {
|
||||
let aliVodDetail = await detailContent([id])
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
} else {
|
||||
let playVod = await detailContent([id])
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
} else if (quarkMatcher !== null && quarkMatcher.length > 0){
|
||||
let playVod = await detailContent([id])
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
}else {
|
||||
vodDetail.vod_play_from = '推送';
|
||||
vodDetail.vod_play_url = '推送$' + id;
|
||||
}
|
||||
@ -77,7 +83,8 @@ class PushSpider extends Spider {
|
||||
if (flag === "推送"){
|
||||
this.playUrl = id
|
||||
}else{
|
||||
this.playUrl = JSON.parse(await playContent(flag, id, flags))["url"];
|
||||
this.playUrl = await playContent(flag, id, flags);
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,8 +14,7 @@ import {_, load, Uri} from "../lib/cat.js";
|
||||
import * as HLS from "../lib/hls.js";
|
||||
import {hlsCache, tsCache} from "../lib/ffm3u8_open.js";
|
||||
import {DanmuSpider} from "../lib/danmuSpider.js";
|
||||
import {initAli} from "../lib/ali.js";
|
||||
|
||||
import { initCloud } from "../lib/cloud.js";
|
||||
class Result {
|
||||
constructor() {
|
||||
this.class = []
|
||||
@ -453,8 +452,8 @@ class Spider {
|
||||
|
||||
}
|
||||
|
||||
async initAli(token, db = null) {
|
||||
await initAli(token, db)
|
||||
async initCloud(token) {
|
||||
await initCloud(token)
|
||||
}
|
||||
|
||||
async spiderInit() {
|
||||
|
@ -55,21 +55,37 @@ async function test() {
|
||||
let siteType = 3;
|
||||
await spider.init({
|
||||
skey: siteKey, stype: siteType, ext: {
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"box": "TV",
|
||||
"code": "1",
|
||||
"from": "star",
|
||||
"danmu": true,
|
||||
"cookie": "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985"
|
||||
"cookie": "buvid3=02675249-8ED3-C418-87F5-59E18316459714816infoc; b_nut=1704421014; _uuid=5D435F74-F574-D9AB-62C1-B9294DE465D913102infoc; buvid_fp=e8c5650c749398e9b5cad3f3ddb5081e; buvid4=007E85D1-52C1-7E6E-07CF-837FFBC9349516677-024010502-J5vTDSZDCw4fNnXRejbSVg%3D%3D; rpdid=|()kYJmulRu0J'u~|RRJl)JR; PVID=1; SESSDATA=3be091d3%2C1720332009%2C699ed%2A11CjAcCdwXG5kY1umhCOpQHOn_WP7L9xFBfWO7KKd4BPweodpR6VyIfeNyPiRmkr5jCqsSVjg0R0dZOVVHRUo3RnhPRTZFc3JPbGdiUjFCdHpiRDhiTkticmdKTjVyS1VhbDdvNjFMSDJlbUJydUlRdjFUNGFBNkJlV2ZTa0N1Q1BEVi1QYTQzTUh3IIEC; bili_jct=b0ee7b5d3f27df893545d811d95506d4; DedeUserID=78014638; DedeUserID__ckMd5=4c8c5d65065e468a; enable_web_push=DISABLE; header_theme_version=CLOSE; home_feed_column=5; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; b_lsid=75E916AA_18EA1A8D995; bsource=search_baidu; FEED_LIVE_VERSION=V_HEADER_LIVE_NO_POP; browser_resolution=1507-691; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTIzNjk5MTMsImlhdCI6MTcxMjExMDY1MywicGx0IjotMX0.8zQW_fNTCSBlK_JkHnzu3gDw62wuTK1qgKcbGec3swM; bili_ticket_expires=171236985",
|
||||
"quarkCookie":"_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
}
|
||||
});
|
||||
|
||||
let classes = JSON.parse(await spider.home(true));
|
||||
console.debug(JSON.stringify(classes))
|
||||
|
||||
// 测试详情
|
||||
let detail1 = JSON.parse(await spider.detail('/index.php/voddetail/84217.html'))
|
||||
await testPlay(detail1)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 测试搜索
|
||||
let search_page = JSON.parse(await spider.search("甄嬛传", false, 1))
|
||||
let search_page = JSON.parse(await spider.search("庆余年", false, 1))
|
||||
console.debug(JSON.stringify(search_page))
|
||||
|
||||
|
||||
|
||||
|
||||
//测试首页列表
|
||||
let homeVod = JSON.parse(await spider.homeVod())
|
||||
console.debug(JSON.stringify(homeVod));
|
||||
@ -81,9 +97,6 @@ async function test() {
|
||||
|
||||
|
||||
|
||||
// 测试详情
|
||||
let detail1 = JSON.parse(await spider.detail("1872"))
|
||||
await testPlay(detail1)
|
||||
|
||||
|
||||
// 测试分类
|
||||
|
@ -8,7 +8,7 @@
|
||||
*/
|
||||
import {_, load} from '../lib/cat.js';
|
||||
import {VodDetail, VodShort} from "../lib/vod.js"
|
||||
import {detailContent, initAli, playContent} from "../lib/ali.js";
|
||||
import {initCloud, detailContent,playContent,getHeaders} from '../lib/cloud.js';
|
||||
import * as Utils from "../lib/utils.js";
|
||||
import {Spider} from "./spider.js";
|
||||
|
||||
@ -22,10 +22,11 @@ class WoggSpider extends Spider {
|
||||
|
||||
async init(cfg) {
|
||||
await super.init(cfg);
|
||||
await initAli(this.cfgObj["token"]);
|
||||
await initCloud(this.cfgObj)
|
||||
this.danmuStaus = true
|
||||
}
|
||||
|
||||
|
||||
getName() {
|
||||
return "💂┃阿里玩偶┃💂"
|
||||
}
|
||||
@ -78,22 +79,16 @@ class WoggSpider extends Spider {
|
||||
vodDetail.vod_content = $(video_items[4]).find("p")[0].children[0].data
|
||||
|
||||
vodDetail.vod_content = vodDetail.vod_content.replace("[收起部分]", "").replace("[展开全部]", "")
|
||||
const share_url_list = [];
|
||||
const share_url_list = []
|
||||
let items = $('.module-row-info')
|
||||
for (const item of items) {
|
||||
let aliUrl = $(item).find("p")[0].children[0].data
|
||||
let matches = aliUrl.match(Utils.patternAli);
|
||||
if (!_.isEmpty(matches)) share_url_list.push(matches[1])
|
||||
}
|
||||
if (share_url_list.length > 0) {
|
||||
let aliVodDetail = await detailContent(share_url_list,vodDetail.type_name)
|
||||
vodDetail.vod_play_url = aliVodDetail.vod_play_url
|
||||
vodDetail.vod_play_from = aliVodDetail.vod_play_from
|
||||
} else {
|
||||
await this.jadeLog.warning(`获取详情界面失败,失败原因为:没有分享链接`)
|
||||
let shareUrl = $(item).find("p")[0].children[0].data
|
||||
share_url_list.push(shareUrl)
|
||||
}
|
||||
let playVod = await detailContent(share_url_list,vodDetail.type_name)
|
||||
vodDetail.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodDetail.vod_play_url = _.values(playVod).join('$$$');
|
||||
return vodDetail
|
||||
|
||||
}
|
||||
|
||||
async parseVodShortListFromDocBySearch($) {
|
||||
@ -263,8 +258,8 @@ class WoggSpider extends Spider {
|
||||
}
|
||||
|
||||
async setPlay(flag, id, flags) {
|
||||
let playObjStr = await playContent(flag, id, flags);
|
||||
this.playUrl = JSON.parse(playObjStr)["url"]
|
||||
this.playUrl = await playContent(flag, id, flags);
|
||||
this.result.setHeader(getHeaders(flag))
|
||||
}
|
||||
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
* @Description: 阿里云盘Spider公共
|
||||
*/
|
||||
import {
|
||||
getVod,
|
||||
initSome,
|
||||
clearFile,
|
||||
playerContent,
|
||||
@ -17,9 +16,9 @@ import {
|
||||
getFileByShare, getTempFileId
|
||||
} from './ali_api.js';
|
||||
import {JadeLogging} from "./log.js";
|
||||
|
||||
const JadeLog = new JadeLogging("阿里云盘")
|
||||
|
||||
const aliName = "阿里云盘"
|
||||
const JadeLog = new JadeLogging(aliName)
|
||||
const aliPlayFormatList = ["原画", "超清", "高清", "标清"]
|
||||
|
||||
async function initAli(token) {
|
||||
await initSome();
|
||||
@ -41,15 +40,17 @@ function getShareId(share_url) {
|
||||
}
|
||||
}
|
||||
|
||||
async function detailContent(share_url_list, type_name = "电影") {
|
||||
async function detailContentAli(share_url_list, type_name = "电影") {
|
||||
try {
|
||||
let video_items = [], sub_items = []
|
||||
|
||||
|
||||
for (const share_url of share_url_list) {
|
||||
for (let i=0;i<share_url_list.length;i++){
|
||||
let share_url = share_url_list[i]
|
||||
let share_id = getShareId(share_url)
|
||||
let share_token = await setShareId(share_id)
|
||||
if (share_token !== undefined) {
|
||||
await getFileByShare(share_token, share_url, video_items, sub_items)
|
||||
await getFileByShare(i+1,share_token, share_url, video_items, sub_items)
|
||||
}
|
||||
}
|
||||
if (video_items.length > 0) {
|
||||
@ -57,13 +58,13 @@ async function detailContent(share_url_list, type_name = "电影") {
|
||||
} else {
|
||||
await JadeLog.error(`获取播放链接失败,检查分享链接为:${share_url_list.join("\t")}`)
|
||||
}
|
||||
return getVod(video_items, sub_items, type_name)
|
||||
return {"video_items":video_items,"sub_items":sub_items}
|
||||
} catch (e) {
|
||||
await JadeLog.error('获取阿里视频失败,失败原因为:' + e.message + ' 行数为:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
async function playContent(flag, id, flags) {
|
||||
async function playContentAli(flag, id, flags) {
|
||||
if (flags.length > 0) {
|
||||
await JadeLog.info(`准备播放,播放类型为:${flag},播放文件Id为:${id},播放所有类型为:${flags.join("")}`)
|
||||
} else {
|
||||
@ -78,6 +79,8 @@ async function playContent(flag, id, flags) {
|
||||
|
||||
export {
|
||||
initAli,
|
||||
detailContent,
|
||||
playContent
|
||||
detailContentAli,
|
||||
playContentAli,
|
||||
aliPlayFormatList,
|
||||
aliName,
|
||||
};
|
@ -306,8 +306,7 @@ async function refreshOpenToken() {
|
||||
}
|
||||
}
|
||||
|
||||
async function getFileByShare(share_token, share_url, video_item_list, sub_item_list) {
|
||||
await JadeLog.info(`正在获取播放链接,分享链接为:${share_url}`)
|
||||
async function getFileByShare(index,share_token, share_url, video_item_list, sub_item_list) {
|
||||
let params = {};
|
||||
params.share_id = shareId;
|
||||
let file_id = share_url.split("folder/").slice(-1)[0]
|
||||
@ -317,27 +316,15 @@ async function getFileByShare(share_token, share_url, video_item_list, sub_item_
|
||||
let response_str = await post("adrive/v3/share_link/get_share_by_anonymous", params),
|
||||
response_json = JSON.parse(response_str), item_file_id = getParentFileId(file_id, response_json),
|
||||
item = new Item(item_file_id);
|
||||
await listFiles(item, video_item_list, sub_item_list, share_token);
|
||||
await listFiles(index,item, video_item_list, sub_item_list, share_token);
|
||||
}
|
||||
|
||||
async function getVod(video_item_list, sub_item_list, type_name) {
|
||||
let play_foramt_list = ["原画", "超清", "高清", "标清"], episode_list = [], episode_str_list = [];
|
||||
for (const video_item of video_item_list) {
|
||||
episode_list.push(video_item.getDisplayName(type_name) + "$" + video_item.getFileId() + "+" + video_item.shareId + "+" + video_item.shareToken + findSubs(video_item.getName(), sub_item_list));
|
||||
}
|
||||
for (let index = 0; index < play_foramt_list.length; index++) {
|
||||
episode_str_list.push(episode_list.join("#"));
|
||||
}
|
||||
return {
|
||||
vod_play_url: episode_str_list.join("$$$"), vod_play_from: play_foramt_list.map(item => item).join("$$$"),
|
||||
};
|
||||
|
||||
async function listFiles(index,item, video_item_list, sub_item_list, share_token) {
|
||||
return await listFilesMarker(index,item, video_item_list, sub_item_list, "", share_token);
|
||||
}
|
||||
|
||||
async function listFiles(item, video_item_list, sub_item_list, share_token) {
|
||||
return await listFilesMarker(item, video_item_list, sub_item_list, "", share_token);
|
||||
}
|
||||
|
||||
async function listFilesMarker(item, video_item_list, sub_item_list, netxt_markers, share_token) {
|
||||
async function listFilesMarker(index,item, video_item_list, sub_item_list, netxt_markers, share_token) {
|
||||
let new_item = {}, file_list = [];
|
||||
new_item.limit = 200;
|
||||
new_item.share_id = shareId;
|
||||
@ -345,10 +332,11 @@ async function listFilesMarker(item, video_item_list, sub_item_list, netxt_marke
|
||||
new_item.parent_file_id = item.getFileId();
|
||||
new_item.order_by = "name";
|
||||
new_item.order_direction = "ASC";
|
||||
new_item.share_index = index
|
||||
if (netxt_markers.length > 0) {
|
||||
new_item.marker = netxt_markers;
|
||||
}
|
||||
let items = Item.objectFrom(await shareFunc("adrive/v2/file/list_by_share", new_item), shareToken);
|
||||
let items = Item.objectFrom(await shareFunc("adrive/v2/file/list_by_share", new_item), shareToken,index);
|
||||
for (const r_item of items.getItems()) {
|
||||
if (r_item.getType() === "folder") {
|
||||
file_list.push(r_item);
|
||||
@ -385,9 +373,9 @@ async function listFilesMarker(item, video_item_list, sub_item_list, netxt_marke
|
||||
}
|
||||
}
|
||||
}
|
||||
items.getNextMarker().length > 0 && (await listFilesMarker(item, video_item_list, sub_item_list, items.getNextMarker()));
|
||||
items.getNextMarker().length > 0 && (await listFilesMarker(index,item, video_item_list, sub_item_list, items.getNextMarker()));
|
||||
for (const file of file_list) {
|
||||
await listFiles(file, video_item_list, sub_item_list);
|
||||
await listFiles(index,file, video_item_list, sub_item_list);
|
||||
}
|
||||
}
|
||||
|
||||
@ -413,31 +401,6 @@ function getParentFileId(file_id, items) {
|
||||
return "";
|
||||
}
|
||||
|
||||
//字幕匹配
|
||||
function pair(name, item_list, sub_item_list) {
|
||||
for (const item of item_list) {
|
||||
const sub_name = Utils.removeExt(item.getName()).toLowerCase();
|
||||
if (name.indexOf(sub_name) > -1 || sub_name.indexOf(name) > -1) {
|
||||
sub_item_list.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//找出所有字幕
|
||||
function findSubs(name, item_list) {
|
||||
let sub_item_list = [];
|
||||
pair(Utils.removeExt(name).toLowerCase(), item_list, sub_item_list);
|
||||
if (sub_item_list.length === 0) {
|
||||
for (const item of item_list) {
|
||||
sub_item_list.push(item);
|
||||
}
|
||||
}
|
||||
let sub_str = "";
|
||||
for (const item of sub_item_list) {
|
||||
sub_str += "+" + Utils.removeExt(item.getName()) + "@@@" + item.getExt() + "@@@" + item.getFileId();
|
||||
}
|
||||
return sub_str;
|
||||
}
|
||||
|
||||
async function getSubs(sub_list, share_id) {
|
||||
let sub_url_list = [];
|
||||
@ -517,9 +480,7 @@ async function playerContent(file_id, share_id, share_token) {
|
||||
// let sub_list = await getSubs(file_id_list,share_id);
|
||||
await JadeLog.info("获取原画的播放地址和字幕下载链接成功", true)
|
||||
await JadeLog.info(`下载地址为:${download_url}`)
|
||||
return JSON.stringify({
|
||||
parse: 0, url: download_url, header: getHeader(), format: "application/octet-stream", subs: []
|
||||
});
|
||||
return download_url;
|
||||
} catch (e) {
|
||||
await JadeLog.error("获取原画的播放地址和字幕下载链接失败:失败原因为:" + e);
|
||||
}
|
||||
@ -540,9 +501,7 @@ async function playerContentByFlag(file_id, flag, share_id, shareToken) {
|
||||
|
||||
await JadeLog.info("获取转码后的播放地址和字幕下载链接成功", true)
|
||||
await JadeLog.info(`下载地址为:${video_preview_url}`)
|
||||
return JSON.stringify({
|
||||
parse: 0, url: video_preview_url, header: getHeader(), format: "application/x-mpegURL", subs: []
|
||||
});
|
||||
return video_preview_url;
|
||||
} catch (e) {
|
||||
await JadeLog.error(`获取转码后的播放地址和字幕下载链接失败,失败原因为:${e}`)
|
||||
}
|
||||
@ -560,7 +519,7 @@ function getPreviewUrl(video_preview_play_info, flag) {
|
||||
return live_transcoding_task.url;
|
||||
}
|
||||
}
|
||||
return live_transcoding_task_list[0].url;
|
||||
return live_transcoding_task_list.slice(-1)[0].url;
|
||||
}
|
||||
|
||||
function getSubsByPlayInfo(video_preview_play_info) {
|
||||
@ -707,5 +666,5 @@ async function setToken(token) {
|
||||
}
|
||||
|
||||
export {
|
||||
initSome, setToken, clearFile, setShareId, getFileByShare, getVod, playerContent, playerContentByFlag, getTempFileId
|
||||
initSome, setToken, clearFile, setShareId, getFileByShare, playerContent, playerContentByFlag, getTempFileId
|
||||
};
|
@ -253,10 +253,11 @@ class Item {
|
||||
this.category = "";
|
||||
this.size = "";
|
||||
this.parent = "";
|
||||
this.shareToken = ""
|
||||
this.shareToken = "";
|
||||
this.shareIndex = 0;
|
||||
}
|
||||
|
||||
static objectFrom(json_str, shareToken) {
|
||||
static objectFrom(json_str, shareToken,shareIndex) {
|
||||
if (_.isEmpty(json_str)) {
|
||||
return new Item();
|
||||
}
|
||||
@ -273,8 +274,9 @@ class Item {
|
||||
item.category = typeof item_json.category == "undefined" ? "" : item_json.category;
|
||||
item.size = typeof item_json.size == "undefined" ? "" : item_json.size;
|
||||
item.parent = typeof item_json.parent_file_id == "undefined" ? "" : item_json.parent_file_id;
|
||||
item.shareIndex = shareIndex
|
||||
typeof item.items != "undefined" && Array.isArray(item_json.items) && !_.isEmpty(item_json.items) && item_json.items.forEach(function (x) {
|
||||
let new_item = Item.objectFrom(JSON.stringify((x)), shareToken)
|
||||
let new_item = Item.objectFrom(JSON.stringify((x)), shareToken,shareIndex)
|
||||
item.items.push(new_item);
|
||||
});
|
||||
return item;
|
||||
@ -324,15 +326,15 @@ class Item {
|
||||
return _.isEmpty(this.parent) ? "" : "[" + this.parent + "]";
|
||||
}
|
||||
|
||||
getShareIndex(){
|
||||
return this.shareIndex
|
||||
}
|
||||
|
||||
parentFunc(item) {
|
||||
this.parent = item;
|
||||
return this;
|
||||
}
|
||||
|
||||
// getDisplayName() {
|
||||
// return this.getParent() + " " + this.getName() + " " + this.getSize();
|
||||
// }
|
||||
|
||||
getDisplayName(type_name) {
|
||||
let name = this.getName();
|
||||
name = name.replaceAll("玩偶哥 q 频道:【神秘的哥哥们】", "")
|
||||
@ -345,11 +347,15 @@ class Item {
|
||||
}
|
||||
name = Utils.getStrByRegexDefault(/\.S01E(.*?)\./, name)
|
||||
const numbers = name.match(/\d+/g);
|
||||
if (numbers.length > 0) {
|
||||
if (!_.isEmpty(numbers) && numbers.length > 0) {
|
||||
name = numbers[0]
|
||||
}
|
||||
}
|
||||
return name + " " + this.getParent() + " " + this.getSize();
|
||||
|
||||
return name + " " + this.getParent() + " " + this.getSize();
|
||||
}
|
||||
getEpisodeUrl(type_name){
|
||||
return this.getDisplayName(type_name) + "$" + this.getFileId() + "+" + this.shareId + "+" + this.shareToken
|
||||
}
|
||||
|
||||
}
|
||||
|
106
cat/tjs/lib/cloud.js
Normal file
106
cat/tjs/lib/cloud.js
Normal file
@ -0,0 +1,106 @@
|
||||
/**
|
||||
* File: h:\PycharmProjects\Github\TVSpider\lib\cloud.js
|
||||
* Project: h:\PycharmProjects\Github\TVSpider
|
||||
* Created Date: Tuesday, May 21st 2024, 2:01:09 pm
|
||||
* Author: jade
|
||||
* -----
|
||||
* Last Modified: Tue May 21 2024
|
||||
* Modified By: jade
|
||||
* -----
|
||||
* Copyright (c) 2024 samples
|
||||
* ------------------------------------
|
||||
* Javascript will save your soul!
|
||||
*/
|
||||
|
||||
import {initAli,detailContentAli,playContentAli, aliPlayFormatList,aliName} from "./ali.js"
|
||||
import { initQuark,detailContentQuark,playContentQuark,quarkPlayFormatList,quarkName,getQuarkHeaders} from "./quark.js"
|
||||
import * as Utils from "./utils.js";
|
||||
import {_} from "../lib/cat.js";
|
||||
|
||||
|
||||
async function initCloud(cfg){
|
||||
initAli(cfg["aliToken"])
|
||||
initQuark(cfg["quarkCookie"])
|
||||
}
|
||||
|
||||
async function detailContent(share_url_list,type_name="电影"){
|
||||
let ali_share_url_list = [],quark_share_url_list = []
|
||||
const playVod = {}
|
||||
for (const shareUrl of share_url_list){
|
||||
let aliMatches = shareUrl.match(Utils.patternAli);
|
||||
if (!_.isEmpty(aliMatches)) {
|
||||
ali_share_url_list.push(aliMatches[1])
|
||||
}
|
||||
let quarkMatches = shareUrl.match(Utils.patternQuark);
|
||||
if (!_.isEmpty(quarkMatches)){
|
||||
quark_share_url_list.push(quarkMatches[1])
|
||||
}
|
||||
}
|
||||
let aliItems = await detailContentAli(ali_share_url_list)
|
||||
let quarkItems = await detailContentQuark(quark_share_url_list)
|
||||
await getVod(aliPlayFormatList,aliName,playVod,aliItems.video_items,aliItems.sub_items,type_name)
|
||||
await getVod(quarkPlayFormatList,quarkName,playVod,quarkItems.video_items,quarkItems.sub_items,type_name)
|
||||
|
||||
return playVod
|
||||
}
|
||||
|
||||
|
||||
async function getVod(play_foramt_list,cloud_name,playVod,video_item_list, sub_item_list, type_name) {
|
||||
if (video_item_list.length ==0){
|
||||
return
|
||||
}
|
||||
for (let i=0; i<video_item_list.slice(-1)[0].shareIndex;i++){
|
||||
for (let index = 0; index < play_foramt_list.length; index++) {
|
||||
let vodItems = []
|
||||
for (const video_item of video_item_list) {
|
||||
if (video_item.shareIndex === i + 1){
|
||||
vodItems.push( video_item.getEpisodeUrl(type_name)+ findSubs(video_item.getName(), sub_item_list)); }
|
||||
}
|
||||
playVod[`${cloud_name}-${i+1}-${play_foramt_list[index]}`] = vodItems.join("#")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//字幕匹配
|
||||
function pair(name, item_list, sub_item_list) {
|
||||
for (const item of item_list) {
|
||||
const sub_name = Utils.removeExt(item.getName()).toLowerCase();
|
||||
if (name.indexOf(sub_name) > -1 || sub_name.indexOf(name) > -1) {
|
||||
sub_item_list.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//找出所有字幕
|
||||
function findSubs(name, item_list) {
|
||||
let sub_item_list = [];
|
||||
pair(Utils.removeExt(name).toLowerCase(), item_list, sub_item_list);
|
||||
if (sub_item_list.length === 0) {
|
||||
for (const item of item_list) {
|
||||
sub_item_list.push(item);
|
||||
}
|
||||
}
|
||||
let sub_str = "";
|
||||
for (const item of sub_item_list) {
|
||||
sub_str += "+" + Utils.removeExt(item.getName()) + "@@@" + item.getExt() + "@@@" + item.getFileId();
|
||||
}
|
||||
return sub_str;
|
||||
}
|
||||
async function playContent(flag,id,flags){
|
||||
if (flag.indexOf(aliName) > -1) {
|
||||
return await playContentAli(flag, id, flags)
|
||||
}else if (flag.indexOf(quarkName) > -1){
|
||||
return await playContentQuark(flag,id,flags)
|
||||
}
|
||||
}
|
||||
|
||||
function getHeaders(flag){
|
||||
if (flag.indexOf(aliName) > -1) {
|
||||
return {}
|
||||
}else if (flag.indexOf(quarkName) > -1){
|
||||
return getQuarkHeaders()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export {initCloud,detailContent,playContent,getHeaders,aliName,quarkName}
|
63
cat/tjs/lib/quark.js
Normal file
63
cat/tjs/lib/quark.js
Normal file
@ -0,0 +1,63 @@
|
||||
/**
|
||||
* File: h:\PycharmProjects\Github\TVSpider\lib\quark.js
|
||||
* Project: h:\PycharmProjects\Github\TVSpider
|
||||
* Created Date: Monday, May 20th 2024, 4:54:26 pm
|
||||
* Author: jade
|
||||
* -----
|
||||
* Last Modified: Tue May 21 2024
|
||||
* Modified By: jade
|
||||
* -----
|
||||
* Copyright (c) 2024 samples
|
||||
* ------------------------------------
|
||||
* Javascript will save your soul!
|
||||
*/
|
||||
|
||||
import {JadeLogging} from "./log.js";
|
||||
import {Quark} from "./quark_api.js"
|
||||
const quarkName = "夸克云盘"
|
||||
const JadeLog = new JadeLogging(quarkName)
|
||||
const quarkPlayFormatList = ["普画"]
|
||||
const quark = new Quark()
|
||||
async function initQuark(cookie) {
|
||||
quark.initQuark(cookie)
|
||||
await JadeLog.info(`夸克云盘初始化完成,Cookie为:${cookie}`, true)
|
||||
}
|
||||
async function detailContentQuark(share_url_list, type_name = "电影") {
|
||||
try {
|
||||
let video_items = [], sub_items = []
|
||||
for (let i=0;i<share_url_list.length;i++){
|
||||
let share_url = share_url_list[i]
|
||||
await quark.getFilesByShareUrl(i+1,share_url,video_items,sub_items)
|
||||
}
|
||||
if (video_items.length > 0) {
|
||||
await JadeLog.info(`获取播放链接成功,分享链接为:${share_url_list.join("\t")}`)
|
||||
} else {
|
||||
await JadeLog.error(`获取播放链接失败,检查分享链接为:${share_url_list.join("\t")}`)
|
||||
}
|
||||
return {"video_items":video_items,"sub_items":sub_items}
|
||||
} catch (e) {
|
||||
await JadeLog.error('获取夸克视频失败,失败原因为:' + e.message + ' 行数为:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
async function playContentQuark(flag, id, flags){
|
||||
|
||||
let id_list = id.split("++")
|
||||
let shareId = id_list[2],stoken = id_list[3], fileId = id_list[0], fileToken = id_list[1]
|
||||
let playUrl = ""
|
||||
if (flag.indexOf("原画") > -1){
|
||||
playUrl = (await quark.getDownload(shareId, stoken, fileId, fileToken,true)).download_url
|
||||
}else if (flag.indexOf("普画") > -1){
|
||||
playUrl = (await quark.getLiveTranscoding(shareId, stoken, fileId, fileToken,true)).slice(-1)[0]["video_info"].url
|
||||
}
|
||||
return playUrl
|
||||
}
|
||||
|
||||
function getQuarkHeaders(){
|
||||
let headers = quark.getHeaders()
|
||||
delete headers["Host"]
|
||||
return headers
|
||||
}
|
||||
|
||||
export {initQuark,detailContentQuark,playContentQuark,quarkPlayFormatList,quarkName,getQuarkHeaders}
|
||||
|
282
cat/tjs/lib/quark_api.js
Normal file
282
cat/tjs/lib/quark_api.js
Normal file
@ -0,0 +1,282 @@
|
||||
/**
|
||||
* File: /workspaces/TVSpider/lib/quark_api.js
|
||||
* Project: /workspaces/TVSpider
|
||||
* Created Date: Monday, May 20th 2024, 6:38:12 am
|
||||
* Author: jade
|
||||
* -----
|
||||
* Last Modified: Tue May 21 2024
|
||||
* Modified By: jade
|
||||
* -----
|
||||
* Copyright (c) 2024 samples
|
||||
* ------------------------------------
|
||||
* Javascript will save your soul!
|
||||
*/
|
||||
import {_,Crypto} from "../lib/cat.js";
|
||||
import * as Utils from "../lib/utils.js"
|
||||
import {Item} from "../lib/quark_object.js"
|
||||
|
||||
class Quark{
|
||||
constructor(){
|
||||
this.apiUrl = "https://drive-pc.quark.cn/1/clouddrive/"
|
||||
this.cookie = ""
|
||||
this.ckey = ""
|
||||
this.shareTokenCache = {}
|
||||
this.pr = "pr=ucpro&fr=pc"
|
||||
this.subtitleExts = ['.srt', '.ass', '.scc', '.stl', '.ttml'];
|
||||
this.saveFileIdCaches = {}
|
||||
this.saveDirId = null
|
||||
this.saveDirName = 'TV';
|
||||
|
||||
}
|
||||
async initQuark(cookie) {
|
||||
this.ckey = Crypto.enc.Hex.stringify(Crypto.MD5(cookie)).toString();
|
||||
let localCfg = await local.get("quark", "cookie");
|
||||
if (!_.isEmpty(localCfg)){
|
||||
this.cookie = JSON.parse(localCfg)[this.ckey]
|
||||
}else{
|
||||
this.cookie = cookie
|
||||
}
|
||||
}
|
||||
|
||||
getHeaders(){
|
||||
return {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/2.5.20 Chrome/100.0.4896.160 Electron/18.3.5.4-b478491100 Safari/537.36 Channel/pckk_other_ch',
|
||||
'Referer': 'https://pan.quark.cn/',
|
||||
"Content-Type":"application/json",
|
||||
"Cookie":this.cookie,
|
||||
"Host":"drive-pc.quark.cn"
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
async api(url,data,retry,method){
|
||||
const leftRetry = retry || 3;
|
||||
let resp = await req(this.apiUrl + url,{
|
||||
method:method || "post",
|
||||
data:data,
|
||||
headers:this.getHeaders()
|
||||
})
|
||||
if (resp.headers['set-cookie']) {
|
||||
const puus = [resp.headers['set-cookie']].join(';;;').match(/__puus=([^;]+)/);
|
||||
if (puus) {
|
||||
if (this.cookie.match(/__puus=([^;]+)/)[1] != puus[1]) {
|
||||
this.cookie = this.cookie.replace(/__puus=[^;]+/, `__puus=${puus[1]}`);
|
||||
let cookieDic = {}
|
||||
cookieDic[this.ckey] = this.cookie
|
||||
await local.set("quark",this.cookie, JSON.stringify(cookieDic));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (resp.code !== 200 && leftRetry > 0) {
|
||||
Utils.sleep(1)
|
||||
return await this.api(url, data, leftRetry - 1);
|
||||
}
|
||||
return JSON.parse(resp.content) || {};
|
||||
}
|
||||
|
||||
getShareData(url) {
|
||||
let regex = /https:\/\/pan\.quark\.cn\/s\/([^\\|#/]+)/;
|
||||
let matches = regex.exec(url);
|
||||
if (matches) {
|
||||
return {
|
||||
shareId: matches[1],
|
||||
folderId: '0',
|
||||
};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
async getShareToken(shareData) {
|
||||
if (!this.shareTokenCache[shareData.shareId]) {
|
||||
delete this.shareTokenCache[shareData.shareId];
|
||||
const shareToken = await this.api(`share/sharepage/token?${this.pr}`, {
|
||||
pwd_id: shareData.shareId,
|
||||
passcode: shareData.sharePwd || '',
|
||||
});
|
||||
if (shareToken.data && shareToken.data.stoken) {
|
||||
this.shareTokenCache[shareData.shareId] = shareToken.data;
|
||||
}
|
||||
}
|
||||
}
|
||||
async listFile (shareIndex,shareData,videos,subtitles,shareId, folderId, page) {
|
||||
const prePage = 200;
|
||||
page = page || 1;
|
||||
const listData = await this.api(`share/sharepage/detail?${this.pr}&pwd_id=${shareId}&stoken=${encodeURIComponent(this.shareTokenCache[shareId].stoken)}&pdir_fid=${folderId}&force=0&_page=${page}&_size=${prePage}&_sort=file_type:asc,file_name:asc`, null,null, 'get');
|
||||
if (!listData.data) return [];
|
||||
const items = listData.data.list;
|
||||
if (!items) return [];
|
||||
const subDir = [];
|
||||
for (const item of items) {
|
||||
if (item.dir === true) {
|
||||
subDir.push(item);
|
||||
} else if (item.file === true && item.obj_category === 'video') {
|
||||
if (item.size < 1024 * 1024 * 5) continue;
|
||||
item.stoken = this.shareTokenCache[shareData.shareId].stoken;
|
||||
videos.push(Item.objectFrom(item,shareData.shareId,shareIndex));
|
||||
} else if (item.type === 'file' && this.subtitleExts.some((x) => item.file_name.endsWith(x))) {
|
||||
subtitles.push(Item.objectFrom(item,shareData,shareIndex));
|
||||
}
|
||||
}
|
||||
if (page < Math.ceil(listData.metadata._total / prePage)) {
|
||||
const nextItems = await this.listFile(shareIndex,shareData.shareId,videos,subtitles,shareId, folderId, page + 1);
|
||||
for (const item of nextItems) {
|
||||
items.push(item);
|
||||
}
|
||||
}
|
||||
for (const dir of subDir) {
|
||||
const subItems = await this.listFile(shareIndex,shareData,videos,subtitles,shareId, dir.fid);
|
||||
for (const item of subItems) {
|
||||
items.push(item);
|
||||
}
|
||||
}
|
||||
return items;
|
||||
};
|
||||
|
||||
findBestLCS(mainItem, targetItems) {
|
||||
const results = [];
|
||||
let bestMatchIndex = 0;
|
||||
for (let i = 0; i < targetItems.length; i++) {
|
||||
const currentLCS = Utils.lcs(mainItem.name, targetItems[i].name);
|
||||
results.push({ target: targetItems[i], lcs: currentLCS });
|
||||
if (currentLCS.length > results[bestMatchIndex].lcs.length) {
|
||||
bestMatchIndex = i;
|
||||
}
|
||||
}
|
||||
const bestMatch = results[bestMatchIndex];
|
||||
return { allLCS: results, bestMatch: bestMatch, bestMatchIndex: bestMatchIndex };
|
||||
}
|
||||
|
||||
async getFilesByShareUrl(shareIndex,shareInfo,videos,subtitles){
|
||||
const shareData = typeof shareInfo === 'string' ? this.getShareData(shareInfo) : shareInfo;
|
||||
if (!shareData) return [];
|
||||
await this.getShareToken(shareData);
|
||||
if (!this.shareTokenCache[shareData.shareId]) return [];
|
||||
await this.listFile(shareIndex,shareData,videos,subtitles,shareData.shareId, shareData.folderId);
|
||||
if (subtitles.length > 0) {
|
||||
videos.forEach((item) => {
|
||||
var matchSubtitle = this.findBestLCS(item, subtitles);
|
||||
if (matchSubtitle.bestMatch) {
|
||||
item.subtitle = matchSubtitle.bestMatch.target;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
clean(){
|
||||
const saves = Object.keys(this.saveFileIdCaches);
|
||||
for (const save of saves) {
|
||||
delete this.saveFileIdCaches[save];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async clearSaveDir() {
|
||||
const listData = await this.api(`file/sort?${this.pr}&pdir_fid=${this.saveDirId}&_page=1&_size=200&_sort=file_type:asc,updated_at:desc`, {}, {}, 'get');
|
||||
if (listData.data && listData.data.list && listData.data.list.length > 0) {
|
||||
await this.api(`file/delete?${this.pr}`, {
|
||||
action_type: 2,
|
||||
filelist: listData.data.list.map((v) => v.fid),
|
||||
exclude_fids: [],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async createSaveDir(clean) {
|
||||
if (this.saveDirId) {
|
||||
// 删除所有子文件
|
||||
if (clean) await this.clearSaveDir();
|
||||
return;
|
||||
}
|
||||
const listData = await this.api(`file/sort?${this.pr}&pdir_fid=0&_page=1&_size=200&_sort=file_type:asc,updated_at:desc`, {}, {}, 'get');
|
||||
if (listData.data && listData.data.list)
|
||||
for (const item of listData.data.list) {
|
||||
if (item.file_name === this.saveDirName) {
|
||||
this.saveDirId = item.fid;
|
||||
await this.clearSaveDir();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!this.saveDirId) {
|
||||
const create = await this.api(`file?${this.pr}`, {
|
||||
pdir_fid: '0',
|
||||
file_name: this.saveDirName,
|
||||
dir_path: '',
|
||||
dir_init_lock: false,
|
||||
});
|
||||
if (create.data && create.data.fid) {
|
||||
this.saveDirId = create.data.fid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async save(shareId, stoken, fileId, fileToken, clean) {
|
||||
await this.createSaveDir(clean);
|
||||
if (clean) {
|
||||
this.clean()
|
||||
}
|
||||
if (!this.saveDirId) return null;
|
||||
if (!stoken) {
|
||||
await this.getShareToken({
|
||||
shareId: shareId,
|
||||
});
|
||||
if (!this.shareTokenCache[shareId]) return null;
|
||||
}
|
||||
const saveResult = await this.api(`share/sharepage/save?${this.pr}`, {
|
||||
fid_list: [fileId],
|
||||
fid_token_list: [fileToken],
|
||||
to_pdir_fid: this.saveDirId,
|
||||
pwd_id: shareId,
|
||||
stoken: stoken || this.shareTokenCache[shareId].stoken,
|
||||
pdir_fid: '0',
|
||||
scene: 'link',
|
||||
});
|
||||
if (saveResult.data && saveResult.data.task_id) {
|
||||
let retry = 0;
|
||||
// wait task finish
|
||||
while (true) {
|
||||
const taskResult = await this.api(`task?${this.pr}&task_id=${saveResult.data.task_id}&retry_index=${retry}`, {}, {}, 'get');
|
||||
if (taskResult.data && taskResult.data.save_as && taskResult.data.save_as.save_as_top_fids && taskResult.data.save_as.save_as_top_fids.length > 0) {
|
||||
return taskResult.data.save_as.save_as_top_fids[0];
|
||||
}
|
||||
retry++;
|
||||
if (retry > 2) break;
|
||||
Utils.sleep(1);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
async getLiveTranscoding(shareId, stoken, fileId, fileToken) {
|
||||
if (!this.saveFileIdCaches[fileId]) {
|
||||
const saveFileId = await this.save(shareId, stoken, fileId, fileToken, true);
|
||||
if (!saveFileId) return null;
|
||||
this.saveFileIdCaches[fileId] = saveFileId;
|
||||
}
|
||||
const transcoding = await this.api(`file/v2/play?${this.pr}`, {
|
||||
fid: this.saveFileIdCaches[fileId],
|
||||
resolutions: 'normal,low,high,super,2k,4k',
|
||||
supports: 'fmp4',
|
||||
});
|
||||
if (transcoding.data && transcoding.data.video_list) {
|
||||
return transcoding.data.video_list;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async getDownload(shareId, stoken, fileId, fileToken, clean) {
|
||||
if (!this.saveFileIdCaches[fileId]) {
|
||||
const saveFileId = await this.save(shareId, stoken, fileId, fileToken, clean);
|
||||
if (!saveFileId) return null;
|
||||
this.saveFileIdCaches[fileId] = saveFileId;
|
||||
}
|
||||
const down = await this.api(`file/download?${this.pr}&uc_param_str=`, {
|
||||
fids: [this.saveFileIdCaches[fileId]],
|
||||
});
|
||||
if (down.data) {
|
||||
return down.data[0];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
export {Quark}
|
98
cat/tjs/lib/quark_object.js
Normal file
98
cat/tjs/lib/quark_object.js
Normal file
@ -0,0 +1,98 @@
|
||||
/**
|
||||
* File: h:\PycharmProjects\Github\TVSpider\lib\quark_object.js
|
||||
* Project: h:\PycharmProjects\Github\TVSpider
|
||||
* Created Date: Monday, May 20th 2024, 5:26:45 pm
|
||||
* Author: jade
|
||||
* -----
|
||||
* Last Modified: Tue May 21 2024
|
||||
* Modified By: jade
|
||||
* -----
|
||||
* Copyright (c) 2024 samples
|
||||
* ------------------------------------
|
||||
* Javascript will save your soul!
|
||||
*/
|
||||
import {_} from "../lib/cat.js";
|
||||
import * as Utils from "./utils.js";
|
||||
|
||||
|
||||
class Item {
|
||||
constructor() {
|
||||
this.fileId = "";
|
||||
this.shareId = ""
|
||||
this.shareToken = "";
|
||||
this.shareFileToken = ""
|
||||
this.seriesId = ""
|
||||
this.name = "";
|
||||
this.type = "";
|
||||
this.formatType = "";
|
||||
this.size = "";
|
||||
this.parent = "";
|
||||
this.shareData = null;
|
||||
this.shareIndex = 0;
|
||||
this.lastUpdateAt = 0
|
||||
}
|
||||
|
||||
static objectFrom(item_json, shareId,shareIndex) {
|
||||
let item = new Item();
|
||||
item.fileId = typeof item_json.fid == undefined ? "" : item_json.fid;
|
||||
item.shareId = shareId
|
||||
item.shareToken = typeof item_json.stoken == undefined ? "" : item_json.stoken;
|
||||
item.shareFileToken = typeof item_json.share_fid_token == undefined ? "" : item_json.share_fid_token;
|
||||
item.seriesId = typeof item_json.series_id == undefined? "":item_json.series_id
|
||||
item.name = typeof item_json.file_name == undefined ? "" : item_json.file_name;
|
||||
item.type = typeof item_json.obj_category == undefined ? "" : item_json.obj_category;
|
||||
item.formatType = typeof item_json.format_type == undefined? "" : item_json.format_type;
|
||||
item.size = typeof item_json.size == undefined ? "" : item_json.size;
|
||||
item.parent = typeof item_json.pdir_fid == undefined ? "" : item_json.pdir_fid;
|
||||
item.lastUpdateAt = typeof item_json.last_update_at == undefined ? "" : item_json.last_update_at
|
||||
item.shareIndex = shareIndex
|
||||
return item;
|
||||
}
|
||||
|
||||
getFileExtension(){
|
||||
return this.name.split(".").slice(-1)[0]
|
||||
}
|
||||
|
||||
getFileId() {
|
||||
return _.isEmpty(this.fileId) ? "" : this.fileId
|
||||
}
|
||||
|
||||
getName() {
|
||||
return _.isEmpty(this.name) ? "" : this.name;
|
||||
}
|
||||
|
||||
getParent() {
|
||||
return _.isEmpty(this.parent) ? "" : "[" + this.parent + "]";
|
||||
}
|
||||
|
||||
getSize() {
|
||||
return this.size === 0 ? "" : "[" + Utils.getSize(this.size) + "]";
|
||||
}
|
||||
|
||||
getShareIndex(){
|
||||
return this.shareIndex
|
||||
}
|
||||
getDisplayName(type_name) {
|
||||
let name = this.getName();
|
||||
if (type_name === "电视剧") {
|
||||
let replaceNameList = ["4k", "4K"]
|
||||
name = name.replaceAll("." + this.getFileExtension(), "")
|
||||
name = name.replaceAll(" ", "").replaceAll(" ", "")
|
||||
for (const replaceName of replaceNameList) {
|
||||
name = name.replaceAll(replaceName, "")
|
||||
}
|
||||
name = Utils.getStrByRegexDefault(/\.S01E(.*?)\./, name)
|
||||
const numbers = name.match(/\d+/g);
|
||||
if (!_.isEmpty(numbers) && numbers.length > 0) {
|
||||
name = numbers[0]
|
||||
}
|
||||
}
|
||||
|
||||
return name + " " + this.getSize();
|
||||
}
|
||||
|
||||
getEpisodeUrl(type_name){
|
||||
return this.getDisplayName(type_name) + "$" + this.getFileId() + "++" + this.shareFileToken + "++" + this.shareId + "++" + this.shareToken
|
||||
}
|
||||
}
|
||||
export {Item}
|
@ -273,8 +273,70 @@ function formatContent(content) {
|
||||
.replaceAll('"', '\"')
|
||||
.replaceAll(/<\/?[^>]+>/g, '');
|
||||
}
|
||||
/**
|
||||
* 字符串相似度匹配
|
||||
* @returns
|
||||
*/
|
||||
function lcs(str1, str2) {
|
||||
if (!str1 || !str2) {
|
||||
return {
|
||||
length: 0,
|
||||
sequence: '',
|
||||
offset: 0,
|
||||
};
|
||||
}
|
||||
|
||||
var sequence = '';
|
||||
var str1Length = str1.length;
|
||||
var str2Length = str2.length;
|
||||
var num = new Array(str1Length);
|
||||
var maxlen = 0;
|
||||
var lastSubsBegin = 0;
|
||||
|
||||
for (var i = 0; i < str1Length; i++) {
|
||||
var subArray = new Array(str2Length);
|
||||
for (var j = 0; j < str2Length; j++) {
|
||||
subArray[j] = 0;
|
||||
}
|
||||
num[i] = subArray;
|
||||
}
|
||||
var thisSubsBegin = null;
|
||||
for (i = 0; i < str1Length; i++) {
|
||||
for (j = 0; j < str2Length; j++) {
|
||||
if (str1[i] !== str2[j]) {
|
||||
num[i][j] = 0;
|
||||
} else {
|
||||
if (i === 0 || j === 0) {
|
||||
num[i][j] = 1;
|
||||
} else {
|
||||
num[i][j] = 1 + num[i - 1][j - 1];
|
||||
}
|
||||
|
||||
if (num[i][j] > maxlen) {
|
||||
maxlen = num[i][j];
|
||||
thisSubsBegin = i - num[i][j] + 1;
|
||||
if (lastSubsBegin === thisSubsBegin) {
|
||||
// if the current LCS is the same as the last time this block ran
|
||||
sequence += str1[i];
|
||||
} else {
|
||||
// this block resets the string builder if a different LCS is found
|
||||
lastSubsBegin = thisSubsBegin;
|
||||
sequence = ''; // clear it
|
||||
sequence += str1.substr(lastSubsBegin, i + 1 - lastSubsBegin);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
length: maxlen,
|
||||
sequence: sequence,
|
||||
offset: thisSubsBegin,
|
||||
};
|
||||
}
|
||||
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+|https:\/\/www\.alipan\.com\/s\/[^"]+)/
|
||||
let patternQuark = /(https:\/\/pan\.quark\.cn\/s\/[^"]+)/
|
||||
|
||||
|
||||
export {
|
||||
isSub,
|
||||
@ -292,6 +354,7 @@ export {
|
||||
base64Encode,
|
||||
base64Decode,
|
||||
patternAli,
|
||||
patternQuark,
|
||||
unescape,
|
||||
decode,
|
||||
MOBILEUA,
|
||||
@ -309,5 +372,6 @@ export {
|
||||
randUUID,
|
||||
formatContent,
|
||||
formatUrl,
|
||||
encode
|
||||
encode,
|
||||
lcs
|
||||
};
|
@ -74,7 +74,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -186,7 +187,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -222,7 +224,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -234,7 +237,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -257,7 +261,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -335,7 +340,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "CatOpen",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
|
@ -73,7 +73,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -185,7 +186,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -221,7 +223,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -233,7 +236,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -256,7 +260,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
@ -334,7 +339,8 @@
|
||||
"timeout": 30,
|
||||
"ext": {
|
||||
"box": "TVBox",
|
||||
"token": "51427b95ab9d47a6921a27951ebd3f1e"
|
||||
"aliToken": "51427b95ab9d47a6921a27951ebd3f1e",
|
||||
"quarkCookie": "_UP_A4A_11_=wb965111521e45ffa80410c24a071a54; _UP_D_=pc; tfstk=fXFith4nnRk114LAjWc1TT-OQUXL5hGjqodxDjnVLDoBBchYujR4Drht3GaYxmqYlcPtWc34mknIMcFTB-Y_tuAv6G6_uIcxggIRw_U15jGV2EjCXmnslyoqlSMN9PGjgMEW0dR85uVOAjYmgwcEoqOqgIrqLyoIlq-ZuC738DgqgCJZgH8EuqxZNmAqqSPQTaC3h7bb2rFnSvW87D8jTW0iX0zasIR2zVDi4Poh2svabvzjnSTXixaaFogzbhS-Cry3xVcc9dlz--roR55Jj2wT8znUrEdYrfV3t-kh71znscDo-vYWpf24fSD_IE_78frQF0MNdMg367HmVvxFbyUnbY20XMOqX84UxYFpvQhbA-rqok-G4A9eUc4wG27YtK9jQ2gnVNJioG_mbu_h-wv5CAuIWgQh-K9jQ2gn2wbHFhMZRVIR.; __pus=c81f57897dafcb65d4ecb501bc299199AARcqF72zsatdbsCbiT3qVqsk36caaycoPQW7hz8rbEf+UY7f5aGgH1e90lsONAUwCAW8y27u5A/KXyYqkHCWgjS; __kp=99fa2760-1669-11ef-90cf-8f7a59c3b86e; __kps=AATSt4xuf6r6bqes3LdJvxvy; __ktd=c2e+aLICIvFoeklXXz36VA==; __uid=AATSt4xuf6r6bqes3LdJvxvy; Video-Auth=smob3MOUslklDq2MutANJYZCVo50sLv0GFelx3+cu1nK2fkdL2kvkdpT5yNOhNz0NLTyi5ThWRL47+ztJA4kXQ==; __puus=72f667c533c9a22496f88d2f1bb7ae71AAQ7mrvFw7s9AUPUXvnuGPkcDU3RRTVPdYaYQfsM9Cje2doYXgRZXbImg02EaUaEG+G9ikpo3xubGGdElArOuYvUtJzIXb6yHDnSZbtEUxkwvjfQRNEnDnVwLQ6LL2ORjRaxa9OUfwk/WppWvy6OcDqQtHYkaqB+Poxn5kFs7ZVdAtX7ZQks1czD+g9gAZjsbeBHxHQ1AP5MGc1s3M4RhwZQ"
|
||||
},
|
||||
"playerType": 0,
|
||||
"type": 3
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/fan.txt;md5;f4a9956bae884c4a952da9152c0ed446",
|
||||
"spider":"./jar/fan.txt;md5;70471410f8e5a1bf20eb64b6b402e5c2",
|
||||
"lives":[{"name":"live","type":0,"url":"./tv.txt","playerType":1,"ua":"okhttp/3.15","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://logo.tycng.com/{name}.png"}],
|
||||
"wallpaper":"https://qist.cc/api/api.php",
|
||||
"sites":[
|
||||
@ -53,6 +53,7 @@
|
||||
{"key":"初中课堂","name":"📚初中┃课堂","type":3,"api":"csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":0,"quickSearch":0,"changeable":0,"ext":"./FTY/初中课堂.json"},
|
||||
{"key":"高中教育","name":"📚高中┃课堂","type":3,"api":"csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":0,"quickSearch":0,"changeable":0,"ext":"./FTY/高中课堂.json"},
|
||||
{"key":"Nbys","name":"🛫泥巴┃飞","type":3,"api":"csp_NiNi","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"fan","name":"导航 https://饭太硬.top","type":3,"api":"csp_XPath","searchable":0,"quickSearch":0,"changeable":0},
|
||||
|
||||
{"key":"率率","name":"影视 | 率率[直连]","type":1,"api":"https://suoniapi.com/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"changeable":1,"categories":["国产剧","韩剧","日剧","港剧","台剧","动作片","喜剧片","爱情片","科幻片","战争片","恐怖片","剧情片","国产动漫","日韩动漫","欧美动漫","大陆综艺","日韩综艺"]},
|
||||
{"key": "Qtv","name": "影视 | 腾讯[解析]","type": 3,"api": "csp_Qtv","searchable": 1,"quickSearch": 1,"filterable": 1,"jar":"./jar/fty.jar;md5;b25d0e7f7c87f31aa886b78fe43a7d4c","changeable": 0},
|
||||
|
BIN
jar/fan.txt
BIN
jar/fan.txt
Binary file not shown.
3
jsm.json
3
jsm.json
@ -1,5 +1,5 @@
|
||||
{
|
||||
"spider":"./jar/fan.txt;md5;f4a9956bae884c4a952da9152c0ed446",
|
||||
"spider":"./jar/fan.txt;md5;70471410f8e5a1bf20eb64b6b402e5c2",
|
||||
"lives":[
|
||||
{"name":"live","type":0,"url":"https://epg.pw/test_channels.m3u","playerType":1,"ua":"okhttp/3.15","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"},
|
||||
{"name":"ipv6","type":0,"url":"./tvboxtv.txt","playerType":1,"ua":"okhttp/3.15","timeout":20,"epg":"https://epg.112114.xyz/?ch={name}&date={date}","logo":"https://epg.112114.xyz/logo/{name}.png"}
|
||||
@ -56,6 +56,7 @@
|
||||
{"key":"初中课堂","name":"📚初中┃课堂","type":3,"api":"csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":0,"quickSearch":0,"changeable":0,"ext":"./FTY/初中课堂.json"},
|
||||
{"key":"高中教育","name":"📚高中┃课堂","type":3,"api":"csp_Bili","style":{"type":"rect","ratio":1.597},"searchable":0,"quickSearch":0,"changeable":0,"ext":"./FTY/高中课堂.json"},
|
||||
{"key":"Nbys","name":"🛫泥巴┃飞","type":3,"api":"csp_NiNi","searchable":1,"quickSearch":1,"changeable":1},
|
||||
{"key":"fan","name":"导航 https://饭太硬.top","type":3,"api":"csp_XPath","searchable":0,"quickSearch":0,"changeable":0},
|
||||
|
||||
{"key":"率率","name":"影视 | 率率[直连]","type":1,"api":"https://suoniapi.com/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"changeable":1,"categories":["国产剧","韩剧","日剧","港剧","台剧","动作片","喜剧片","爱情片","科幻片","战争片","恐怖片","剧情片","国产动漫","日韩动漫","欧美动漫","大陆综艺","日韩综艺"]},
|
||||
{"key": "Qtv","name": "影视 | 腾讯[解析]","type": 3,"api": "csp_Qtv","searchable": 1,"quickSearch": 1,"filterable": 1,"jar":"./jar/fty.jar;md5;b25d0e7f7c87f31aa886b78fe43a7d4c","changeable": 0},
|
||||
|
Loading…
x
Reference in New Issue
Block a user