update CAT

This commit is contained in:
qist 2024-03-07 15:53:24 +08:00
parent e8a866b4bd
commit a1df95e46b
27 changed files with 3216 additions and 511 deletions

1
cat/js/18a_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/4kys_open.js Normal file

File diff suppressed because one or more lines are too long

183
cat/js/4kysxz_open.js Normal file
View File

@ -0,0 +1,183 @@
import { Crypto, load, _ } from './lib/cat.js';
let siteUrl = 'https://4kysxz.top';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{
type_id: '16',
type_name: '高清电影',
},{
type_id: '17',
type_name: '高清剧集',
}];
//let filterObj = genFilterObj();
return JSON.stringify({
class: classes,
//filters: filterObj
});
}
async function homeVod() {
let videos = await getVideos(siteUrl);
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
if (!pg) pg = 1;
if (pg <= 0) pg = 1;
let url = siteUrl + '/category-' + tid + '_' + pg + '.html';
let videos = await getVideos(url);
return JSON.stringify({
list: videos,
page: pg,
});
}
async function detail(id) {
try {
const html = await request(id);
const $ = load(html);
let actors = _.map($('div.entry-content.u-text-format.u-clearfix > div:nth-child(10) > div > span > span'), (n) => {
return $(n).text().split(' ')[0];
});
let actor = actors.join(' ');
let directors = _.map($('div.entry-content.u-text-format.u-clearfix > div:nth-child(8) > div > span'), (n) => {
return $(n).text().split(' ')[0];
});
let director = directors.join(' ');
let title = $('div.site-content > section > div > header > h1').text().trim();
let content = '该影视由【Leospring】采集分享';
let playUrlStr = '';
let playFromStr = '';
//高清直播
const cards = $('div.entry-content.u-text-format.u-clearfix > custag > ul > li > a');
if (cards.length > 0) {
let playUrls = _.map(cards, (n) => {
let playUrl = n.attribs['href'];
if (playUrl.indexOf('url=') > 0) {
playUrl = playUrl.split('url=')[1].split('&name')[0];
}
return $(n).text() + '$' + playUrl;
});
playUrlStr = playUrls.join('#');
playFromStr = '高清直播';
}
//磁力链接
const tbs = $('loginshow > table');
let playFrom = '';
let nameUrls = [];
for(let i = 0;i< tbs.length;i++) {
if (i%2 == 0) {
playFrom = $(tbs[i]).find('tbody > tr >td').text().replaceAll('WEB', '磁力');
} else if (i%2 == 1) {
const tds = $(tbs[i]).find('tbody > tr >td');
let nameUrl = '';
for (let j = 0;j < tds.length;j++) {
if (j%2 == 0) {
nameUrl = $(tds[j]).text().split('.')[0].split(' ')[0];
} else if (j%2==1){
nameUrl = nameUrl + '$' + $(tds[j]).text().split('【')[0];
nameUrls.push(nameUrl);
}
}
if (playFromStr.length > 0) {
playFromStr += '$$$';
playUrlStr += '$$$';
}
playFromStr += playFrom;
playUrlStr += nameUrls.join('#');
}
}
const video = {
vod_actor: actor,
vod_play_from: playFromStr,
vod_play_url: playUrlStr,
vod_director: director,
vod_content: content,
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {
//console.log('err', e);
}
return null;
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search.php?q=' + wd
//console.log('search url:', url);
let videos = await getVideos(url);
return JSON.stringify({
list: videos,
});
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function getVideos(url) {
const html = await request(url);
const $ = load(html);
const cards = $('div.row.posts-wrapper >div > article > div.entry-media > div > a')
let videos = _.map(cards, (n) => {
let id = n.attribs['href'];
let name = $($(n).find('img')[0]).attr('alt').replaceAll('<strong>','').replaceAll('</strong>', '').split(' ')[0];
let pic = $($(n).find('img')[0]).attr('data-src');
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: '',
};
});
return videos;
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/52ju_open.js Normal file

File diff suppressed because one or more lines are too long

894
cat/js/AppYsV2.js Normal file
View File

@ -0,0 +1,894 @@
import { Crypto, _ } from 'assets://js/lib/cat.js'
let host = '';
let header = {
'User-Agent': 'okhttp/3.12.11'
};
let siteKey = '';
let siteType = '';
let siteJx = '';
const urlPattern1 = /api\.php\/.*?\/vod/;
const urlPattern2 = /api\.php\/.+?\.vod/;
const parsePattern = /\/.+\\?.+=/;
const parsePattern1 = /.*(url|v|vid|php\?id)=/;
const parsePattern2 = /https?:\/\/[^\/]*/;
const htmlVideoKeyMatch = [
/player=new/,
/<div id="video"/,
/<div id="[^"]*?player"/,
/\/\/视频链接/,
/HlsJsPlayer\(/,
/<iframe[\s\S]*?src="[^"]+?"/,
/<video[\s\S]*?src="[^"]+?"/,
];
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
host = cfg.ext;
if (cfg.ext.hasOwnProperty('host')) { // for custom jx
host = cfg.ext.host;
siteJx = cfg.ext;
}
};
async function request(reqUrl, ua, timeout = 60000) {
let res = await req(reqUrl, {
method: 'get',
headers: ua ? ua : {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'},
timeout: timeout,
});
return res.content;
}
async function home(filter) {
try {
let url = getCateUrl(host);
let jsonArray = null;
if (url) {
const json = await request(url, getHeaders(url));
const obj = JSON.parse(json);
if (obj.hasOwnProperty("list") && Array.isArray(obj.list)) {
jsonArray = obj.list;
} else if (
obj.hasOwnProperty("data") &&
obj.data.hasOwnProperty("list") &&
Array.isArray(obj.data.list)
) {
jsonArray = obj.data.list;
} else if (obj.hasOwnProperty("data") && Array.isArray(obj.data)) {
jsonArray = obj.data;
}
} else {
// 通过filter列表读分类
const filterStr = getFilterTypes(url, null);
const classes = filterStr.split("\n")[0].split("+");
jsonArray = [];
for (let i = 1; i < classes.length; i++) {
const kv = classes[i].trim().split("=");
if (kv.length < 2) continue;
const newCls = {
type_name: kv[0].trim(),
type_id: kv[1].trim(),
};
jsonArray.push(newCls);
}
}
const result = { class: [] };
if (jsonArray != null) {
for (let i = 0; i < jsonArray.length; i++) {
const jObj = jsonArray[i];
const typeName = jObj.type_name;
if (isBan(typeName)) continue;
const typeId = jObj.type_id;
const newCls = {
type_id: typeId,
type_name: typeName,
};
const typeExtend = jObj.type_extend;
if (filter) {
const filterStr = getFilterTypes(url, typeExtend);
const filters = filterStr.split("\n");
const filterArr = [];
for (let k = (url) ? 1 : 0; k < filters.length; k++) {
const l = filters[k].trim();
if (!l) continue;
const oneLine = l.split("+");
let type = oneLine[0].trim();
let typeN = type;
if (type.includes("筛选")) {
type = type.replace(/筛选/g, "");
if (type === "class") typeN = "类型";
else if (type === "area") typeN = "地区";
else if (type === "lang") typeN = "语言";
else if (type === "year") typeN = "年份";
}
const jOne = {
key: type,
name: typeN,
value: [],
};
for (let j = 1; j < oneLine.length; j++) {
const kv = oneLine[j].trim();
const sp = kv.indexOf("=");
if (sp === -1) {
if (isBan(kv)) continue;
jOne.value.push({ n: kv, v: kv });
} else {
const n = kv.substring(0, sp);
if (isBan(n)) continue;
jOne.value.push({
n: n.trim(),
v: kv.substring(sp + 1).trim(),
});
}
}
filterArr.push(jOne);
}
if (!result.hasOwnProperty("filters")) {
result.filters = {};
}
result.filters[typeId] = filterArr;
}
result.class.push(newCls);
}
}
return JSON.stringify(result);
} catch (e) {
}
return "";
}
async function homeVod() {
try {
const apiUrl = host;
let url = getRecommendUrl(apiUrl);
let isTV = false;
if (!url) {
url = getCateFilterUrlPrefix(apiUrl) + "movie&page=1&area=&type=&start=";
isTV = true;
}
const json = await request(url, getHeaders(url));
const obj = JSON.parse(json);
const videos = [];
if (isTV) {
const jsonArray = obj.data;
for (let i = 0; i < jsonArray.length; i++) {
const vObj = jsonArray[i];
const v = {
vod_id: vObj.nextlink,
vod_name: vObj.title,
vod_pic: vObj.pic,
vod_remarks: vObj.state,
};
videos.push(v);
}
} else {
const arrays = [];
findJsonArray(obj, "vlist", arrays);
if (arrays.length === 0) {
findJsonArray(obj, "vod_list", arrays);
}
const ids = [];
for (const jsonArray of arrays) {
for (let i = 0; i < jsonArray.length; i++) {
const vObj = jsonArray[i];
const vid = vObj.vod_id;
if (ids.includes(vid)) continue;
ids.push(vid);
const v = {
vod_id: vid,
vod_name: vObj.vod_name,
vod_pic: vObj.vod_pic,
vod_remarks: vObj.vod_remarks,
};
videos.push(v);
}
}
}
const result = {
list: videos,
};
return JSON.stringify(result);
} catch (e) {
}
return "";
}
async function category(tid, pg, filter, extend) {
try {
const apiUrl = host;
let url = getCateFilterUrlPrefix(apiUrl) + tid + getCateFilterUrlSuffix(apiUrl);
url = url.replace(/#PN#/g, pg);
url = url.replace(/筛选class/g, extend?.class ?? "");
url = url.replace(/筛选area/g, extend?.area ?? "");
url = url.replace(/筛选lang/g, extend?.lang ?? "");
url = url.replace(/筛选year/g, extend?.year ?? "");
url = url.replace(/排序/g, extend?.排序 ?? "");
const json = await request(url, getHeaders(url));
const obj = JSON.parse(json);
let totalPg = Infinity;
try {
if (obj.totalpage !== undefined && typeof obj.totalpage === "number") {
totalPg = obj.totalpage;
} else if (
obj.pagecount !== undefined &&
typeof obj.pagecount === "number"
) {
totalPg = obj.pagecount;
} else if (
obj.data !== undefined &&
typeof obj.data === "object" &&
obj.data.total !== undefined &&
typeof obj.data.total === "number" &&
obj.data.limit !== undefined &&
typeof obj.data.limit === "number"
) {
const limit = obj.data.limit;
const total = obj.data.total;
totalPg = total % limit === 0 ? total / limit : Math.floor(total / limit) + 1;
}
} catch (e) {
}
const jsonArray =
obj.list !== undefined
? obj.list
: obj.data !== undefined && obj.data.list !== undefined
? obj.data.list
: obj.data;
const videos = [];
if (jsonArray !== undefined) {
for (let i = 0; i < jsonArray.length; i++) {
const vObj = jsonArray[i];
const v = {
vod_id: vObj.vod_id !== undefined ? vObj.vod_id : vObj.nextlink,
vod_name: vObj.vod_name !== undefined ? vObj.vod_name : vObj.title,
vod_pic: vObj.vod_pic !== undefined ? vObj.vod_pic : vObj.pic,
vod_remarks: vObj.vod_remarks !== undefined ? vObj.vod_remarks : vObj.state,
};
videos.push(v);
}
}
const result = {
page: pg,
pagecount: totalPg,
limit: 90,
total: Infinity,
list: videos,
};
return JSON.stringify(result);
} catch (e) {
SpiderDebug.log(e);
}
return "";
}
async function detail(ids) {
try {
const apiUrl = host;
const url = getPlayUrlPrefix(apiUrl) + ids;
const json = await request(url, getHeaders(url));
const obj = JSON.parse(json);
const result = {
list: [],
};
const vod = {};
genPlayList(apiUrl, obj, json, vod, ids);
result.list.push(vod);
return JSON.stringify(result);
} catch (e) {
}
return "";
}
const parseUrlMap = new Map();
function genPlayList(URL, object, json, vod, vid) {
const playUrls = [];
const playFlags = [];
if (URL.includes("lfytyl.com")) {
const data = object.data;
vod.vod_id = data.vod_id || vid;
vod.vod_name = data.vod_name;
vod.vod_pic = data.vod_pic;
vod.type_name = data.vod_class || "";
vod.vod_year = data.vod_year || "";
vod.vod_area = data.vod_area || "";
vod.vod_remarks = data.vod_remarks || "";
vod.vod_actor = data.vod_actor || "";
vod.vod_director = data.vod_director || "";
vod.vod_content = data.vod_content || "";
vod.vod_play_from = data.vod_play_from;
vod.vod_play_url = data.vod_play_url;
return;
}
if (URL.includes("api.php/app")) {
const data = object.data;
vod.vod_id = data.vod_id || vid;
vod.vod_name = data.vod_name;
vod.vod_pic = data.vod_pic;
vod.type_name = data.vod_class || "";
vod.vod_year = data.vod_year || "";
vod.vod_area = data.vod_area || "";
vod.vod_remarks = data.vod_remarks || "";
vod.vod_actor = data.vod_actor || "";
vod.vod_director = data.vod_director || "";
vod.vod_content = data.vod_content || "";
const vodUrlWithPlayer = data.vod_url_with_player;
for (let i = 0; i < vodUrlWithPlayer.length; i++) {
const from = vodUrlWithPlayer[i];
let flag = from.code.trim();
if (flag === "") flag = from.name.trim();
playFlags.push(flag);
playUrls.push(from.url);
let purl = from.parse_api;
const parseUrls = parseUrlMap.get(flag) || [];
if (purl && !parseUrls.includes(purl)) {
parseUrls.push(purl);
}
parseUrlMap.set(flag, parseUrls);
}
} else if (URL.includes("xgapp")) {
const data = object.data.vod_info;
vod.vod_id = data.vod_id || vid;
vod.vod_name = data.vod_name;
vod.vod_pic = data.vod_pic;
vod.type_name = data.vod_class || "";
vod.vod_year = data.vod_year || "";
vod.vod_area = data.vod_area || "";
vod.vod_remarks = data.vod_remarks || "";
vod.vod_actor = data.vod_actor || "";
vod.vod_director = data.vod_director || "";
vod.vod_content = data.vod_content || "";
const vodUrlWithPlayer = data.vod_url_with_player;
for (let i = 0; i < vodUrlWithPlayer.length; i++) {
const from = vodUrlWithPlayer[i];
let flag = from.code.trim();
if (flag === "") flag = from.name.trim();
playFlags.push(flag);
playUrls.push(from.url);
const purl = from.parse_api.trim();
const parseUrls = parseUrlMap.get(flag) || [];
if (purl && !parseUrls.includes(purl)) {
parseUrls.push(purl);
}
parseUrlMap.set(flag, parseUrls);
}
} else if (URL.includes(".vod")) {
const data = object.data;
vod.vod_id = data.vod_id || vid;
vod.vod_name = data.vod_name;
vod.vod_pic = data.vod_pic;
vod.type_name = data.vod_class || "";
vod.vod_year = data.vod_year || "";
vod.vod_area = data.vod_area || "";
vod.vod_remarks = data.vod_remarks || "";
vod.vod_actor = data.vod_actor || "";
vod.vod_director = data.vod_director || "";
vod.vod_content = data.vod_content || "";
const vodUrlWithPlayer = data.vod_play_list;
for (let i = 0; i < vodUrlWithPlayer.length; i++) {
const from = vodUrlWithPlayer[i];
let flag = from.player_info.from.trim();
if (flag === "") flag = from.player_info.show.trim();
playFlags.push(flag);
playUrls.push(from.url);
try {
const parses = [];
const parse1 = from.player_info.parse.split(",");
const parse2 = from.player_info.parse2.split(",");
parses.push(...parse1, ...parse2);
const parseUrls = parseUrlMap.get(flag) || [];
for (const purl of parses) {
if (purl.includes("http")) {
const match = purl.match(parsePattern1);
if (match) {
parseUrls.push(match[0]);
}
} else if (purl.includes("//")) {
const match = purl.match(parsePattern1);
if (match) {
parseUrls.push("http:" + match[0]);
}
} else {
const urlMatch = URL.match(parsePattern2);
if (urlMatch) {
const match = URL.match(parsePattern1);
if (match) {
parseUrls.push(urlMatch[0] + match[0]);
}
}
}
if (purl.includes("..")) purl = purl.replace(/\.\./g, ".").trim();
if (purl && !parseUrls.includes(purl)) {
parseUrls.push(purl);
}
}
parseUrlMap.set(flag, parseUrls);
} catch (e) {
}
}
} else if (URLPattern1.matcher(URL).find()) {
// Same implementation as the previous cases
}
vod.vod_play_from = playFlags.join("$$$");
vod.vod_play_url = playUrls.join("$$$");
}
async function play(flag, id, vipFlags) {
try {
// let parseUrls = parseUrlMap.get(flag);
let parseUrls = siteJx[flag]; // custom sitejx
if (!parseUrls) {
if (siteJx.hasOwnProperty('*')) { // all jx
parseUrls = siteJx['*'];
} else {
parseUrls = [];
}
}
if (parseUrls.length > 0) {
const result = await getFinalVideo(flag, parseUrls, id);
if (result !== null) {
return JSON.stringify(result);
}
}
if (isVideo(id)) {
const result = {
parse: 0,
playUrl: "",
url: id
};
return JSON.stringify(result);
} else {
const result = {
parse: 1,
jx: "1",
url: id
};
return JSON.stringify(result);
}
} catch (e) {
// Handle any error here
}
return "";
}
async function search(key, quick) {
try {
const apiUrl = host;
const url = getSearchUrl(apiUrl, encodeURIComponent(key));
const json = await request(url, getHeaders(url));
const obj = JSON.parse(json);
let jsonArray = null;
const videos = [];
if (obj.list instanceof Array) {
jsonArray = obj.list;
} else if (obj.data instanceof Object && obj.data.list instanceof Array) {
jsonArray = obj.data.list;
} else if (obj.data instanceof Array) {
jsonArray = obj.data;
}
if (jsonArray !== null) {
for (const vObj of jsonArray) {
if (vObj.vod_id) {
const v = {
vod_id: vObj.vod_id,
vod_name: vObj.vod_name,
vod_pic: vObj.vod_pic,
vod_remarks: vObj.vod_remarks
};
videos.push(v);
} else {
const v = {
vod_id: vObj.nextlink,
vod_name: vObj.title,
vod_pic: vObj.pic,
vod_remarks: vObj.state
};
videos.push(v);
}
}
}
const result = { list: videos };
return JSON.stringify(result);
} catch (error) {
}
return "";
}
async function getFinalVideo(flag, parseUrls, url) {
let htmlPlayUrl = "";
for (const parseUrl of parseUrls) {
if (parseUrl === "" || parseUrl === "null") {
continue;
}
const playUrl = parseUrl + url;
const content = await request(playUrl, null, 10000); // 10秒请求能更好过滤webjx
let tryJson = null;
try {
tryJson = jsonParse(url, content);
} catch (error) { }
if (tryJson !== null && tryJson.hasOwnProperty("url") && tryJson.hasOwnProperty("header")) {
tryJson.header = JSON.stringify(tryJson.header);
return tryJson;
}
if (content.includes("<html")) {
let sniffer = false;
for (const p of htmlVideoKeyMatch) {
if (p.test(content)) {
sniffer = true;
break;
}
}
if (sniffer) {
htmlPlayUrl = parseUrl;
}
}
}
if (htmlPlayUrl !== "") { // 不支持sniffer
const result = {
parse: 0,
playUrl: "",
url: url
};
return JSON.stringify(result);
}
return null;
}
function jsonParse(input, json) {
try {
// 处理解析接口返回的报文如果返回的报文中包含header信息就加到返回值中
let jsonPlayData = JSON.parse(json);
// 处理293的解析结果url在data字段的解析
if (jsonPlayData.hasOwnProperty("data") && typeof jsonPlayData.data === "object" && !jsonPlayData.hasOwnProperty("url")) {
jsonPlayData = jsonPlayData.data;
}
let url = jsonPlayData.url;
if (url.startsWith("//")) {
url = "https:" + url;
}
if (!url.trim().startsWith("http")) {
return null;
}
if (url === input) {
if (isVip(url) || !isVideoFormat(url)) {
return null;
}
}
if (isBlackVodUrl(input, url)) {
return null;
}
let headers = {};
if (jsonPlayData.hasOwnProperty("header")) {
headers = jsonPlayData.header;
} else if (jsonPlayData.hasOwnProperty("Header")) {
headers = jsonPlayData.Header;
} else if (jsonPlayData.hasOwnProperty("headers")) {
headers = jsonPlayData.headers;
} else if (jsonPlayData.hasOwnProperty("Headers")) {
headers = jsonPlayData.Headers;
}
let ua = "";
if (jsonPlayData.hasOwnProperty("user-agent")) {
ua = jsonPlayData["user-agent"];
} else if (jsonPlayData.hasOwnProperty("User-Agent")) {
ua = jsonPlayData["User-Agent"];
}
if (ua.trim().length > 0) {
headers["User-Agent"] = " " + ua;
}
let referer = "";
if (jsonPlayData.hasOwnProperty("referer")) {
referer = jsonPlayData.referer;
} else if (jsonPlayData.hasOwnProperty("Referer")) {
referer = jsonPlayData.Referer;
}
if (referer.trim().length > 0) {
headers["Referer"] = " " + referer;
}
headers = fixJsonVodHeader(headers, input, url);
const taskResult = {
header: headers,
url: url,
parse: "0"
};
return taskResult;
} catch (error) {
}
return null;
}
function isVip(url) {
try {
let isVip = false;
const host = new URL(url).hostname;
const vipWebsites = ["iqiyi.com", "v.qq.com", "youku.com", "le.com", "tudou.com", "mgtv.com", "sohu.com", "acfun.cn", "bilibili.com", "baofeng.com", "pptv.com"];
for (let b = 0; b < vipWebsites.length; b++) {
if (host.includes(vipWebsites[b])) {
if (vipWebsites[b] === "iqiyi.com") {
// 爱奇艺需要特殊处理
if (url.includes("iqiyi.com/a_") || url.includes("iqiyi.com/w_") || url.includes("iqiyi.com/v_")) {
isVip = true;
break;
}
} else {
isVip = true;
break;
}
}
}
return isVip;
} catch (e) {
}
return false;
}
function isBlackVodUrl(input, url) {
return url.includes("973973.xyz") || url.includes(".fit:");
}
function fixJsonVodHeader(headers, input, url) {
if (headers === null) {
headers = {};
}
if (input.includes("www.mgtv.com")) {
headers["Referer"] = " ";
headers["User-Agent"] = " Mozilla/5.0";
} else if (url.includes("titan.mgtv")) {
headers["Referer"] = " ";
headers["User-Agent"] = " Mozilla/5.0";
} else if (input.includes("bilibili")) {
headers["Referer"] = " https://www.bilibili.com/";
headers["User-Agent"] = " " + Misc.UaWinChrome;
}
return headers;
}
const snifferMatch = /http((?!http).){26,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\?.*|http((?!http).){26,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}\/m3u8\?pt=m3u8.*|http((?!http).)*?default\.ixigua\.com\/.*|http((?!http).)*?cdn-tos[^\?]*|http((?!http).)*?\/obj\/tos[^\?]*|http.*?\/player\/m3u8play\.php\?url=.*|http.*?\/player\/.*?[pP]lay\.php\?url=.*|http.*?\/playlist\/m3u8\/\?vid=.*|http.*?\.php\?type=m3u8&.*|http.*?\/download.aspx\?.*|http.*?\/api\/up_api.php\?.*|https.*?\.66yk\.cn.*|http((?!http).)*?netease\.com\/file\/.*/;
function isVideoFormat(url) {
if (snifferMatch.test(url)) {
return !url.includes("cdn-tos") || !url.includes(".js");
}
return false;
}
function isVideo(url) {
if (!url.includes(".mp4") || !url.includes(".m3u8")) {
return true;
}
return false;
}
function UA(url) {
if (url.includes(".vod")) {
return "okhttp/4.1.0";
}
}
function getCateUrl(URL) {
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
return URL + "nav?token=";
} else if (URL.includes(".vod")) {
return URL + "/types";
} else {
return "";
}
}
function getPlayUrlPrefix(URL) {
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
return URL + "video_detail?id=";
} else if (URL.includes(".vod")) {
return URL + "/detail?vod_id=";
} else {
return "";
}
}
function getRecommendUrl(URL) {
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
return URL + "index_video?token=";
} else if (URL.includes(".vod")) {
return URL + "/vodPhbAll";
} else {
return "";
}
}
function getFilterTypes(URL, typeExtend) {
let str = "";
if (typeExtend !== null) {
for (let key in typeExtend) {
if (key === "class" || key === "area" || key === "lang" || key === "year") {
try {
str += "筛选" + key + "+全部=+" + typeExtend[key].replace(/,/g, "+") + "\n";
} catch (e) { }
}
}
}
if (URL.includes(".vod")) {
str += "\n" + "排序+全部=+最新=time+最热=hits+评分=score";
} else if (URL.includes("api.php/app") || URL.includes("xgapp")) {
// Do nothing, leave the string as it is.
} else {
str = "分类+全部=+电影=movie+连续剧=tvplay+综艺=tvshow+动漫=comic+4K=movie_4k+体育=tiyu\n筛选class+全部=+喜剧+爱情+恐怖+动作+科幻+剧情+战争+警匪+犯罪+动画+奇幻+武侠+冒险+枪战+恐怖+悬疑+惊悚+经典+青春+文艺+微电影+古装+历史+运动+农村+惊悚+惊悚+伦理+情色+福利+三级+儿童+网络电影\n筛选area+全部=+大陆+香港+台湾+美国+英国+法国+日本+韩国+德国+泰国+印度+西班牙+加拿大+其他\n筛选year+全部=+2023+2022+2021+2020+2019+2018+2017+2016+2015+2014+2013+2012+2011+2010+2009+2008+2007+2006+2005+2004+2003+2002+2001+2000";
}
return str;
}
function getCateFilterUrlSuffix(URL) {
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&limit=18&pg=#PN#";
} else if (URL.includes(".vod")) {
return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&by=排序&limit=18&page=#PN#";
} else {
return "&page=#PN#&area=筛选area&type=筛选class&start=筛选year";
}
}
function getCateFilterUrlPrefix(URL) {
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
return URL + "video?tid=";
} else if (URL.includes(".vod")) {
return URL + "?type=";
} else {
return URL + "?ac=list&class=";
}
}
function isBan(key) {
return key === "伦理" || key === "情色" || key === "福利";
}
function getSearchUrl(URL, KEY) {
if (URL.includes(".vod")) {
return URL + "?wd=" + KEY + "&page=";
} else if (URL.includes("api.php/app") || URL.includes("xgapp")) {
return URL + "search?text=" + KEY + "&pg=";
} else if (urlPattern1.test(URL)) {
return URL + "?ac=list&zm=" + KEY + "&page=";
}
return "";
}
function findJsonArray(obj, match, result) {
Object.keys(obj).forEach((k) => {
try {
const o = obj[k];
if (k === match && Array.isArray(o)) {
result.push(o);
}
if (typeof o === "object" && o !== null) {
if (Array.isArray(o)) {
o.forEach((item) => {
if (typeof item === "object" && item !== null) {
findJsonArray(item, match, result);
}
});
} else {
findJsonArray(o, match, result);
}
}
} catch (e) {
}
});
}
function jsonArr2Str(array) {
const strings = [];
for (let i = 0; i < array.length; i++) {
try {
strings.push(array[i]);
} catch (e) {
}
}
return strings.join(",");
}
function getHeaders(URL) {
const headers = {};
headers["User-Agent"] = UA(URL);
return headers;
}
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

144
cat/js/MyCatBookan.js Normal file
View File

@ -0,0 +1,144 @@
import { _ } from './lib/cat.js';
let key = 'bookan';
let url = 'https://api.bookan.com.cn';
let siteKey = '';
let siteType = 0;
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
return JSON.stringify({
class: [
{ type_id: '1305', type_name: '少年读物' },
{ type_id: '1304', type_name: '儿童文学' },
{ type_id: '1320', type_name: '国学经典' },
{ type_id: '1306', type_name: '文艺少年' },
{ type_id: '1309', type_name: '育儿心经' },
{ type_id: '1310', type_name: '心理哲学' },
{ type_id: '1307', type_name: '青春励志' },
{ type_id: '1312', type_name: '历史小说' },
{ type_id: '1303', type_name: '故事会' },
{ type_id: '1317', type_name: '音乐戏剧' },
{ type_id: '1319', type_name: '相声评书' },
],
});
}
async function homeVod() {
return JSON.stringify({
list: [],
});
}
async function category(tid, pg, filter, extend) {
pg = pg || 1;
if (pg == 0) pg = 1;
let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`);
let data = JSON.parse(content).data;
let books = [];
for (const book of data.list) {
books.push({
vod_id: book.id,
vod_name: book.name,
vod_pic: book.cover,
vod_remarks: book.extra.author,
});
}
return JSON.stringify({
page: data.current_page,
pagecount: data.last_page,
limit: 24,
total: data.total,
list: books,
});
}
async function detail(id) {
let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`);
let data = JSON.parse(content).data;
console.log(JSON.stringify(data));
let book = {
vod_id: id,
type_name: '',
vod_year: '',
vod_area: '',
vod_remarks: '',
vod_actor: '',
vod_director: '',
vod_content: '',
};
let us = _.map(data.list, function (b) {
return formatPlayUrl(b.title) + '$' + b.file;
}).join('#');
book.vod_play_from = '书卷';
book.vod_play_url = us;
return JSON.stringify({
list: [book],
});
}
function formatPlayUrl(name) {
return name
.trim()
.replace(/<|>|\.《.*?》/g, '. ')
.replace(/\$|#/g, ' ')
.trim();
}
async function proxy(segments, headers) {}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
pg = pg || 1;
if (pg == 0) pg = 1;
let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`);
let data = JSON.parse(content).data;
let books = [];
for (const book of data.list) {
books.push({
vod_id: book.id,
vod_name: book.name,
vod_pic: book.cover,
vod_remarks: book.extra.author,
});
}
return JSON.stringify({
page: data.current_page,
pagecount: data.last_page,
limit: 20,
total: data.total,
list: books,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

137
cat/js/bookan_open.js Normal file
View File

@ -0,0 +1,137 @@
import { _ } from './lib/cat.js';
let key = 'bookkan';
let url = 'https://api.bookan.com.cn';
let siteKey = '';
let siteType = 0;
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
return JSON.stringify({
class: [
{ type_id: '1305', type_name: '少年读物' },
{ type_id: '1304', type_name: '儿童文学' },
{ type_id: '1320', type_name: '国学经典' },
{ type_id: '1306', type_name: '文艺少年' },
{ type_id: '1309', type_name: '育儿心经' },
{ type_id: '1310', type_name: '心理哲学' },
{ type_id: '1307', type_name: '青春励志' },
{ type_id: '1312', type_name: '历史小说' },
{ type_id: '1303', type_name: '故事会' },
{ type_id: '1317', type_name: '音乐戏剧' },
{ type_id: '1319', type_name: '相声评书' },
],
});
}
async function category(tid, pg, filter, extend) {
pg = pg || 1;
if (pg == 0) pg = 1;
let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`);
let data = JSON.parse(content).data;
let books = [];
for (const book of data.list) {
books.push({
book_id: book.id,
book_name: book.name,
book_pic: book.cover,
book_remarks: book.extra.author,
});
}
return JSON.stringify({
page: data.current_page,
pagecount: data.last_page,
limit: 24,
total: data.total,
list: books,
});
}
async function detail(id) {
let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`);
let data = JSON.parse(content).data;
let book = {
audio: 1,
book_id: id,
type_name: '',
book_year: '',
book_area: '',
book_remarks: '',
book_actor: '',
book_director: '',
book_content: '',
};
let us = _.map(data.list, function (b) {
return formatPlayUrl(b.title) + '$' + b.file;
}).join('#');
book.volumes = '书卷';
book.urls = us;
return JSON.stringify({
list: [book],
});
}
function formatPlayUrl(name) {
return name
.trim()
.replace(/<|>|《|》/g, '')
.replace(/\$|#/g, ' ')
.trim();
}
async function proxy(segments, headers) {}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
pg = pg || 1;
if (pg == 0) pg = 1;
let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`);
let data = JSON.parse(content).data;
let books = [];
for (const book of data.list) {
books.push({
book_id: book.id,
book_name: book.name,
book_pic: book.cover,
book_remarks: book.extra.author,
});
}
return JSON.stringify({
page: data.current_page,
pagecount: data.last_page,
limit: 20,
total: data.total,
list: books,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/bulei_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/cartoon18_open.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,517 +1,244 @@
{ {
"video": { "video": {
"sites": [ "sites": [
{ {"key":"豆瓣","name":"🟢 豆瓣👁️\u200d","type":3,"indexs":1,"api":"douban_open.js"},
"key": "豆瓣", {"key":"doubanbb","name":"🟢 片单","type":3,"indexs":1,"api":"doubanbb.js"},
"name": "🟢 豆瓣👁️‍", {"key":"玩偶哥哥","name":"🟢 玩偶","type":3,"api":"wogg_open.js","ext":"填入阿里token"},
"type": 3, {"key":"玩偶表哥","name":"🟢 表哥","type":3,"api":"wobg_open.js","ext":"填入阿里token"},
"indexs": 1, {"key":"耐看","name":"🟢 耐看","type":3,"api":"nkvod_open.js"},
"api": "douban_open.js" {"key":"爱看机器人","name":"🟢 爱看","type":3,"api":"ikanbot_open.js"},
}, {"key":"tiantian","name":"🟢 天天","type":3,"api":"tiantian_open.js"},
{ {"key":"快看影视","name":"🟢 快看","type":3,"api":"kkys_open.js"},
"key": "doubanbb", {"key":"厂长资源","name":"🟢 厂长","type":3,"api":"czzy_open.js"},
"name": "🟢 片单", {"key":"素白白","name":"🟢 素白","type":3,"api":"subaibai_open.js"},
"type": 3, {"key":"低端影视","name":"🟢 低端","type":3,"api":"ddys_open.js"},
"indexs": 1, {"key":"高光影视","name":"🟢 高光","type":3,"api":"ggys_open.js"},
"api": "doubanbb.js" {"key":"libvio","name":"🟢 立波","type":3,"api":"libvio_open.js"},
}, {"key":"电视直播","name":"🟢 电视","type":3,"api":"caiji.js","ext":"https://tvbox.serv00.net/live.php"},
{ {"key":"南瓜","name":"🟢 南瓜①","type":3,"api":"ng_open.js"},
"key": "玩偶哥哥", {"key":"nangua","name":"🟢 南瓜②","type":3,"api":"nangua_open.js"},
"name": "🟢 玩偶", {"key":"巧技一","name":"🟢 巧技①","type":3,"api":"qiao2_open.js","ext":"https://jihulab.com/qiaoji/open/-/raw/main/qiaoji2"},
"type": 3, {"key":"巧技二","name":"🟢 巧技②","type":3,"api":"qiao2_open.js","ext":"https://jihulab.com/qiaoji/open/-/raw/main/qiaoji3"},
"api": "wogg_open.js", {"key":"kanqiu","name":"🟢 看球①","type":3,"api":"kanqiu_open.js","searchable":0,"changeable":0,"style":{"type":"list"}},
"ext": "填入阿里token" {"key":"360ba","name":"🟢 看球②","type":3,"api":"360ba_open.js","searchable":0,"changeable":0,"style":{"type":"list"}},
}, {"key":"在线之家","name":"🟢 在线","type":3,"api":"zxzj_open.js"},
{ {"key":"一起看","name":"🟢 一起","type":3,"api":"yqktv_open.js"},
"key": "玩偶表哥", {"key":"555电影","name":"🟢 三五","type":3,"api":"555dy_open.js"},
"name": "🟢 表哥", {"key":"圣城影视","name":"🟢 圣城","type":3,"api":"sc1080_open.js"},
"type": 3, {"key":"胖虎影视","name":"🟢 胖虎","type":3,"api":"panghu_open.js"},
"api": "wobg_open.js", {"key":"人人影视","name":"🟢 人人","type":3,"api":"rttks_open.js"},
"ext": "填入阿里token" {"key":"图图影视","name":"🟢 图图","type":3,"api":"tutu_open.js"},
}, {"key":"农民影视","name":"🟢 农民","type":3,"api":"nmddd_open.js"},
{ {"key":"anfun","name":"🟢 Afun","type":3,"api":"anfun_open.js"},
"key": "耐看", {"key":"58dm","name":"🟢 五八","type":3,"api":"58dm_open.js"},
"name": "🟢 耐看", {"key":"爱动漫","name":"🟢 爱漫","type":3,"api":"adm_open.js"},
"type": 3, {"key":"酷我短剧","name":"🟢 酷我","type":3,"api":"kuwo_open.js"},
"api": "nkvod_open.js" {"key":"短剧网","name":"🟢 短剧","type":3,"api":"duanju5_open.js"},
}, {"key":"斗鱼直播","name":"🟢 斗鱼","type":3,"api":"douyu_open.js","ext":{"from":"official","custom":"Popkart,跑跑卡丁车#KartRiderDrift,跑跑卡丁车:漂移#PPKDCSY,跑跑手游#PathofExile,流放之路#hjzgwx,火炬之光:无限#CrossGate,魔力宝贝#g_jyhx,劲乐幻想#xjcs,仙境传说#yqk,一起看"}},
{ {"key":"虎牙直播","name":"🟢 虎牙","type":3,"api":"huya_open.js","ext":{"from":"official","custom":"2135,一起看#6245,放映厅#427,流放之路#6399,火炬之光:无限#2891,魔力宝贝#2620,跑跑卡丁车手游#162,跑跑卡丁车#7691,劲乐幻想#2675,仙境传说RO"}},
"key": "爱看机器人", {"key":"我的哔哩","name":"🟢 我哔","type":3,"api":"mybili_open.js"},
"name": "🟢 爱看", {"key":"哔哩","name":"🟢 哔哩","type":3,"api":"bili_open.js","ext":{"categories":"音乐#动画#电影#电视剧#番剧#综艺#国创#搞笑#单机游戏#沙雕动画#沙雕穿越#沙雕","cookie":"DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"}},
"type": 3, {"key":"哔哩直播","name":"🟢 直播","type":3,"api":"bililive_open.js","ext":{"cookie":"DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"}},
"api": "ikanbot_open.js" {"key":"火狐资源","name":"🟢 火狐","type":3,"api":"caiji.js","ext":{"url":"https://hhzyapi.com/api.php/provide/vod/from/hhm3u8","categories":["内地剧","欧美剧","香港剧","台湾剧","马泰剧","韩剧","日剧","动作片","爱情片","喜剧片","科幻片","恐怖片","剧情片","战争片","灾难片","悬疑片","犯罪片","奇幻片","记录片","伦理片","动画片","中国动漫","日本动漫","欧美动漫","大陆综艺","日韩综艺","港台综艺","欧美综艺"]}},
}, {"key":"新浪资源","name":"🟢 新浪","type":3,"api":"caiji.js","ext":{"url":"https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlm3u8","categories":["大陆剧","港澳剧","台湾剧","欧美剧","韩剧","日剧","泰剧","动漫","动漫电影","综艺","动作片","爱情片","科幻片","战争片","剧情片","恐怖片","喜剧片","纪录片","伦理片"]}},
{ {"key":"红牛资源","name":"🟢 红牛","type":3,"api":"caiji.js","ext":{"url":"https://www.hongniuzy2.com/api.php/provide/vod/from/hnm3u8/","categories":["国产剧","港澳剧","台湾剧","欧美剧","日剧","泰剧","韩剧","综艺","动漫","动漫电影","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","纪录片","伦理片"]}},
"key": "tiantian", {"key":"速播资源","name":"🟢 速播","type":3,"api":"caiji.js","ext":{"url":"https://subocaiji.com/api.php/provide/vod/from/subm3u8/","categories":["大陆剧","台湾剧","韩剧","美剧","港澳剧","日剧","泰剧","动作片","爱情片","科幻片","战争片","剧情片","恐怖片","喜剧片","纪录片","伦理片","动漫电影","中国动漫","日本动漫","欧美动漫","综艺"]}},
"name": "🟢 天天", {"key":"极速资源","name":"🟢 极速","type":3,"api":"caiji.js","ext":{"url":"https://jszyapi.com/api.php/provide/vod/from/jsm3u8/","categories":["内地剧","欧美剧","香港剧","台湾剧","马泰剧","韩剧","日剧","伦理片","动作片","爱情片","喜剧片","科幻片","恐怖片","剧情片","战争片","灾难片","悬疑片","犯罪片","奇幻片","记录片","动画片","中国动漫","日本动漫","欧美动漫","大陆综艺","日韩综艺","港台综艺","欧美综艺"]}},
"type": 3, {"key":"光速资源","name":"🟢 光速","type":3,"api":"caiji.js","ext":{"url":"https://api.guangsuapi.com/api.php/provide/vod/from/gsm3u8","categories":["大陆剧","欧美剧","港澳剧","台湾剧","泰剧","韩剧","日剧","动作片","爱情片","喜剧片","科幻片","恐怖片","战争片","伦理片","动漫电影"]}},
"api": "tiantian_open.js" {"key":"宅腐TV","name":"🟢 宅腐","type":3,"api":"appysv2.js","ext":"http://app.zhaifutvapp.com/ruifenglb_api.php/v1.vod"},
}, {"key":"聚视网","name":"🟢 央视","type":3,"api":"cntv_open.js"},
{ {"key":"武享UFC","name":"🟢 UFC","type":3,"api":"ufc_open.js"},
"key": "快看影视", {"key":"武享吧","name":"🟢 武享","type":3,"api":"hula8_open.js"},
"name": "🟢 快看", {"key":"兔小贝","name":"🟢 小贝","type":3,"api":"tuxiaobei_open.js"},
"type": 3, {"key":"贝乐虎","name":"🟢 乐虎","type":3,"api":"ubestkid_open.js"},
"api": "kkys_open.js" {"key":"酷奇MV","name":"🟢 酷奇","type":3,"api":"kuqimv_open.js"},
}, {"key":"播视网","name":"🟢 童趣","type":3,"api":"boosj_open.js"},
{ {"key":"短视频","name":"🟢 短视频","type":3,"api":"sharenice_open.js"},
"key": "厂长资源", {"key":"kanqiu_open","name":"体育 | 看球","type":3,"api":"kanqiu_open.js"},
"name": "🟢 厂长", {"key":"xinshijue_open","name":"影视 | 新视觉","type":3,"api":"xinshijue_open.js"},
"type": 3, {"key":"sc1080_open","name":"影视 | 圣城","type":3,"api":"sc1080_open.js"},
"api": "czzy_open.js"
}, {"key":"ff_open","name":"影视 | 非凡","type":3,"api":"ff_open.js"},
{ {"key":"push_agent","name":"影视 | 推送","type":4,"api":"push_open.js","ext":{"token":"ali_token","cookie":"quark_cookie"}},
"key": "素白白", {"key":"ggys_open","name":"影视 | 高光","type":3,"api":"ggys_open.js"},
"name": "🟢 素白", {"key":"ddys_open","name":"影视 | 低端","type":3,"api":"ddys_open.js"},
"type": 3, {"key":"4kysxz_open","name":"影视 | 4KXZ","type":3,"api":"4kysxz_open.js"},
"api": "subaibai_open.js" {"key":"nkvod_open","name":"影视 | 耐看","type":3,"api":"nkvod_open.js"},
},
{ {"key":"52ju_open","name":"影视 | 我爱剧","type":3,"api":"52ju_open.js"},
"key": "低端影视", {"key":"dyxs_open","name":"影视 | 电影先生","type":3,"api":"dyxs_openn.js"},
"name": "🟢 低端", {"key":"lz_open","name":"影视 | 量子","type":3,"api":"lz_open.js"},
"type": 3, {"key":"mfk_open","name":"影视 | 免费看","type":3,"api":"mfk_open.js"},
"api": "ddys_open.js" {"key":"mgys_open","name":"影视 | 蘑菇","type":3,"api":"mgys_open.js"},
}, {"key":"wf_open","name":"影视 | 奈飞","type":3,"api":"wf_open.js"},
{ {"key":"dnys_open","name":"影视 | 大拿","type":3,"api":"dnys_open.js"},
"key": "高光影视", {"key":"voflix_open","name":"影视 | vofx","type":3,"api":"voflix_open.js"},
"name": "🟢 高光", {"key":"4kys_open","name":"影视 | 4K影视","type":3,"api":"4kys_open.js"},
"type": 3, {"key":"zjm_open","name":"影视 | 追剧迷","type":3,"api":"zjm_open.js"},
"api": "ggys_open.js" {"key":"rbzj_open","name":"影视 | 热播追剧","type":3,"api":"rbzj_open.js"},
}, {"key":"mayiya_open","name":"影视 | 蚂蚁","type":3,"api":"mayiya_open.js"},
{ {"key":"rbk_open","name":"影视 | 热播库","type":3,"api":"rbk_open.js"},
"key": "libvio", {"key":"wpian_open","name":"影视 | pian","type":3,"api":"wpian_open.js"},
"name": "🟢 立波", {"key":"ym_open","name":"影视 | 映迷","type":3,"api":"ym_open.js"},
"type": 3, {"key":"yzz_open","name":"影视 | 影渣","type":3,"api":"yzz_open.js"},
"api": "libvio_open.js" {"key":"1080kk_open","name":"影视 | 1080看看","type":3,"api":"1080kk_open.js"},
}, {"key":"panghu_open","name":"影视 | 胖虎","type":3,"api":"panghu_open.js"},
{ {"key":"mimiju_open","name":"影视 | 迷迷剧","type":3,"api":"mimiju_open.js"},
"key": "电视直播", {"key":"yjys_open","name":"影视 | 悠久","type":3,"api":"yjys_open.js"},
"name": "🟢 电视",
"type": 3, {"key":"wogg","name":"阿里 | 玩偶哥哥","type":3,"api":"wogg.js","ext":"填自己的32位token"},
"api": "caiji.js", {"key":"wobg_open","name":"阿里 | 玩偶表哥","type":3,"api":"wobg_open.js","ext":"填入你的token"},
"ext": "https://tvbox.serv00.net/live.php" {"key":"dovx_open","name":"阿里 | 七夜","type":3,"api":"dovx_open.js","ext":"填入你的token"},
}, {"key":"pansearch_open","name":"阿里 | 盘搜索","type":3,"api":"pansearch_open.js","ext":"填入你的token"},
{ {"key":"funletu","name":"夸克 | 趣盘搜","type":3,"api":"funletu.js","ext":"夸克cookie,可http"},
"key": "南瓜",
"name": "🟢 南瓜①", {"key":"ys996_open","name":"影视 | 996","type":3,"api":"ys996_open.js"},
"type": 3, {"key":"star_open","name":"影视 | 星视界","type":3,"api":"star_open.js"},
"api": "ng_open.js" {"key":"ytvip","name":"影视 | 影探","type":3,"api":"yt.js","ext":"http://ytcms.lyyytv.cn/api.php/app/"},
}, {"key":"yqktv_open","name":"影视 | 一起看","type":3,"api":"yqktv_open.js"},
{ {"key":"555dy_open","name":"影视 | 555","type":3,"api":"555dy_open.js"},
"key": "nangua", {"key":"yrzj_open","name":"影视 | 伊人","type":3,"api":"yrzj_open.js"},
"name": "🟢 南瓜②", {"key":"yzys_open","name":"影视 | 柚子","type":3,"api":"yzys_open.js"},
"type": 3, {"key":"sssp_open","name":"影视 | 速搜","type":3,"api":"sssp_open.js"},
"api": "nangua_open.js" {"key":"bulei_open","name":"影视 | 布雷","type":3,"api":"bulei_open.js"},
}, {"key":"miku_open","name":"影视 | 咪咕","type":3,"api":"miku_open.js"},
{ {"key":"tutu_open","name":"影视 | 图图","type":3,"api":"tutu_open.js"},
"key": "巧技一", {"key":"hmsp_open","name":"影视 | 河马","type":3,"api":"hmsp_open.js"},
"name": "🟢 巧技①", {"key":"jojo_open","name":"影视 | jojo","type":3,"api":"jojo_open.js"},
"type": 3, {"key":"jiohub","name":"影视 | jiohub","type":3,"api":"jiohub.js"},
"api": "qiao2_open.js", {"key":"dsxys_open","name":"影视 | 大师兄","type":3,"api":"dsxys_open.js"},
"ext": "https://jihulab.com/qiaoji/open/-/raw/main/qiaoji2" {"key":"mino_open","name":"影视 | Mino","type":3,"api":"mino_open.js"},
}, {"key":"ddmv_open","name":"影视 | DDMV","type":3,"api":"ddmv_open.js"},
{ {
"key": "巧技二", "key": "rejumao",
"name": "🟢 巧技②", "name": "影视 | 热剧猫",
"type": 3, "type": 3,
"api": "qiao2_open.js", "api": "apptov5_open.js",
"ext": "https://jihulab.com/qiaoji/open/-/raw/main/qiaoji3" "ext": {
}, "domains": [
{ "https://app-1253196701.cos.ap-shanghai.myqcloud.com/app.txt",
"key": "kanqiu", "https://www.daenwl.com/app.txt"
"name": "🟢 看球①", ],
"type": 3, "aesKey": "8y8sDX3ZG22yACH3ZM5KfNGieTxEMKFe",
"api": "kanqiu_open.js", "aesIV": "WxRAbh68C8pP6SpN",
"searchable": 0, "rasPublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6Ykikz4aIqkJC899VxwX\nwx27bZJGV/fDbgAHtXxZ73Mq8QWuPfeAanWDWiGPhJu5aVQndADi7B0L5RBIrirf\n6lIzA+l8Ubt6+nvPYQ9NSlRkObE4ML2Hw7ccAmcqzDD0vplJz7Y8o7qKIoyfK5NP\nXDuiv52HgbyEP6KlWCiDfMuIsAA+/3x9C/0RDRgjf3x+24EuGOD6Gnw+rVJCOb64\nW4KZ7vH/uhaQSLLnNYF9VD00c072tOeaBt2mElexJN66gcP65kmrkI5grFz2RcEg\nIEkwUcYBNiFeHUcFyQZuDj/DLqQidwMhFJfkcUuMtByR9cYl9BpqT/3NKVQ1EPrV\n7QIDAQAB\n-----END PUBLIC KEY-----",
"changeable": 0, "ic": "fwEUWytkwJqHICtu/kNrXOVGQAzWUw1mGuQYdT1heOKZ6vEEI+4jf6LAHJ/f4h39ZR2WL4fccGchSoCm+pqkBRi8asSMqZzKGGfY8ejzrYHxDjiTOhs4B6p/iC8Nrj+bcCmXAjVNksfxlcjU6JlbRQ=="
"style": { }
"type": "list" },
} {
}, "key": "布雷v5",
{ "name": "影视 | 布蕾",
"key": "360ba", "type": 3,
"name": "🟢 看球②", "api": "apptov5_open.js",
"type": 3, "ext": {
"api": "360ba_open.js", "domains": [
"searchable": 0, "https://v5-public-1251970844.cos.ap-shanghai.myqcloud.com/accredits/68.json"
"changeable": 0, ],
"style": { "aesKey": "xMQFiWw77QzaiBDKNWjNRAChrenE2zB2",
"type": "list" "aesIV": "j2WbrZph6G7m2mRM",
} "rasPublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvBB/JjVWPpKFAWJCiQc5\neP6FrwNG8mXt/Y/yk98sigh/vNtX0sQX56eQi1YNvZ8sIiqoVWMl1/5NlANA0A/G\n/BiH5hCFYqY5L8adZIZgSd/QR8zMAyEDccVaNog6nmXQkGWjm/269Gl+gFaCOtXO\nzyEullcgevPcGHXwAGbGc1U3XaQjydC3mF290Mk4wKSjCn3sVfMSlgh8lsPhFvBo\n5MqqBWEkIz+eF+3ni2jQqHz1oy23RLPx9cV02GAHCQWFDlEZFUXvQHJU7RJP0X0z\nfpSg9bqVQ22iRvSWIE13S4SRf18eKt7S3yeH53sv/se/evXKyYE7P4wGhxhNuhOe\nXQIDAQAB\n-----END PUBLIC KEY-----\n",
}, "ic": "fVO1y5qVGVto+xbgx3hgGlmgOBmxt1sr5g+uWbrh8ENTyZcVFduzilI0OHY/uAMcLNe4EjaSZjmsc8t2SCdcIxZ1q2i+OJHTB90YjwjG+5mLjKf8gbTBhztyxJk68atX5msA1qsFJVhxnqHCGBkViA=="
{ }
"key": "在线之家", },
"name": "🟢 在线", {
"type": 3, "key": "追忆",
"api": "zxzj_open.js" "name": "影视 | 追忆",
}, "type": 3,
{ "api": "apptov5_open.js",
"key": "一起看", "ext": {
"name": "🟢 一起", "domains": [
"type": 3, "https://xtao-1253811961.cos.ap-chengdu.myqcloud.com/appto/xtao.json"
"api": "yqktv_open.js" ],
}, "aesKey": "we2CwNfG7PJppQmBfX8MMMQaWbSdcDXi",
{ "aesIV": "DnT3jxT8RYsa8ctc",
"key": "555电影", "rasPublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsKLhkMcBpvQ7x1bhAVDg\nNWdhJpkVUhWQaunZoDD7IwUNkkzl3cgHOBVo6H8IkoTnMAHwWnLIK9xHTwtN0ikA\nbZvlIOrOWwrhWwGYUAVSAtZm7FDHyVQlW3ZSv+oeBceIE7MZbCi7ZmS3Ft2XedEE\nyjXdvaQN8f+1ORmf/AsMTwfX2QhsjD1qNtq+pCw9wnd+AWGW6lAG8mxNTygfWqKT\n2GZsor5v3qq/qsMiFL7aUy/ZiBlHInzC3R9ZP6mWICt72Su+C9VzH+LHdiSMWmpZ\n1uT7EPJfh0MgzQUbIhNPVMeOBkDcf93DzO+zTDznpPCed12OORZL5PDg/2lK8i+H\nCwIDAQAB\n-----END PUBLIC KEY-----",
"name": "🟢 三五", "ic": "4Dqrm2DknrkdH3qOh7rE2nwK9BUd5cMVriFc+kWKpUedUJt6cLXHcROX9ps/2rBoBEftIjKkCAB5PSxCJUoKm/1n1mEZt7hQLSyIco9fRfS1QwyZItfMvHbjPJoB0vQnOvlcl7C8lgRZHFQLVXh9iA=="
"type": 3, }
"api": "555dy_open.js" },
},
{ {"key":"czzy","name":"影视 | 厂长","type":3,"api":"czzy_open.js"},
"key": "圣城影视", {"key":"libvio","name":"影视 | libvio","type":3,"api":"libvio_open.js"},
"name": "🟢 圣城", {"key":"kkys","name":"影视 | 快看","type":3,"api":"kkys_open.js"},
"type": 3, {"key":"ikanbot_open","name":"影视 | 爱看","type":3,"api":"ikanbot_open.js"},
"api": "sc1080_open.js" {"key":"ngys","name":"影视 | 南瓜","type":3,"api":"ng_open.js"},
}, {"key":"nivod","name":"影视 | 泥巴","type":3,"api":"nivod_op.js"},
{ {"key":"duboku2_open","name":"影视 | 独播库","type":3,"api":"duboku2_open.js"},
"key": "胖虎影视", {"key":"subaibai","name":"影视 | 素白白","type":3,"api":"subaibai_open.js"},
"name": "🟢 胖虎", {"key":"drpy_js_zxzj_open","name":"影视 | 在线之家","type":3,"api":"zxzj_open.js"},
"type": 3,
"api": "panghu_open.js" {"key":"drpy_js_boosj_open","name":"少儿 | 童趣","type":3,"api":"boosj_open.js"},
}, {"key":"drpy_js_tuxiaobei_open","name":"少儿 | 兔小贝","type":3,"api":"tuxiaobei_open.js"},
{ {"key":"drpy_js_ubestkid_open","name":"少儿 | 贝乐虎","type":3,"api":"ubestkid_open.js"},
"key": "人人影视", {"key":"kuwo_open","name":"短剧 | 酷我","type":3,"api":"kuwo_open.js"},
"name": "🟢 人人", {"key":"vsdj_open","name":"短剧 | VS","type":3,"api":"vsdj_open.js"},
"type": 3, {"key":"djwm_open","name":"短剧 | 完美","type":3,"api":"djwm_open.js"},
"api": "rttks_open.js" {"key":"adm_open","name":"动漫 | 爱动漫","type":3,"api":"adm_open.js"},
}, {"key":"anfun_open","name":"动漫 | 爱番","type":3,"api":"anfun_open.js"},
{ {"key":"58dm_open","name":"动漫 | 58动漫","type":3,"api":"58dm_open.js"},
"key": "图图影视", {"key":"ufc_open","name":"格斗 | 武享","type":3,"api":"ufc_open.js"},
"name": "🟢 图图", {"key":"sharenice","name":"聚合 | 短视频","type":3,"api":"sharenice_open.js"},
"type": 3, {
"api": "tutu_open.js" "key": "huya",
}, "name": "直播 | 虎牙",
{ "type": 3,
"key": "农民影视", "api": "huya_open.js",
"name": "🟢 农民", "ext": {
"type": 3, "from": "official",
"api": "nmddd_open.js" "custom": "1,英雄联盟#2336,王者荣耀"
}, }
{ },
"key": "anfun", {
"name": "🟢 Afun", "key": "douyu",
"type": 3, "name": "直播 | 斗鱼",
"api": "anfun_open.js" "type": 3,
}, "api": "douyu_open.js",
{ "ext": {
"key": "58dm", "from": "official",
"name": "🟢 五八", "custom": "LOL,英雄联盟#wzry,王者荣耀"
"type": 3, }
"api": "/cat/58dm_open.js" },
}, {"key":"mybili","name":"B站 | 哔哩综合","type":3,"api":"mybili_open.js"},
{ {"key":"bili_open","name":"B站 | 我的哔哩","type":3,"api":"bili_open.js","ext":{"categories":"沙雕动画#健身#音乐#舞蹈#风景#美食#科普#历史#法考#医考","cookie":"填自己的cookie"}},
"key": "爱动漫", {"key":"kuqimv","name":"MV | 酷奇","type":3,"api":"kuqimv_open.js"},
"name": "🟢 爱漫", {"key":"zzmusic_open","name":"音乐 | 渣渣","type":3,"api":"zzmusic_open.js"},
"type": 3, {"key":"drpy_js_cntv_open","name":"电视 | 视聚场","type":3,"api":"cntv_open.js"},
"api": "adm_open.js"
}, {"key":"哈喽","name":"V2 | 哈喽","type":3,"api":"appysv2.js","ext":"http://www.miniku.cc/xgapp.php/v1/"},
{ {"key":"1080dyw","name":"V2 | 视界","type":3,"api":"appysv2.js","ext":"https://www.1080dyw.cc/api.php/v1.vod"},
"key": "酷我短剧", {"key":"miniku","name":"V2 | 迷你","type":3,"api":"appysv2.js","ext":"http://www.miniku.cc/xgapp.php/v1/"},
"name": "🟢 酷我", {"key":"aidi","name":"V2 | 爱迪","type":3,"api":"appysv2.js","ext":"https://api123.adys.app/xgapp.php/v3/"},
"type": 3, {"key":"yaya","name":"V2 | 鸭鸭","type":3,"api":"appysv2.js","ext":"https://yayayaaapp.ynf.icu/api.php/app/"},
"api": "kuwo_open.js" {"key":"kuku","name":"V2 | 酷酷","type":3,"api":"appysv2.js","ext":"http://cms.realdou.cn:35264/api.php/app/"},
}, {"key":"beijihu","name":"V2 | 极狐","type":3,"api":"appysv2.js","ext":"https://www.kuin.one/api.php/app/"},
{ {"key":"kuk","name":"V2 | 天堂","type":3,"api":"appysv2.js","ext":"http://dytt996.com/api.php/app/"},
"key": "短剧网", {"key":"kku","name":"V2 | 酷影","type":3,"api":"appysv2.js","ext":"https://www.gsjtlxy.top/xgapp.php/v3/"},
"name": "🟢 短剧", {"key":"kuu","name":"V2 | 酷客","type":3,"api":"appysv2.js","ext":"https://www.kuin.one/api.php/app/"},
"type": 3, {"key":"ruidou","name":"V2 | 锐豆","type":3,"api":"appysv2.js","ext":"http://ys.realdou.cn:2683/api.php/app/"},
"api": "duanju5_open.js" {"key":"mayi","name":"V2 | 蚂蚁","type":3,"api":"appysv2.js","ext":"http://wushutvcms.byzz.top/api.php/app/"},
}, {"key":"sukan","name":"V2 | 速看","type":3,"api":"appysv2.js","ext":"https://sk100.tv/api.php/app/"},
{ {"key":"midi","name":"V2 | 明帝","type":3,"api":"appysv2.js","ext":"https://ys.md214.cn/api.php/app/"},
"key": "斗鱼直播", {"key":"dadou","name":"V2 | 大豆","type":3,"api":"appysv2.js","ext":"http://www.dadou.cm/api.php/app/"},
"name": "🟢 斗鱼", {"key":"qtw","name":"V2 | 彩虹","type":3,"api":"appysv2.js","ext":"http://ys.qtw.asia/lvdou_api.php/v1.vod"},
"type": 3, {"key":"火狐","name":"采集 | 火狐","type":3,"api":"caiji.js","ext":"https://hhzyapi.com/api.php/provide/vod/from/hhm3u8"},
"api": "douyu_open.js", {"key":"16wmv","name":"采集 | 16万MV","type":3,"api":"caiji.js","ext":"https://tvbox-mv--leosam2048.repl.co/mv/vod"},
"ext": { {"key":"xinlang","name":"采集 | 新浪","type":3,"api":"caiji.js","ext":"https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlm3u8"},
"from": "official", {"key":"bdzy","name":"采集 | 百度","type":3,"api":"caiji.js","ext":"https://api.apibdzy.com/api.php/provide/vod/from/dbm3u8/"},
"custom": "Popkart,跑跑卡丁车#KartRiderDrift,跑跑卡丁车:漂移#PPKDCSY,跑跑手游#PathofExile,流放之路#hjzgwx,火炬之光:无限#CrossGate,魔力宝贝#g_jyhx,劲乐幻想#xjcs,仙境传说#yqk,一起看" {"key":"bfzy","name":"采集 | 暴风","type":3,"api":"caiji.js","ext":"https://bfzyapi.com/api.php/provide/vod/"},
} {"key":"394tv","name":"采集 | 39","type":3,"api":"caiji.js","ext":"https://www.394tv.com/api.php/provide/vod/"},
}, {"key":"languang","name":"采集 | 蓝光","type":3,"api":"caiji.js","ext":"http://www.zzrhgg.com/api.php/provide/vod/"},
{ {"key":"lehuo","name":"采集 | 乐活","type":3,"api":"caiji.js","ext":"https://cj.vodimg.top/api.php/provide/vod/"},
"key": "虎牙直播", {"key":"piaoling","name":"采集 | 飘零","type":3,"api":"caiji.js","ext":"https://p2100.net/api.php/provide/vod/"},
"name": "🟢 虎牙", {"key":"yingtu","name":"采集 | 影图","type":3,"api":"caiji.js","ext":"https://cj.vodimg.top/api.php/provide/vod/"},
"type": 3, {"key":"feifan","name":"采集 | 非凡","type":3,"api":"caiji.js","ext":"https://cj.ffzyapi.com/api.php/provide/vod/from/ffm3u8/"},
"api": "huya_open.js", {"key":"feisu","name":"采集 | 飞速","type":3,"api":"caiji.js","ext":"https://www.feisuzyapi.com/api.php/provide/vod/from/fsm3u8/"},
"ext": { {"key":"guangsu","name":"采集 | 光速","type":3,"api":"caiji.js","ext":"https://api.guangsuapi.com/api.php/provide/vod/from/gsm3u8/"},
"from": "official", {"key":"hongniu","name":"采集 | 红牛","type":3,"api":"caiji.js","ext":"https://www.hongniuzy2.com/api.php/provide/vod/from/hnm3u8/"},
"custom": "2135,一起看#6245,放映厅#427,流放之路#6399,火炬之光:无限#2891,魔力宝贝#2620,跑跑卡丁车手游#162,跑跑卡丁车#7691,劲乐幻想#2675,仙境传说RO" {"key":"jinying","name":"采集 | 金鹰","type":3,"api":"caiji.js","ext":"https://jinyingzy.com/provide/vod/from/jinyingm3u8/"},
} {"key":"jisu","name":"采集 | 极速","type":3,"api":"caiji.js","ext":"https://jszyapi.com/api.php/provide/vod/from/jsm3u8/"},
}, {"key":"kuaiche","name":"采集 | 快车","type":3,"api":"caiji.js","ext":"https://caiji.kczyapi.com/api.php/provide/vod/from/kcm3u8/"},
{ {"key":"liangzi","name":"采集 | 量子","type":3,"api":"caiji.js","ext":"https://cj.lziapi.com/api.php/provide/vod/from/lzm3u8/"},
"key": "我的哔哩", {"key":"qihu","name":"采集 | 奇虎","type":3,"api":"caiji.js","ext":"https://caiji.qhzyapi.com/api.php/provide/vod/from/qhm3u8/"},
"name": "🟢 我哔", {"key":"guangsuapi","name":"采集 | 光速","type":3,"api":"caiji.js","ext":"http://api.guangsuapi.com/api.php/provide/vod/from/gsm3u8/"},
"type": 3,
"api": "mybili_open.js"
},
{
"key": "哔哩",
"name": "🟢 哔哩",
"type": 3,
"api": "bili_open.js",
"ext": {
"categories": "音乐#动画#电影#电视剧#番剧#综艺#国创#搞笑#单机游戏#沙雕动画#沙雕穿越#沙雕",
"cookie": "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"
}
},
{
"key": "哔哩直播",
"name": "🟢 直播",
"type": 3,
"api": "bililive_open.js",
"ext": {
"cookie": "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"
}
},
{
"key": "火狐资源",
"name": "🟢 火狐",
"type": 3,
"api": "caiji.js",
"ext": {
"url": "https://hhzyapi.com/api.php/provide/vod/from/hhm3u8",
"categories": [
"内地剧",
"欧美剧",
"香港剧",
"台湾剧",
"马泰剧",
"韩剧",
"日剧",
"动作片",
"爱情片",
"喜剧片",
"科幻片",
"恐怖片",
"剧情片",
"战争片",
"灾难片",
"悬疑片",
"犯罪片",
"奇幻片",
"记录片",
"伦理片",
"动画片",
"中国动漫",
"日本动漫",
"欧美动漫",
"大陆综艺",
"日韩综艺",
"港台综艺",
"欧美综艺"
]
}
},
{
"key": "新浪资源",
"name": "🟢 新浪",
"type": 3,
"api": "caiji.js",
"ext": {
"url": "https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlm3u8",
"categories": [
"大陆剧",
"港澳剧",
"台湾剧",
"欧美剧",
"韩剧",
"日剧",
"泰剧",
"动漫",
"动漫电影",
"综艺",
"动作片",
"爱情片",
"科幻片",
"战争片",
"剧情片",
"恐怖片",
"喜剧片",
"纪录片",
"伦理片"
]
}
},
{
"key": "红牛资源",
"name": "🟢 红牛",
"type": 3,
"api": "caiji.js",
"ext": {
"url": "https://www.hongniuzy2.com/api.php/provide/vod/from/hnm3u8/",
"categories": [
"国产剧",
"港澳剧",
"台湾剧",
"欧美剧",
"日剧",
"泰剧",
"韩剧",
"综艺",
"动漫",
"动漫电影",
"动作片",
"喜剧片",
"爱情片",
"科幻片",
"恐怖片",
"剧情片",
"战争片",
"纪录片",
"伦理片"
]
}
},
{
"key": "速播资源",
"name": "🟢 速播",
"type": 3,
"api": "caiji.js",
"ext": {
"url": "https://subocaiji.com/api.php/provide/vod/from/subm3u8/",
"categories": [
"大陆剧",
"台湾剧",
"韩剧",
"美剧",
"港澳剧",
"日剧",
"泰剧",
"动作片",
"爱情片",
"科幻片",
"战争片",
"剧情片",
"恐怖片",
"喜剧片",
"纪录片",
"伦理片",
"动漫电影",
"中国动漫",
"日本动漫",
"欧美动漫",
"综艺"
]
}
},
{
"key": "极速资源",
"name": "🟢 极速",
"type": 3,
"api": "caiji.js",
"ext": {
"url": "https://jszyapi.com/api.php/provide/vod/from/jsm3u8/",
"categories": [
"内地剧",
"欧美剧",
"香港剧",
"台湾剧",
"马泰剧",
"韩剧",
"日剧",
"伦理片",
"动作片",
"爱情片",
"喜剧片",
"科幻片",
"恐怖片",
"剧情片",
"战争片",
"灾难片",
"悬疑片",
"犯罪片",
"奇幻片",
"记录片",
"动画片",
"中国动漫",
"日本动漫",
"欧美动漫",
"大陆综艺",
"日韩综艺",
"港台综艺",
"欧美综艺"
]
}
},
{
"key": "光速资源",
"name": "🟢 光速",
"type": 3,
"api": "caiji.js",
"ext": {
"url": "https://api.guangsuapi.com/api.php/provide/vod/from/gsm3u8",
"categories": [
"大陆剧",
"欧美剧",
"港澳剧",
"台湾剧",
"泰剧",
"韩剧",
"日剧",
"动作片",
"爱情片",
"喜剧片",
"科幻片",
"恐怖片",
"战争片",
"伦理片",
"动漫电影"
]
}
},
{
"key": "宅腐TV",
"name": "🟢 宅腐",
"type": 3,
"api": "appysv2.js",
"ext": "http://app.zhaifutvapp.com/ruifenglb_api.php/v1.vod"
},
{
"key": "聚视网",
"name": "🟢 央视",
"type": 3,
"api": "cntv_open.js"
},
{
"key": "武享UFC",
"name": "🟢 UFC",
"type": 3,
"api": "ufc_open.js"
},
{
"key": "武享吧",
"name": "🟢 武享",
"type": 3,
"api": "hula8_open.js"
},
{
"key": "兔小贝",
"name": "🟢 小贝",
"type": 3,
"api": "tuxiaobei_open.js"
},
{
"key": "贝乐虎",
"name": "🟢 乐虎",
"type": 3,
"api": "ubestkid_open.js"
},
{
"key": "酷奇MV",
"name": "🟢 酷奇",
"type": 3,
"api": "kuqimv_open.js"
},
{
"key": "播视网",
"name": "🟢 童趣",
"type": 3,
"api": "boosj_open.js"
},
{
"key": "短视频",
"name": "🟢 短视频",
"type": 3,
"api": "sharenice_open.js"
},
{ {
"key": "push_agent", "key": "push_agent",
"name": "♻ 推送", "name": "♻ 推送",

1
cat/js/funletu.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/hmsp_open.js Normal file

File diff suppressed because one or more lines are too long

261
cat/js/ikanbot.js Normal file
View File

@ -0,0 +1,261 @@
import { Crypto, load, _ } from './lib/cat.js';
let key = 'ikanbot';
let url = 'https://www.ikanbot.com';
let siteKey = '';
let siteType = 0;
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
async function request(reqUrl, agentSp) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': agentSp || UA,
'referer': url
},
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
function getClass($) {
const nav = $('ul.nav-pills:eq(1) > li > a');
let tags = {
key: 'tag',
name: '标签',
value: _.map(nav, (n) => {
return { n: n.children[0].data, v: n.attribs.href };
}),
};
tags['init'] = tags.value[0].v;
const title = $('title:first').text().split('-')[0].substring(2);
return { cls: { type_id: tags.value[0].v, type_name: title }, tags: [tags] };
}
async function home(filter) {
let classes = [];
let filterObj = {};
for (const cate of ['/hot/index-movie-热门.html', '/hot/index-tv-热门.html']) {
const html = await request(url + cate);
const $ = load(html);
const { cls, tags } = getClass($);
classes.push(cls);
filterObj[cls.type_id] = tags;
}
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {
const html = await request(url);
const $ = load(html);
const items = $('div.v-list a.item');
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
let videos = _.map(items, (item) => {
const img = $(item).find('img:first')[0];
return {
vod_id: item.attribs.href,
vod_name: img.attribs.alt,
vod_pic: jsBase + base64Encode(img.attribs['data-src']),
vod_remarks: '',
};
});
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
const link = url + (extend.tag || tid).replace('.html', pg > 1 ? `-p-${pg}.html` : '.html');
const html = await request(link);
const $ = load(html);
const items = $('div.v-list a.item');
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
let videos = _.map(items, (item) => {
const img = $(item).find('img:first')[0];
return {
vod_id: item.attribs.href,
vod_name: img.attribs.alt,
vod_pic: jsBase + base64Encode(img.attribs['data-src']),
vod_remarks: '',
};
});
const hasMore = $('div.page-more > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: 24,
total: 24 * pgCount,
list: videos,
});
}
async function detail(id) {
const html = await request(url + id);
const $ = load(html);
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
const detail = $('div.detail');
const remarks = $('span#line-tips').text();
let vod = {
vod_id: id,
vod_pic: jsBase + base64Encode($('div.item-root > img')[0].attribs['data-src']),
vod_remarks: '',
vod_content: remarks || '',
vod_name: $(detail).find('h2').text().trim(),
vod_year: $(detail).find('h3:nth-child(3)').text(),
vod_area: $(detail).find('h3:nth-child(4)').text(),
vod_actor: $(detail).find('h3:nth-child(5)').text(),
};
const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2&token=9109590b194731fde643ce27924fcf6f', {
headers: {
Referer: 'play',
'User-Agent': UA,
},
});
const list = JSON.parse(res.content).data.list;
let playlist = {};
let arr = []
for (const l of list) {
const flagData = JSON.parse(l.resData);
for (const f of flagData) {
const from = f.flag;
const urls = f.url;
if (!from || !urls) continue;
if (playlist[from]) continue;
playlist[from] = urls;
}
}
for (var key in playlist) {
if ('kuaikan' == key) {
arr.push({
flag: '快看',
url: playlist[key],
sort: 1
})
} else if ('bfzym3u8' == key) {
arr.push({
flag: '暴风',
url: playlist[key],
sort: 2
})
} else if ('ffm3u8' == key) {
arr.push({
flag: '非凡',
url: playlist[key],
sort: 3
})
} else if ('lzm3u8' == key) {
arr.push({
flag: '量子',
url: playlist[key],
sort: 4
})
} else {
arr.push({
flag: key,
url: playlist[key],
sort: 5
})
}
}
arr.sort((a, b) => a.sort - b.sort);
let playFrom = [];
let playList = [];
arr.map(val => {
playFrom.push(val.flag);
playList.push(val.url);
})
vod.vod_play_from = playFrom.join("$$$");
vod.vod_play_url = playList.join("$$$");
return JSON.stringify({
list: [vod],
});
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
async function proxy(segments, headers) {
let what = segments[0];
let url = base64Decode(segments[1]);
if (what == 'img') {
var resp = await req(url, {
buffer: 2,
headers: {
Referer: url,
'User-Agent': UA,
},
});
return JSON.stringify({
code: resp.code,
buffer: 2,
content: resp.content,
headers: resp.headers,
});
}
return JSON.stringify({
code: 500,
content: '',
});
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
const html = await request(url + '/search?q=' + wd + '&p=' + pg);
const $ = load(html);
const items = $('div.media');
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
let videos = _.map(items, (item) => {
const a = $(item).find('a:first')[0];
const img = $(item).find('img:first')[0];
const remarks = $($(item).find('span.label')[0]).text().trim();
return {
vod_id: a.attribs.href,
vod_name: img.attribs.alt,
vod_pic: jsBase + base64Encode(img.attribs['data-src']),
vod_remarks: remarks || '',
};
});
const hasMore = $('div.page-more > a:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
proxy: proxy,
search: search,
};
}

206
cat/js/jiohub.js Normal file
View File

@ -0,0 +1,206 @@
import { Crypto, load, _, dayjs } from './lib/cat.js';
let key = 'jiohub';
let url = 'https://jiohub.top';
let siteKey = '';
let siteType = 0;
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
const cookie = {};
async function request(reqUrl, referer, mth, data, hd) {
const headers = {
'User-Agent': UA,
Cookie: _.map(cookie, (value, key) => {
return `${key}=${value}`;
}).join(';'),
};
if (referer) headers.referer = encodeURIComponent(referer);
let res = await req(reqUrl, {
method: mth || 'get',
headers: headers,
data: data,
postType: mth === 'post' ? 'form' : '',
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
const html = await request(url);
const $ = load(html);
const series = $('.nav-list a[href*=/video]');
let classes = _.map(series, (s) => {
let typeId = s.attribs['href'];
let typeName = typeId.match(/\/video\/(.*)\?/)[1];
typeName = decodeURIComponent(typeName);
return {
type_id: typeName,
type_name: typeName,
};
});
return JSON.stringify({
class: classes,
});
}
async function homeVod() {
return '{}';
}
async function category(tid, pg, filter, extend) {
let page = pg || 1;
if (page == 0) page = 1;
const link = url + '/video/' + tid + "?page=" + page + '&size=18';
const html = await request(link);
const $ = load(html);
const items = $('div.content-body > a');
let videos = _.map(items, (item) => {
const img = $(item).find('img:first')[0].attribs['src'];
const a = item.attribs['href'].match(/\/watch\/(.*)/)[1];
const n = ($(item).find('p.card-title')[0]).children[0].data;
let speed = ($(item).find('p.item-speed')[0]).children[0].data || '';
const score = ($(item).find('p.score')[0]).children[0].data || '';
if (speed == tid) speed = '';
return {
vod_id: a,
vod_name: n,
vod_pic: img,
vod_remarks: speed || score || '',
};
});
let total = 18;
const pag = $('ui-pagination');
if (pag.length > 0) {
try {
total = parseInt(pag[0].attribs['total']);
} catch (error) {
}
}
return JSON.stringify({
page: page,
pagecount: _.ceil(total / 18),
list: videos,
});
}
function stripHtmlTag(src) {
return src
.replace(/<\/?[^>]+(>|$)/g, '')
.replace(/&.{1,5};/g, '')
.replace(/\s{2,}/g, ' ');
}
async function detail(id) {
const html = await request(url + '/watch/' + id);
const $ = load(html);
const detail = $('div.content-detail > p');
let vod = {
vod_id: id,
vod_content: stripHtmlTag($('div.content-detail span.detail-sketch').html()).trim(),
};
for (const info of detail) {
const i = $(info).text().trim();
if (i.startsWith('地区:')) {
vod.vod_area = i.substring(3);
} else if (i.startsWith('年份:')) {
vod.vod_year = i.substring(3);
} else if (i.startsWith('类型:')) {
vod.vod_type = i.substring(3);
} else if (i.startsWith('导演:')) {
vod.vod_director = i.substring(3);
} else if (i.startsWith('主演:')) {
vod.vod_actor = i.substring(3);
} else if (i.startsWith('语言:')) {
vod.vod_lang = i.substring(3);
}
}
const urls = html.match(/let urls = \"(.*)\";/)[1].replace(/_/g, '/').replace(/-/g, '+');
var key = Crypto.enc.Utf8.parse("cf2d1a-6a4d-9ef8");
var playlist = Crypto.AES.decrypt(urls, key, { iv: key, padding: Crypto.pad.Pkcs7 });
playlist = Crypto.enc.Utf8.stringify(playlist).split('\n');
vod.vod_play_from = 'JOJO';
vod.vod_play_url = playlist.join('#');
return JSON.stringify({
list: [vod],
});
}
function playPid() {
var key = Crypto.enc.Utf8.parse('VSmJTRRE'+dayjs().format('YYYYMMDD'));
var iv = Crypto.enc.Hex.parse("00000000000000000000000000000000");
var pid = Crypto.AES.encrypt(dayjs().format('YYYY-MM-DD HH:mm'), key, { iv: iv, padding: Crypto.pad.Pkcs7 });
pid = pid.toString().replace(/\+/g, '-');
return pid;
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id + '?pid=' + playPid(),
header: {
'User-Agent': UA,
},
});
}
async function search(wd, quick, pg) {
let page = pg || 1;
if (page == 0) page = 1;
const link = url + '/video/search?q=' + wd + "&page=" + page + '&size=18&pid=' + playPid();
const html = await request(link);
const $ = load(html);
const items = $('div.content-body > a');
let videos = _.map(items, (item) => {
const img = $(item).find('img:first')[0].attribs['src'];
const a = item.attribs['href'].match(/\/watch\/(.*)/)[1];
const n = ($(item).find('p.card-title')[0]).children[0].data;
let speed = ($(item).find('p.item-speed')[0]).children[0].data || '';
const score = ($(item).find('p.score')[0]).children[0].data || '';
if (speed == '电影') speed = '';
return {
vod_id: a,
vod_name: n,
vod_pic: img,
vod_remarks: speed || score || '',
};
});
let total = 18;
const pag = $('ui-pagination');
if (pag.length > 0) {
try {
total = parseInt(pag[0].attribs['total']);
} catch (error) {
}
}
return JSON.stringify({
page: page,
pagecount: _.ceil(total / 18),
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/jojo_open.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/kunyu77.js Normal file

File diff suppressed because one or more lines are too long

346
cat/js/kunyu77_open.js Normal file
View File

@ -0,0 +1,346 @@
import { Crypto, dayjs, jinja2, Uri, _ } from './lib/cat.js';
let key = 'kunyu77';
let url = 'http://api.tyun77.cn';
let device = {};
let timeOffset = 0;
let siteKey = '';
let siteType = 0;
async function request(reqUrl, agentSp) {
let sj = dayjs().unix() - timeOffset;
let uri = new Uri(reqUrl);
uri.addQueryParam('pcode', '010110005');
uri.addQueryParam('version', '2.1.6');
uri.addQueryParam('devid', device.id);
uri.addQueryParam('package', 'com.sevenVideo.app.android');
uri.addQueryParam('sys', 'android');
uri.addQueryParam('sysver', device.release);
uri.addQueryParam('brand', device.brand);
uri.addQueryParam('model', device.model.replaceAll(' ', '_'));
uri.addQueryParam('sj', sj);
let keys = [];
for (var i = 0; i < uri.queryPairs.length; i++) {
keys.push(uri.queryPairs[i][0]);
}
keys = _.sortBy(keys, function (name) {
return name;
});
let tkSrc = uri.path();
for (let k of keys) {
let v = uri.getQueryParamValue(k);
v = encodeURIComponent(v);
tkSrc += v;
}
tkSrc += sj;
tkSrc += 'XSpeUFjJ';
console.log(tkSrc);
let tk = Crypto.MD5(tkSrc).toString().toLowerCase();
console.log(tk);
let header = {
'user-agent': agentSp || 'okhttp/3.12.0',
t: sj,
TK: tk,
};
let res = await req(uri.toString(), {
headers: header,
});
let serverTime = res.headers.date; // dart all response header key is lowercase
let content = res.content;
let serverTimeS = dayjs(serverTime).unix();
timeOffset = dayjs().unix() - serverTimeS;
// console.log(content);
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
var deviceKey = 'device';
var deviceInfo = await local.get(key, deviceKey);
if (deviceInfo.length > 0) {
try {
device = JSON.parse(deviceInfo);
} catch (error) {}
}
if (_.isEmpty(device)) {
device = randDevice();
device.id = randStr(32).toLowerCase();
device.ua = 'Dalvik/2.1.0 (Linux; U; Android ' + device.release + '; ' + device.model + ' Build/' + device.buildId + ')';
await local.set(key, deviceKey, JSON.stringify(device));
}
await request(url + '/api.php/provide/getDomain');
await request(url + '/api.php/provide/config');
await request(url + '/api.php/provide/checkUpgrade');
await request(url + '/api.php/provide/channel');
}
async function home(filter) {
let data = JSON.parse(await request(url + '/api.php/provide/filter')).data;
let classes = [];
let filterObj = {};
let filterAll = [];
for (const key in data) {
classes.push({
type_id: key,
type_name: data[key][0].cat,
});
if (!filter) continue;
try {
let typeId = key.toString();
if (_.isEmpty(filterAll)) {
let filterData = JSON.parse(await request(url + '/api.php/provide/searchFilter?type_id=0&pagenum=1&pagesize=1')).data.conditions;
// console.log(filterData);
// 年份
let year = {
key: 'year',
name: '年份',
init: '',
};
let yearValues = [];
yearValues.push({ n: '全部', v: '' });
filterData.y.forEach((e) => {
yearValues.push({ n: e.name, v: e.value });
});
year['value'] = yearValues;
// 地区
let area = {
key: 'area',
name: '地区',
init: '',
};
let areaValues = [];
areaValues.push({ n: '全部', v: '' });
filterData.a.forEach((e) => {
areaValues.push({ n: e.name, v: e.value });
});
area['value'] = areaValues;
// 类型
let type = {
key: 'category',
name: '类型',
init: '',
};
let typeValues = [];
typeValues.push({ n: '全部', v: '' });
filterData.scat.forEach((e) => {
typeValues.push({ n: e.name, v: e.value });
});
type['value'] = typeValues;
filterAll.push(year, area, type);
}
if (!_.isEmpty(filterAll)) {
filterObj[typeId] = filterAll;
}
} catch (e) {
console.log(e);
}
}
// console.log(classes);
// console.log(filterObj);
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {
let data = JSON.parse(await request(url + '/api.php/provide/homeBlock?type_id=0')).data;
let blocks = data.blocks;
let videos = [];
for (const block of blocks) {
let name = block.block_name;
if (name.indexOf('热播') >= 0) continue;
let contents = block.contents;
for (const content of contents) {
videos.push({
vod_id: content.id,
vod_name: content.title,
vod_pic: content.videoCover,
vod_remarks: content.msg,
});
}
}
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
let reqUrl = url + '/api.php/provide/searchFilter?type_id=' + tid + '&pagenum=' + pg + '&pagesize=24&';
reqUrl += jinja2('year={{ext.year}}&category={{ext.category}}&area={{ext.area}}', { ext: extend });
let data = JSON.parse(await request(reqUrl)).data;
let videos = [];
for (const vod of data.result) {
videos.push({
vod_id: vod.id,
vod_name: vod.title,
vod_pic: vod.videoCover,
vod_remarks: vod.msg,
});
}
return JSON.stringify({
page: parseInt(data.page),
pagecount: data.pagesize,
limit: 24,
total: data.total,
list: videos,
});
}
async function detail(id) {
let data = JSON.parse(await request(url + '/api.php/provide/videoDetail?ids=' + id)).data;
console.log(data);
let vod = {
vod_id: data.id,
vod_name: data.videoName,
vod_pic: data.videoCover,
type_name: data.subCategory,
vod_year: data.year,
vod_area: data.area,
vod_remarks: data.msg,
vod_actor: data.actor,
vod_director: data.director,
vod_content: data.brief.trim(),
};
let episodes = JSON.parse(await request(url + '/api.php/provide/videoPlaylist?ids=' + id)).data.episodes;
let playlist = {};
for (const episode of episodes) {
let playurls = episode.playurls;
for (const playurl of playurls) {
let from = playurl.playfrom;
let t = formatPlayUrl(vod.vod_name, playurl.title);
if (t.length == 0) t = playurl.title.trim();
if (!playlist.hasOwnProperty(from)) {
playlist[from] = [];
}
playlist[from].push(t + '$' + playurl.playurl);
}
}
vod.vod_play_from = _.keys(playlist).join('$$$');
let urls = _.values(playlist);
let vod_play_url = [];
for (const urlist of urls) {
vod_play_url.push(urlist.join('#'));
}
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
try {
let data = JSON.parse(await request(url + '/api.php/provide/parserUrl?url=' + id + '&retryNum=0')).data;
let playHeader = data.playHeader;
let jxUrl = data.url;
let res = await req(jxUrl, {
headers: {
'user-agent': 'okhttp/3.12.0',
},
});
let result = jsonParse(id, JSON.parse(res.content));
result['parse'] = 0;
if (playHeader) {
result.header = _.merge(result.header, playHeader);
}
return JSON.stringify(result);
} catch (e) {
return JSON.stringify({
parse: 0,
url: id,
});
}
}
async function search(wd, quick, pg) {
let page = pg || 1;
if (page == 0) page = 1;
let data = JSON.parse(await request(url + '/api.php/provide/searchVideo?searchName=' + wd + '&pg=' + page, 'okhttp/3.12.0'));
let videos = [];
for (const vod of data.data) {
videos.push({
vod_id: vod.id,
vod_name: vod.videoName,
vod_pic: vod.videoCover,
vod_remarks: vod.msg,
});
}
return JSON.stringify({
page: page,
pagecount: data.pages,
list: videos,
});
}
const charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789';
function randStr(len, withNum) {
var _str = '';
let containsNum = withNum === undefined ? true : withNum;
for (var i = 0; i < len; i++) {
let idx = _.random(0, containsNum ? charStr.length - 1 : charStr.length - 11);
_str += charStr[idx];
}
return _str;
}
function randDevice() {
return {
brand: 'Huawei',
model: 'HUAWEI Mate 20',
release: '10',
buildId: randStr(3, false).toUpperCase() + _.random(11, 99) + randStr(1, false).toUpperCase(),
};
}
function formatPlayUrl(src, name) {
return name
.trim()
.replaceAll(src, '')
.replace(/<|>|《|》/g, '')
.replace(/\$|#/g, ' ')
.trim();
}
function jsonParse(input, json) {
try {
let url = json.url ?? '';
if (url.startsWith('//')) {
url = 'https:' + url;
}
if (!url.startsWith('http')) {
return {};
}
let headers = json['headers'] || {};
let ua = (json['user-agent'] || '').trim();
if (ua.length > 0) {
headers['User-Agent'] = ua;
}
let referer = (json['referer'] || '').trim();
if (referer.length > 0) {
headers['Referer'] = referer;
}
return {
header: headers,
url: url,
};
} catch (error) {
console.log(error);
}
return {};
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/wogg.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/xiaoya_open.js Normal file

File diff suppressed because one or more lines are too long

195
cat/js/xinshijue_open.js Normal file
View File

@ -0,0 +1,195 @@
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
let key = 'xinshijue';
let HOST = 'https://www.hdmyy.com';
let siteKey = '';
let siteType = 0;
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
async function request(reqUrl, timeout = 20000) {
let res = await req(reqUrl, {
method: 'get',
headers: {
'User-Agent': UA,
'Referer': HOST
},
timeout: timeout,
});
return res.content;
}
// cfg = {skey: siteKey, ext: extend}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{'type_id':1,'type_name':'电影'},{'type_id':2,'type_name':'电视剧'},{'type_id':3,'type_name':'综艺'},{'type_id':4,'type_name':'动漫'},{'type_id':63,'type_name':'纪录片'}];
let filterObj = {
'1':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'喜剧','v':'喜剧'},{'n':'爱情','v':'爱情'},{'n':'恐怖','v':'恐怖'},{'n':'动作','v':'动作'},{'n':'科幻','v':'科幻'},{'n':'剧情','v':'剧情'},{'n':'战争','v':'战争'},{'n':'警匪','v':'警匪'},{'n':'犯罪','v':'犯罪'},{'n':'动画','v':'动画'},{'n':'奇幻','v':'奇幻'},{'n':'武侠','v':'武侠'},{'n':'冒险','v':'冒险'},{'n':'枪战','v':'枪战'},{'n':'恐怖','v':'恐怖'},{'n':'悬疑','v':'悬疑'},{'n':'惊悚','v':'惊悚'},{'n':'经典','v':'经典'},{'n':'青春','v':'青春'},{'n':'文艺','v':'文艺'},{'n':'微电影','v':'微电影'},{'n':'古装','v':'古装'},{'n':'历史','v':'历史'},{'n':'运动','v':'运动'},{'n':'农村','v':'农村'},{'n':'儿童','v':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'中国香港','v':'中国香港'},{'n':'中国台湾','v':'中国台湾'},{'n':'美国','v':'美国'},{'n':'法国','v':'法国'},{'n':'英国','v':'英国'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'德国','v':'德国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'意大利','v':'意大利'},{'n':'西班牙','v':'西班牙'},{'n':'加拿大','v':'加拿大'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'2':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'爱情','v':'爱情'},{'n':'古装','v':'古装'},{'n':'悬疑','v':'悬疑'},{'n':'都市','v':'都市'},{'n':'喜剧','v':'喜剧'},{'n':'战争','v':'战争'},{'n':'剧情','v':'剧情'},{'n':'青春','v':'青春'},{'n':'历史','v':'历史'},{'n':'网剧','v':'网剧'},{'n':'奇幻','v':'奇幻'},{'n':'冒险','v':'冒险'},{'n':'励志','v':'励志'},{'n':'犯罪','v':'犯罪'},{'n':'商战','v':'商战'},{'n':'恐怖','v':'恐怖'},{'n':'穿越','v':'穿越'},{'n':'农村','v':'农村'},{'n':'人物','v':'人物'},{'n':'商业','v':'商业'},{'n':'生活','v':'生活'},{'n':'短剧','v':'短剧'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'中国香港','v':'中国香港'},{'n':'中国台湾','v':'中国台湾'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'英国','v':'英国'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'3':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'音乐','v':'音乐'},{'n':'情感','v':'情感'},{'n':'生活','v':'生活'},{'n':'职场','v':'职场'},{'n':'真人秀','v':'真人秀'},{'n':'搞笑','v':'搞笑'},{'n':'公益','v':'公益'},{'n':'艺术','v':'艺术'},{'n':'访谈','v':'访谈'},{'n':'益智','v':'益智'},{'n':'体育','v':'体育'},{'n':'少儿','v':'少儿'},{'n':'时尚','v':'时尚'},{'n':'人物','v':'人物'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'港台','v':'港台'},{'n':'韩国','v':'韩国'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'4':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'冒险','v':'冒险'},{'n':'战斗','v':'战斗'},{'n':'搞笑','v':'搞笑'},{'n':'经典','v':'经典'},{'n':'科幻','v':'科幻'},{'n':'玄幻','v':'玄幻'},{'n':'魔幻','v':'魔幻'},{'n':'武侠','v':'武侠'},{'n':'恋爱','v':'恋爱'},{'n':'推理','v':'推理'},{'n':'日常','v':'日常'},{'n':'校园','v':'校园'},{'n':'悬疑','v':'悬疑'},{'n':'真人','v':'真人'},{'n':'历史','v':'历史'},{'n':'竞技','v':'竞技'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'中国大陆','v':'中国大陆'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
'63':[{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
};
return JSON.stringify({
class: classes,
filters: filterObj,
});
}
async function homeVod() {}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let page = '';
if (pg > 1) {
page = pg;
}
const link = HOST + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || '') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '-' + (extend.letter || '') + '---' + page + '---' + (extend.year || '') + '.html';
const html = await request(link);
const $ = load(html);
const items = $('.module-list .module-item');
const videos = _.map(items, (item) => {
const $item = $(item);
const link = $item.find('.module-item-content a:first').attr('href');
const title = $item.find('.video-name').text().trim();
const img = $item.find('.module-item-pic img:first').attr('data-src');
const remarks = $item.find('.module-item-text').text().trim();
return {
vod_id: link.replace(/.*?\/video\/(.*).html/g, '$1'),
vod_name: title,
vod_pic: img,
vod_remarks: remarks || '',
};
});
const hasMore = $('#page a.page-next:contains(下一页)').length > 0;
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
const limit = 40;
return JSON.stringify({
page: parseInt(pg),
pagecount: pgCount,
limit: limit,
total: limit * pgCount,
list: videos,
});
}
async function detail(id) {
const html = await request(HOST + '/video/' + id + '.html');
const $ = load(html);
const vod = {
vod_id: id,
vod_name: $('h1.page-title').text().trim(),
vod_type: $('.video-info-aux a.tag-link:first').text().trim(),
vod_area: $('.video-info-aux a.tag-link:eq(2)').text().trim(),
vod_year: $('.video-info-aux a.tag-link:eq(1)').text().trim(),
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).trim().replace(/(^\/|\/$)/g, '').trim(),
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).trim().replace(/(^\/|\/$)/g, '').trim(),
vod_pic: $('.video-cover img:first').attr('data-src'),
vod_remarks : $('.video-info-main .video-info-items:contains(备注:)').text().substring(3) || '',
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3).trim().replace(/收起$/g, ''),
};
const playMap = {};
const tabs = $('.module-player-tab .module-tab-item');
const playlists = $('.module-player-list > .module-blocklist');
_.each(tabs, (tab, i) => {
const $tab = $(tab);
const from = $tab.find('span:first').text().trim();
if (from.includes('夸克')) return;
let list = playlists[i];
list = $(list).find('a');
_.each(list, (it) => {
const $it = $(it);
const title = $it.find('span:first').text().trim();
const playUrl = $it.attr('href');
if (!playMap.hasOwnProperty(from)) {
playMap[from] = [];
}
playMap[from].push(title + '$' + playUrl);
});
});
vod.vod_play_from = _.keys(playMap).join('$$$');
const urls = _.values(playMap);
const vod_play_url = _.map(urls, (urlist) => {
return urlist.join('#');
});
vod.vod_play_url = vod_play_url.join('$$$');
return JSON.stringify({
list: [vod],
});
}
async function play(flag, id, flags) {
const link = HOST + id;
const html = await request(link);
let $ = load(html);
let json = $('script:contains(player_aaaa)').text().replace('var player_aaaa=','');
let js = JSON.parse(json);
let playUrl = js.url;
if (js.encrypt == 1) {
playUrl = unescape(playUrl);
} else if (js.encrypt == 2) {
playUrl = unescape(base64Decode(playUrl));
}
let playHtml = await request('https://jx3.xn--1lq90i13mxk5bolhm8k.xn--fiqs8s/player/ec.php?code=ak&if=1&url=' + playUrl);
json = playHtml.match(/let ConFig = {([\w\W]*)},box/)[1];
const jsConfig = JSON.parse('{' + json.trim() + '}');
playUrl = decryptUrl(jsConfig);
return JSON.stringify({
parse: 0,
url: playUrl,
header: {
'User-Agent': UA,
}
});
}
function decryptUrl(jsConfig) {
const key = Crypto.enc.Utf8.parse('2890' + jsConfig.config.uid + 'tB959C');
const iv = Crypto.enc.Utf8.parse('2F131BE91247866E');
const mode = Crypto.mode.CBC;
const padding = Crypto.pad.Pkcs7;
const decrypted = Crypto.AES.decrypt(jsConfig.url, key, {
'iv': iv,
'mode': mode,
'padding': padding
});
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
return decryptedUrl;
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
async function search(wd, quick, pg) {
let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&limit=50&wd=' + wd)).list;
let videos = [];
for (const vod of data) {
videos.push({
vod_id: vod.id,
vod_name: vod.name,
vod_pic: vod.pic,
vod_remarks: '',
});
}
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/yrzj.js Normal file

File diff suppressed because one or more lines are too long

272
cat/js/ys996_open.js Normal file
View File

@ -0,0 +1,272 @@
import { Crypto, load, _ } from './lib/cat.js';
let siteUrl = 'https://www.cs1369.com';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
}
async function home(filter) {
let classes = [{
type_id: '1',
type_name: '电影',
},{
type_id: '2',
type_name: '电视',
},{
type_id: '3',
type_name: '动漫',
}];
let filterObj = genFilterObj();
return JSON.stringify({
class: classes,
filters: filterObj
});
}
async function homeVod() {
let videos = await getVideos(siteUrl);
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
let url = siteUrl;
if (filter) {
url = url + '/show';
let area = extend['area'];
if (area && area != '') {
url = url + '/area/' + area;
}
let clazz = extend['class']
if (clazz && clazz != '') {
url = url + '/class/' + clazz;
}
let id = extend['id'];
if(id && id != '') {
url = url + '/id/' + id;
} else {
url = url + '/id/' + tid;
}
let year = extend['year'];
if (year && year != '') {
url = url + '/year/' + year;
}
if (pg && pg > 1) {
url = url + '/page/' + pg;
}
url = url + '.html';
} else {
url = url + '/vod/type';
url = url + '/id/' + tid;
if (pg && pg > 1) {
url = url + '/page/' + pg;
}
url = url + '.html';
}
//console.log('cate page url:', url);
let videos = await getVideos(url);
return JSON.stringify({
list: videos,
page: pg
});
}
async function detail(id) {
try {
let url = siteUrl + id;
const html = await request(url);
const $ = load(html);
let actors = _.map($('div.stui-content__detail > p:nth-child(3) > a'), (n) => {
return $(n).text();
});
let actor = actors.join(' ');
let director = $('div.stui-content__detail > p:nth-child(4) > a').text();
let title = $('div.stui-content__detail > h1.title').text();
let content = $('div.stui-pannel_bd > p').text();
const cards = $('div.stui-pannel_bd.col-pd.clearfix > ul > li > a');
let playUrls = _.map(cards, (n) => {
return $(n).text() + '$' + n.attribs['href'];
});
const video = {
vod_actor: actor,
vod_play_from: 'Leospring',
vod_play_url: playUrls.join('#'),
vod_director: director,
vod_content: content,
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {
//console.log('err', e);
}
return null;
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search/wd/' + wd + '.html';
//console.log('search url:', url);
const html = await request(url);
const $ = load(html);
const cards = $('div.stui-pannel_bd > ul.stui-vodlist__media.col-pd.clearfix > li');
let videos = _.map(cards, (n) => {
let id = $($(n).find('div.thumb > a')[0]).attr('href');
let name = $($(n).find('div.thumb > a')[0]).attr('title');
let pic = $($(n).find('div.thumb > a')[0]).attr('data-original');
let remark = $($(n).find('div.thumb > a > span:nth-child(2)')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
async function play(flag, id, flags) {
let url = siteUrl + id;
const html = await request(url);
const $ = load(html);
let info = '';
for(const n of $('script')) {
if($(n).text().indexOf('player_aaaa=') > 0) {
info = $(n).text().split('player_aaaa=')[1];
break;
}
}
//console.log('info', info);
let obj = JSON.parse(info);
let playUrl = obj.url;
if(obj.encrypt == 1) {
playUrl = unescape(playUrl);
} else if (obj.encrypt == 2) {
playUrl = unescape(base64Decode(playUrl))
}
return JSON.stringify({
parse: 0,
url: playUrl,
});
}
function genFilterObj() {
return {
'1':[
{
key: 'id',
name: '类型',
value: [{n:'全部',v:''},{n:'动作片',v:'6'},{n:'喜剧片',v:'7'},{n:'爱情片',v:'8'},{n:'科幻片',v:'9'},{n:'恐怖片',v:'10'},{n:'剧情片',v:'11'},{n:'战争片',v:'12'},{n:'动画片',v:'13'},{n:'纪录片',v:'14'}]
},{
key: 'class',
name: '剧情',
value: [{n:'全部',v:''},{n:'喜剧',v:'喜剧'},{n:'爱情',v:'爱情'},{n:'恐怖',v:'恐怖'},{n:'动作',v:'动作'},{n:'科幻',v:'科幻'},{n:'剧情',v:'剧情'},{n:'战争',v:'战争'},{n:'警匪',v:'警匪'},{n:'犯罪',v:'犯罪'},{n:'动画',v:'动画'},{n:'奇幻',v:'奇幻'},{n:'武侠',v:'武侠'},{n:'冒险',v:'冒险'},{n:'枪战',v:'枪战'},{n:'悬疑',v:'悬疑'},{n:'惊悚',v:'惊悚'},{n:'经典',v:'经典'},{n:'青春',v:'青春'},{n:'文艺',v:'文艺'},{n:'微电影',v:'微电影'},{n:'古装',v:'古装'},{n:'历史',v:'历史'},{n:'运动',v:'运动'},{n:'农村',v:'农村'},{n:'儿童',v:'儿童'},{n:'网络电影',v:'网络电影'}]
},{
key: 'area',
name: '地区',
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
},{
key: 'year',
name: '年份',
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
}],
'2':[{
key: 'id',
name: '类型',
value: [{n:'全部',v:''},{n:'内地',v:'15'},{n:'美国',v:'16'},{n:'英国',v:'17'},{n:'韩国',v:'18'},{n:'泰国',v:'20'},{n:'日本',v:'21'},{n:'香港',v:'22'},{n:'台湾',v:'23'}]
},{
key: 'class',
name: '剧情',
value: [{n:'全部',v:''},{n:'古装',v:'古装'},{n:'战争',v:'战争'},{n:'青春偶像',v:'青春偶像'},{n:'喜剧',v:'喜剧'},{n:'家庭',v:'家庭'},{n:'犯罪',v:'犯罪'},{n:'动作',v:'动作'},{n:'奇幻',v:'奇幻'},{n:'剧情',v:'剧情'},{n:'历史',v:'历史'},{n:'经典',v:'经典'},{n:'乡村',v:'乡村'},{n:'情景',v:'情景'},{n:'商战',v:'商战'},{n:'网剧',v:'网剧'}]
},{
key: 'area',
name: '地区',
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
},{
key: 'year',
name: '年份',
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
}],
'3':[{
key: 'id',
name: '类型',
value: [{n:'全部',v:''},{n:'内地',v:'25'},{n:'日漫',v:'26'},{n:'欧美',v:'27'},{n:'其他',v:'28'}]
},{
key: 'class',
name: '剧情',
value: [{n:'全部',v:''},{n:'情感',v:'情感'},{n:'科幻',v:'科幻'},{n:'热血',v:'热血'},{n:'推理',v:'推理'},{n:'搞笑',v:'搞笑'},{n:'冒险',v:'冒险'},{n:'萝莉',v:'萝莉'},{n:'校园',v:'校园'},{n:'动作',v:'动作'},{n:'机战',v:'机战'},{n:'运动',v:'运动'},{n:'战争',v:'战争'},{n:'少年',v:'少年'},{n:'少女',v:'少女'},{n:'社会',v:'社会'},{n:'原创',v:'原创'},{n:'亲子',v:'亲子'},{n:'益智',v:'益智'},{n:'励志',v:'励志'}]
},{
key: 'area',
name: '地区',
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
},{
key: 'year',
name: '年份',
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
}]
}
}
async function getVideos(url) {
const html = await request(url);
const $ = load(html);
const cards = $('div.stui-vodlist__box > a')
let videos = _.map(cards, (n) => {
let id = n.attribs['href'];
let name = n.attribs['title'];
let pic = n.attribs['data-original'];
let remark = $($(n).find('span:nth-child(2)')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
};
});
return videos;
}
function base64Encode(text) {
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
}
function base64Decode(text) {
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

1
cat/js/yt.js Normal file

File diff suppressed because one or more lines are too long

1
cat/js/yzys.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

162
cat/js/zzmusic_book_open.js Normal file
View File

@ -0,0 +1,162 @@
import { Crypto, load, _ } from './lib/cat.js';
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
let imgUrl = 'https://music.jsbaidu.com';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
if (cfg.ext) {
siteUrl = cfg.ext;
}
}
async function home(filter) {
const html = await request(siteUrl);
const $ = load(html);
const cates = $('ul.aside-menu-list.channel > li')
let classes = _.map(cates, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('a > span')[0]).text();
return {
type_id: id,
type_name: name,
};
});
return JSON.stringify({
class: classes,
});
}
async function homeVod() {
const html = await request(siteUrl);
const $ = load(html);
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div')
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
book_id: id,
book_name: name,
book_pic: pic,
book_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let url = siteUrl + '/ajax/';
let res = await req(url, {
method: 'post',
data: {
act: 'tag_music',
type: 'tuijian',
tid: tid,
page: pg,
lang: '',
},
postType: 'form',
});
//console.log('catedata:', res);
let data = JSON.parse(res.content).data;
let videos = [];
for(let i=0;i<data.length;i++){
const item = data[i];
videos.push({
book_id: item['mp3'],
book_name: item['mname'],
book_pic: item['pic'].replace('/img', imgUrl),
book_remarks: item['play_time'],
})
}
return JSON.stringify({
list: videos,
});
}
async function detail(id) {
try {
let playUrl = id;
if(!id.startsWith('http')) {
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
}
const video = {
book_id: id,
book_actor: 'Leospring',
book_play_from: 'Leospring',
urls: '播放$' + playUrl,
book_director: 'Leospring',
book_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {}
return null;
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search/?key=' + wd;
const html = await request(url);
const $ = load(html);
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
book_id: id,
book_name: name,
book_pic: pic,
book_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}

163
cat/js/zzmusic_open.js Normal file
View File

@ -0,0 +1,163 @@
import { Crypto, load, _ } from './lib/cat.js';
//代理地址
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
let imgUrl = 'https://music.jsbaidu.com';
let siteKey = '';
let siteType = 0;
let headers = {};
async function request(reqUrl, postData, agentSp, get) {
let res = await req(reqUrl, {
method: get ? 'get' : 'post',
headers: headers,
data: postData || {},
postType: get ? '' : 'form',
});
let content = res.content;
return content;
}
async function init(cfg) {
siteKey = cfg.skey;
siteType = cfg.stype;
if (cfg.ext) {
siteUrl = cfg.ext;
}
}
async function home(filter) {
const html = await request(siteUrl);
const $ = load(html);
const cates = $('ul.aside-menu-list.channel > li')
let classes = _.map(cates, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('a > span')[0]).text();
return {
type_id: id,
type_name: name
};
});
return JSON.stringify({
class: classes
});
}
async function homeVod() {
const html = await request(siteUrl);
const $ = load(html);
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div');
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark
};
});
return JSON.stringify({
list: videos
});
}
async function category(tid, pg, filter, extend) {
if (pg <= 0) pg = 1;
let url = siteUrl + '/ajax/';
let res = await req(url, {
method: 'post',
data: {
act: 'tag_music',
type: 'tuijian',
tid: tid,
page: pg,
lang: ''
},
postType: 'form'
});
//console.log('catedata:', res);
let data = JSON.parse(res.content).data;
let videos = [];
for(let i=0;i<data.length;i++){
const item = data[i];
videos.push({
vod_id: item['mp3'],
vod_name: item['mname'],
vod_pic: item['pic'].replace('/img', imgUrl),
vod_remarks: item['play_time']
})
}
return JSON.stringify({
list: videos
});
}
async function detail(id) {
try {
let playUrl = id;
if(!id.startsWith('http')) {
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
}
const video = {
vod_id: id,
vod_actor: 'Leospring',
vod_play_from: 'Leospring',
vod_play_url: '播放$' + playUrl,
vod_director: 'Leospring',
vod_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
};
const list = [video];
const result = { list };
return JSON.stringify(result);
} catch (e) {}
return null;
}
async function play(flag, id, flags) {
return JSON.stringify({
parse: 0,
url: id,
});
}
async function search(wd, quick, pg) {
let url = siteUrl + '/search/?key=' + wd;
const html = await request(url);
const $ = load(html);
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
let videos = _.map(cards, (n) => {
let id = n.attribs['data-id'];
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
return {
vod_id: id,
vod_name: name,
vod_pic: pic,
vod_remarks: remark,
};
});
return JSON.stringify({
list: videos,
});
}
export function __jsEvalReturn() {
return {
init: init,
home: home,
homeVod: homeVod,
category: category,
detail: detail,
play: play,
search: search,
};
}