12
This commit is contained in:
32
jtxtv12/js/夸克影视.js
Normal file
32
jtxtv12/js/夸克影视.js
Normal file
@@ -0,0 +1,32 @@
|
||||
var rule = {
|
||||
title: '夸克影视[优]',
|
||||
host: 'https://www.quarktv.com/',
|
||||
url: 'https://www.quarktv.com/category/fyclass/page/fypage',
|
||||
searchUrl: '/?s=**',
|
||||
class_parse: `.site-nav li:gt(0):lt(10);a&&Text;a&&href;.*/category/(.*/?)`,
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
filterable: 0,
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
play_parse: true,
|
||||
lazy: $js.toString(() => {
|
||||
let html = request(input);
|
||||
let url = input.startsWith('push://') ? input : 'push://' + input;
|
||||
input = {parse: 0, url: url};
|
||||
}),
|
||||
limit: 6,
|
||||
double: true,
|
||||
推荐: '.content;.excerpt;*;*;*;*',
|
||||
一级: '.content .excerpt;img&&alt;img&&data-src;.meta&&Text;a&&href',
|
||||
二级: {
|
||||
title: 'h1&&Text',
|
||||
img: '.cover img&&src',
|
||||
desc: '.article-meta&&Text;;;;',
|
||||
content: '.intro&&Text',
|
||||
tabs: "js:TABS=['下载']",
|
||||
lists: '.ul-pans li:last-child',
|
||||
},
|
||||
搜索: '*',
|
||||
};
|
||||
297
jtxtv12/js/灯泡网盘.js
Normal file
297
jtxtv12/js/灯泡网盘.js
Normal file
@@ -0,0 +1,297 @@
|
||||
/**
|
||||
title: "灯泡网盘菠菜",
|
||||
author: "",
|
||||
logo: "https://www.dp88.net/wp-content/themes/dp/cx-func/image/logo.png",
|
||||
more: {
|
||||
sourceTag: "网盘"
|
||||
}
|
||||
*/
|
||||
|
||||
import { cheerio, load, _ } from 'assets://js/lib/cat.js';
|
||||
let HOST = 'https://www.dp88.net';
|
||||
let siteKey = "", siteType = "", sourceKey = "", ext = "";
|
||||
let parseMap = {};
|
||||
const UA = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36';
|
||||
function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
sourceKey = cfg.sourceKey;
|
||||
ext = cfg.ext;
|
||||
if (ext && ext.indexOf('http') === 0) HOST = ext;
|
||||
}
|
||||
async function request(url) {
|
||||
try {
|
||||
const resp = await req(url, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'user-agent': 'Mozilla/5.0 (Linux; Android 12; ALN-AL00 Build/HUAWEIALN-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.196 Mobile Safari/537.36',
|
||||
'referer': HOST
|
||||
}
|
||||
});
|
||||
return resp.content;
|
||||
} catch (error) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function home() {
|
||||
const classes = [
|
||||
{ type_id: "3", type_name: "电影"},
|
||||
{ type_id: "2", type_name: "电视剧" },
|
||||
{ type_id: "4", type_name: "动漫" }
|
||||
];
|
||||
|
||||
const filterObj={
|
||||
|
||||
"3":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"0"},{"n":"传记","v":"26"},{"n":"冒险","v":"16"},{"n":"剧情","v":"18"},{"n":"动作","v":"9"},{"n":"动画","v":"30"},{"n":"历史","v":"25"},{"n":"古装","v":"20"},{"n":"同性","v":"27"},{"n":"喜剧","v":"7"},{"n":"奇幻","v":"15"},{"n":"家庭","v":"29"},{"n":"恐怖","v":"13"},{"n":"悬疑","v":"11"},{"n":"情爱","v":"28"},{"n":"惊悚","v":"12"},{"n":"战争","v":"19"},{"n":"歌舞","v":"23"},{"n":"武侠","v":"21"},{"n":"灾难","v":"14"},{"n":"爱情","v":"8"},{"n":"犯罪","v":"17"},{"n":"科幻","v":"10"},{"n":"纪录片","v":"31"},{"n":"西部","v":"22"},{"n":"运动","v":"32"},{"n":"音乐","v":"24"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2025","v":"187"},{"n":"2024","v":"185"},{"n":"2023","v":"62"},{"n":"2022","v":"66"},{"n":"2021","v":"67"},{"n":"2020","v":"68"},{"n":"2019","v":"65"},{"n":"2018","v":"56"},{"n":"2017","v":"69"},{"n":"2016","v":"70"},{"n":"2015","v":"71"},{"n":"2014","v":"72"},{"n":"2013","v":"73"},{"n":"2012","v":"64"},{"n":"2011","v":"74"},{"n":"2010","v":"184"},{"n":"2009","v":"75"},{"n":"2008","v":"76"},{"n":"2007","v":"77"},{"n":"2006","v":"58"},{"n":"2005","v":"78"},{"n":"2004","v":"79"},{"n":"2003","v":"80"},{"n":"2002","v":"81"},{"n":"2001","v":"82"},{"n":"2000","v":"83"},{"n":"1999","v":"84"},{"n":"1998","v":"85"},{"n":"1997","v":"86"},{"n":"1996","v":"87"},{"n":"1995","v":"88"},{"n":"1994","v":"89"},{"n":"1993","v":"90"},{"n":"1992","v":"91"},{"n":"1991","v":"92"},{"n":"1990","v":"93"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"33"},{"n":"美国","v":"34"},{"n":"韩国","v":"35"},{"n":"日本","v":"36"},{"n":"香港","v":"37"},{"n":"台湾","v":"38"},{"n":"英国","v":"39"},{"n":"法国","v":"40"},{"n":"德国","v":"41"},{"n":"意大利","v":"42"},{"n":"西班牙","v":"43"},{"n":"印度","v":"44"},{"n":"泰国","v":"45"},{"n":"俄罗斯","v":"46"},{"n":"加拿大","v":"47"},{"n":"爱尔兰","v":"48"},{"n":"瑞典","v":"49"},{"n":"巴西","v":"50"},{"n":"丹麦","v":"51"},{"n":"伊朗","v":"52"},{"n":"波兰","v":"53"},{"n":"澳大利亚","v":"54"},{"n":"其他地区","v":"55"}]},{"key":"sort","name":"排序","value":[{"n":"时间","v":"0"},{"n":"评分","v":"1"}]}],
|
||||
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"0"},{"n":"传记","v":"26"},{"n":"冒险","v":"16"},{"n":"剧情","v":"18"},{"n":"动作","v":"9"},{"n":"动画","v":"30"},{"n":"历史","v":"25"},{"n":"古装","v":"20"},{"n":"同性","v":"27"},{"n":"喜剧","v":"7"},{"n":"奇幻","v":"15"},{"n":"家庭","v":"29"},{"n":"恐怖","v":"13"},{"n":"悬疑","v":"11"},{"n":"情爱","v":"28"},{"n":"惊悚","v":"12"},{"n":"战争","v":"19"},{"n":"歌舞","v":"23"},{"n":"武侠","v":"21"},{"n":"灾难","v":"14"},{"n":"爱情","v":"8"},{"n":"犯罪","v":"17"},{"n":"科幻","v":"10"},{"n":"纪录片","v":"31"},{"n":"西部","v":"22"},{"n":"运动","v":"32"},{"n":"音乐","v":"24"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2025","v":"187"},{"n":"2024","v":"185"},{"n":"2023","v":"62"},{"n":"2022","v":"66"},{"n":"2021","v":"67"},{"n":"2020","v":"68"},{"n":"2019","v":"65"},{"n":"2018","v":"56"},{"n":"2017","v":"69"},{"n":"2016","v":"70"},{"n":"2015","v":"71"},{"n":"2014","v":"72"},{"n":"2013","v":"73"},{"n":"2012","v":"64"},{"n":"2011","v":"74"},{"n":"2010","v":"184"},{"n":"2009","v":"75"},{"n":"2008","v":"76"},{"n":"2007","v":"77"},{"n":"2006","v":"58"},{"n":"2005","v":"78"},{"n":"2004","v":"79"},{"n":"2003","v":"80"},{"n":"2002","v":"81"},{"n":"2001","v":"82"},{"n":"2000","v":"83"},{"n":"1999","v":"84"},{"n":"1998","v":"85"},{"n":"1997","v":"86"},{"n":"1996","v":"87"},{"n":"1995","v":"88"},{"n":"1994","v":"89"},{"n":"1993","v":"90"},{"n":"1992","v":"91"},{"n":"1991","v":"92"},{"n":"1990","v":"93"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"33"},{"n":"美国","v":"34"},{"n":"韩国","v":"35"},{"n":"日本","v":"36"},{"n":"香港","v":"37"},{"n":"台湾","v":"38"},{"n":"英国","v":"39"},{"n":"法国","v":"40"},{"n":"德国","v":"41"},{"n":"意大利","v":"42"},{"n":"西班牙","v":"43"},{"n":"印度","v":"44"},{"n":"泰国","v":"45"},{"n":"俄罗斯","v":"46"},{"n":"加拿大","v":"47"},{"n":"爱尔兰","v":"48"},{"n":"瑞典","v":"49"},{"n":"巴西","v":"50"},{"n":"丹麦","v":"51"},{"n":"伊朗","v":"52"},{"n":"波兰","v":"53"},{"n":"澳大利亚","v":"54"},{"n":"其他地区","v":"55"}]},{"key":"sort","name":"排序","value":[{"n":"时间","v":"0"},{"n":"评分","v":"1"}]}],
|
||||
|
||||
"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"0"},{"n":"传记","v":"26"},{"n":"冒险","v":"16"},{"n":"剧情","v":"18"},{"n":"动作","v":"9"},{"n":"动画","v":"30"},{"n":"历史","v":"25"},{"n":"古装","v":"20"},{"n":"同性","v":"27"},{"n":"喜剧","v":"7"},{"n":"奇幻","v":"15"},{"n":"家庭","v":"29"},{"n":"恐怖","v":"13"},{"n":"悬疑","v":"11"},{"n":"情爱","v":"28"},{"n":"惊悚","v":"12"},{"n":"战争","v":"19"},{"n":"歌舞","v":"23"},{"n":"武侠","v":"21"},{"n":"灾难","v":"14"},{"n":"爱情","v":"8"},{"n":"犯罪","v":"17"},{"n":"科幻","v":"10"},{"n":"纪录片","v":"31"},{"n":"西部","v":"22"},{"n":"运动","v":"32"},{"n":"音乐","v":"24"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2025","v":"187"},{"n":"2024","v":"185"},{"n":"2023","v":"62"},{"n":"2022","v":"66"},{"n":"2021","v":"67"},{"n":"2020","v":"68"},{"n":"2019","v":"65"},{"n":"2018","v":"56"},{"n":"2017","v":"69"},{"n":"2016","v":"70"},{"n":"2015","v":"71"},{"n":"2014","v":"72"},{"n":"2013","v":"73"},{"n":"2012","v":"64"},{"n":"2011","v":"74"},{"n":"2010","v":"184"},{"n":"2009","v":"75"},{"n":"2008","v":"76"},{"n":"2007","v":"77"},{"n":"2006","v":"58"},{"n":"2005","v":"78"},{"n":"2004","v":"79"},{"n":"2003","v":"80"},{"n":"2002","v":"81"},{"n":"2001","v":"82"},{"n":"2000","v":"83"},{"n":"1999","v":"84"},{"n":"1998","v":"85"},{"n":"1997","v":"86"},{"n":"1996","v":"87"},{"n":"1995","v":"88"},{"n":"1994","v":"89"},{"n":"1993","v":"90"},{"n":"1992","v":"91"},{"n":"1991","v":"92"},{"n":"1990","v":"93"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"33"},{"n":"美国","v":"34"},{"n":"韩国","v":"35"},{"n":"日本","v":"36"},{"n":"香港","v":"37"},{"n":"台湾","v":"38"},{"n":"英国","v":"39"},{"n":"法国","v":"40"},{"n":"德国","v":"41"},{"n":"意大利","v":"42"},{"n":"西班牙","v":"43"},{"n":"印度","v":"44"},{"n":"泰国","v":"45"},{"n":"俄罗斯","v":"46"},{"n":"加拿大","v":"47"},{"n":"爱尔兰","v":"48"},{"n":"瑞典","v":"49"},{"n":"巴西","v":"50"},{"n":"丹麦","v":"51"},{"n":"伊朗","v":"52"},{"n":"波兰","v":"53"},{"n":"澳大利亚","v":"54"},{"n":"其他地区","v":"55"}]},{"key":"sort","name":"排序","value":[{"n":"时间","v":"0"},{"n":"评分","v":"1"}]}]};
|
||||
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = `${HOST}/`;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('.pic-list li');
|
||||
const videos = [];
|
||||
|
||||
_.map(items, (item) => {
|
||||
const $item = $(item);
|
||||
const a = $item.find('a');
|
||||
const vod_id = a.attr('href') || '';
|
||||
const vod_name = $item.find('h3 b').text().trim() || '未知标题';
|
||||
const img = $item.find('img');
|
||||
const vod_pic_url = img.attr('data-original') || img.attr('src') || '';
|
||||
const vod_remarks = $item.find('.s1').text().trim() || "暂无分类";
|
||||
const vod_score = $item.find('.s2').text().trim() || "暂无评分";
|
||||
|
||||
videos.push({
|
||||
'vod_id': JSON.stringify({ id: vod_id, title: vod_name }),
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic_url,
|
||||
'vod_remarks': vod_remarks + (vod_score !== 'N/A' ? ` ${vod_score}分` : '')
|
||||
});
|
||||
});
|
||||
|
||||
return JSON.stringify({ list: videos });
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const homeResult = JSON.parse(await home());
|
||||
const filterObj = homeResult.filters;
|
||||
if (!filterObj) return null;
|
||||
const filterGroup = filterObj[tid];
|
||||
if (!filterGroup) return null;
|
||||
const area = getFilterValue(filterGroup, 'area', extend);
|
||||
const by = getFilterValue(filterGroup,'sort', extend);
|
||||
const classValue = getFilterValue(filterGroup, 'class', extend);
|
||||
const year = getFilterValue(filterGroup, 'year', extend);
|
||||
const cateId = getFilterValue(filterGroup, 'cateId', extend);
|
||||
|
||||
const link = `${HOST}/list/${by}_${area}_${year}_${cateId}_${tid}/${pg}/`;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('.pic-list li');
|
||||
const videos = [];
|
||||
_.map(items, (item) => {
|
||||
const $item = $(item);
|
||||
const a = $item.find('a');
|
||||
const vod_id = a.attr('href');
|
||||
const vod_name = $item.find('h3 b').text().trim() || '未知标题';
|
||||
const img = $item.find('img');
|
||||
const vod_pic_url = img.attr('data-original') || img.attr('src') || '';
|
||||
const vod_remarks = $item.find('.s1').text().trim() || "暂无备注";
|
||||
const vod_score = $item.find('.s2').text().trim() || "暂无评分";
|
||||
|
||||
videos.push({
|
||||
'vod_id': JSON.stringify({ id: vod_id, title: vod_name }),
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic_url,
|
||||
'vod_remarks': vod_remarks + (vod_score !== 'N/A' ? ` ${vod_score}分` : '')
|
||||
});
|
||||
});
|
||||
|
||||
return JSON.stringify({ list: videos });
|
||||
}
|
||||
|
||||
function getFilterValue(filterGroup, key, extend) {
|
||||
if (!Array.isArray(filterGroup) || filterGroup.length === 0) return '';
|
||||
const filterItem = filterGroup.find(item => item.key === key);
|
||||
if (!filterItem) return '';
|
||||
if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) return '';
|
||||
const userValue = extend[key];
|
||||
if (userValue) {
|
||||
const option = filterItem.value.find(opt => opt.v === userValue);
|
||||
return option? option.v : '';
|
||||
}
|
||||
return filterItem.value[0].v;
|
||||
}
|
||||
|
||||
async function search(wd) {
|
||||
const searchUrl = `${HOST}/?s=${encodeURIComponent(wd)}`;
|
||||
|
||||
try {
|
||||
const html = await request(searchUrl);
|
||||
const $ = load(html);
|
||||
|
||||
const items = $('.sr_lists li');
|
||||
const videos = [];
|
||||
|
||||
Array.from(items).forEach((item) => {
|
||||
const $item = $(item);
|
||||
const a = $item.find('h3 a');
|
||||
const img = $item.find('.sr_img img');
|
||||
const vod_id = a.attr('href');
|
||||
if (!vod_id) return;
|
||||
const vod_name = a.text().trim() || '未知标题';
|
||||
const vod_pic = img.attr('src');
|
||||
if (vod_name.toLowerCase().includes(wd.toLowerCase())) {
|
||||
videos.push({
|
||||
'vod_id': JSON.stringify({ id: vod_id, title: vod_name }),
|
||||
'vod_name': vod_name,
|
||||
'vod_pic': vod_pic
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return JSON.stringify({ list: videos });
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const ids = JSON.parse(id);
|
||||
|
||||
try {
|
||||
const html = await request(ids.id);
|
||||
if (!html) return JSON.stringify({ list: [], error: 'HTML内容为空' });
|
||||
const $ = load(html);
|
||||
const vod = {
|
||||
vod_id: ids.id,
|
||||
vod_name: $('h1').text().trim(),
|
||||
vod_type: $('.content-rt p:contains("类型:") a').map((_, el) => $(el).text().trim()).get().join('/'),
|
||||
vod_year: $('.content-rt .year').text().replace(/[()]/g, '').trim(),
|
||||
vod_area: $('.content-rt p:contains("地区:")').text().replace('地区:', '').trim(),
|
||||
vod_actor: $('.content-rt p:contains("主演:")').text().replace('主演:', '').trim(),
|
||||
vod_director: $('.content-rt p:contains("导演:")').text().replace('导演:', '').trim(),
|
||||
vod_pic: $('.img img').attr('src'),
|
||||
vod_content: $('.movie-introduce .zk_a').text().replace('展开', '').trim(),
|
||||
vod_play_from: '',
|
||||
vod_play_url: ''
|
||||
};
|
||||
const diskGroups = {};
|
||||
$('.pd-row').each((_, row) => {
|
||||
const sourceName = $(row).find('h2').text().trim();
|
||||
$(row).find('.lip a').each((_, link) => {
|
||||
const href = $(link).attr('href');
|
||||
if (href && href.startsWith('magnet:?')) return;
|
||||
const title = $(link).attr('title') || $(link).text();
|
||||
if (!diskGroups[sourceName]) { diskGroups[sourceName] = [];
|
||||
}
|
||||
diskGroups[sourceName].push(`${title}$push://${href}`);
|
||||
});
|
||||
});
|
||||
const diskPlayFrom = [];
|
||||
const diskPlayUrl = [];
|
||||
for (const [sourceName, items] of Object.entries(diskGroups)) {
|
||||
if (items.length > 0) {
|
||||
diskPlayFrom.push(sourceName);
|
||||
diskPlayUrl.push(items.join('#'));
|
||||
}
|
||||
}
|
||||
const onlinePlayFrom = [];
|
||||
const onlinePlayUrl = [];
|
||||
$('#playlist-js option').each((_, option) => {
|
||||
const sourceName = $(option).text().trim();
|
||||
const sourceId = $(option).val();
|
||||
const episodes = [];
|
||||
$(`#tabid-${sourceId} a`).each((_, link) => {
|
||||
const href = $(link).attr('href');
|
||||
if (href && href.startsWith('magnet:?')) return;
|
||||
const epName = $(link).text().trim();
|
||||
episodes.push(`${epName}$${href}`);
|
||||
});
|
||||
if (episodes.length) {
|
||||
onlinePlayFrom.push(sourceName);
|
||||
onlinePlayUrl.push(episodes.join('#'));
|
||||
}
|
||||
});
|
||||
vod.vod_play_from = [
|
||||
...diskPlayFrom,
|
||||
...onlinePlayFrom
|
||||
].join('$$$');
|
||||
vod.vod_play_url = [
|
||||
...diskPlayUrl,
|
||||
...onlinePlayUrl
|
||||
].join('$$$');
|
||||
return JSON.stringify({ list: [vod] });
|
||||
} catch (error) {
|
||||
return JSON.stringify({
|
||||
list: [],
|
||||
error: `解析失败: ${error.message}`
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
try {
|
||||
if (id.startsWith('push://')) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
header: {}
|
||||
});
|
||||
}
|
||||
const html = await request(id);
|
||||
const $ = load(html);
|
||||
const iframeSrc = $('iframe').attr('src');
|
||||
let m3u8Url;
|
||||
if (iframeSrc.includes('?url=')) {
|
||||
const parts = iframeSrc.split('?url=');
|
||||
m3u8Url = parts[1];
|
||||
} else {
|
||||
m3u8Url = iframeSrc;
|
||||
}
|
||||
if (!m3u8Url.match(/https?:\/\/[^\s]+\.m3u8/)) {
|
||||
throw new Error('未找到有效的 m3u8 链接');
|
||||
}
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: m3u8Url,
|
||||
header: {
|
||||
'User-Agent': UA,
|
||||
'Referer': id
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
return JSON.stringify({
|
||||
parse: 1,
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
detail: detail,
|
||||
category: category,
|
||||
play: play,
|
||||
proxy: null,
|
||||
search: search,
|
||||
extResult: null
|
||||
};
|
||||
}
|
||||
83
jtxtv12/js/百度短剧.js
Normal file
83
jtxtv12/js/百度短剧.js
Normal file
@@ -0,0 +1,83 @@
|
||||
var rule = {
|
||||
类型: '百度短剧',
|
||||
title: '百度短剧',
|
||||
host: 'https://api.jkyai.top',
|
||||
url: '/API/bddjss.php?page=fypage&name=fyclass',
|
||||
searchUrl: '/API/bddjss.php?page=fypage&name=**',
|
||||
searchable: 1,
|
||||
quickSearch: 1,
|
||||
timeout: 5000,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36'
|
||||
},
|
||||
class_name: '系统&重生&复仇&乡下&古代&穿越&战神&开局&逆袭&女帝&神医&总裁&萌宝&都市',
|
||||
class_url: '系统&重生&复仇&乡下&古代&穿越&战神&开局&逆袭&女帝&神医&总裁&萌宝&都市',
|
||||
play_parse: true,
|
||||
lazy: $js.toString(() => {
|
||||
let html = request(input);
|
||||
let json = JSON.parse(html);
|
||||
let qualities = json.data.qualities;
|
||||
let quality = qualities.find(q => q.quality === '1080p') ||
|
||||
qualities.find(q => q.quality === 'sc') ||
|
||||
qualities.find(q => q.quality === 'sd');
|
||||
input = { url: quality.download_url, parse: 0 };
|
||||
}),
|
||||
double: true,
|
||||
一级: $js.toString(() => {
|
||||
let d = [];
|
||||
let html = request(input);
|
||||
let json = JSON.parse(html);
|
||||
let data = json.data;
|
||||
data.forEach(it => {
|
||||
let id = 'https://api.cenguigui.cn/api/duanju/baidu/?id=' + it.id;
|
||||
d.push({
|
||||
url: id,
|
||||
title: it.title,
|
||||
year: it.type,
|
||||
desc: it.author,
|
||||
content: it.intro,
|
||||
img: it.cover,
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
二级: $js.toString(() => {
|
||||
let urls = [];
|
||||
let html = request(input);
|
||||
let json = JSON.parse(html);
|
||||
let data = json.data;
|
||||
data.forEach(it => {
|
||||
let chapterName = it.title || "未知章节";
|
||||
let videoId = it.video_id;
|
||||
let playUrl = 'https://api.cenguigui.cn/api/duanju/baidu/?video_id=' + videoId;
|
||||
urls.push(chapterName + '$' + playUrl);
|
||||
});
|
||||
VOD = {
|
||||
vod_name: json.title,
|
||||
vod_pic: '',
|
||||
vod_actor: '',
|
||||
vod_type: '',
|
||||
vod_content: '',
|
||||
vod_play_from: '百度短剧',
|
||||
vod_play_url: urls.join('#')
|
||||
};
|
||||
}),
|
||||
搜索: $js.toString(() => {
|
||||
let d = [];
|
||||
let html = request(input);
|
||||
let json = JSON.parse(html);
|
||||
let data = json.data;
|
||||
data.forEach(it => {
|
||||
let id = 'https://api.cenguigui.cn/api/duanju/baidu/?id=' + it.id;
|
||||
d.push({
|
||||
url: id,
|
||||
title: it.title,
|
||||
year: it.type,
|
||||
desc: it.author,
|
||||
content: it.intro,
|
||||
img: it.cover,
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
};
|
||||
1
jtxtv12/js/采集之王.js
Normal file
1
jtxtv12/js/采集之王.js
Normal file
File diff suppressed because one or more lines are too long
456
jtxtv12/js/采集之王2解密说明.js
Normal file
456
jtxtv12/js/采集之王2解密说明.js
Normal file
@@ -0,0 +1,456 @@
|
||||
/**
|
||||
* 强烈推荐静态分类。可以加快速度!!!
|
||||
* 不建议:
|
||||
* 传参 ?type=url¶ms=../json/采集.json
|
||||
* 建议:
|
||||
* 传参 ?type=url¶ms=../json/采集静态.json$1
|
||||
* 传参 ?type=url¶ms=../json/采集[zy]静态.json$1
|
||||
* 传参 ?type=url¶ms=../json/采集[密]静态.json$1
|
||||
* hipy-server支持@改名比如:
|
||||
* 传参 ?type=url¶ms=../json/采集静态.json$1@采王道长[合]
|
||||
* 传参 ?type=url¶ms=../json/采集[zy]静态.json$1@采王zy[密]
|
||||
* 传参 ?type=url¶ms=../json/采集[密]静态.json@采王成人[密]
|
||||
* [{"name":"暴风资源","url":"https://bfzyapi.com","parse_url":""},{"name":"飞刀资源","url":"http://www.feidaozy.com","parse_url":""},{"name":"黑木耳资源","url":"https://www.heimuer.tv","parse_url":""}]
|
||||
*/
|
||||
globalThis.getRandomItem = function (items) {//从列表随机取出一个元素
|
||||
return items[Math.random() * items.length | 0];
|
||||
}
|
||||
var rule = {
|
||||
title: '采集之王[合]',
|
||||
author: '道长',
|
||||
version: '20240706 beta17',
|
||||
update_info: `
|
||||
20240706:
|
||||
1.静态json数据支持cate_excludes分类名称列表过滤无数据分类
|
||||
2.更新采集分类生成器增加过滤筛选模式
|
||||
20240705:
|
||||
1.支持传参json后面增加$1 这样的额外标识,用于搜索结果精准匹配
|
||||
2.支持传参json后面增加$1$1 这样的额外标识,用于强制获取搜索图片。$1$不显示图片。默认是搜索强制有图片的[已实现详情页请求使用批量]
|
||||
3.修复二级数据无序匹配搜索列表图片的问题
|
||||
4.修改搜索精准和图片显示额外参数间隔符从#变为$
|
||||
20240703:
|
||||
1.采集json支持"searchable": 0,用于搜索时排除这个源
|
||||
20240604:
|
||||
1.首页推荐取消硬控等待。增加随机推荐功能。
|
||||
2.首页推荐新增更新日志查看功能
|
||||
【特别说明】目前只支持标准json格式的采集站(资源站一般都提供xml和json两种接口,目前没有支持xml的想法,没什么必要)
|
||||
有些资源站的json接口不是标准的/api.php/provide/vod/,需要自己在采集静态.json中编辑对应的api属性填写比如:/api.php/provide/vod/at/json/
|
||||
有些资源站的采集数据是加密后的切片片段,可能需要采集站特定的解析接口,需要自己编辑json里的parse_url属性
|
||||
资源站部分大分类下无数据很正常,可以自行编辑json里cate_exclude属性排除掉自己测试过无数据的分类(小程序无法自动识别,只能人工测好哪些分类无数据)
|
||||
`.trim(),
|
||||
host: '',
|
||||
homeTid: '', // 首页推荐。一般填写第一个资源站的想要的推荐分类的id.可以空
|
||||
homeUrl: '/api.php/provide/vod/?ac=detail&t={{rule.homeTid}}',
|
||||
detailUrl: '/api.php/provide/vod/?ac=detail&ids=fyid',
|
||||
searchUrl: '/api.php/provide/vod/?wd=**&pg=#TruePage##page=fypage',
|
||||
classUrl: '/api.php/provide/vod/',
|
||||
url: '/api.php/provide/vod/?ac=detail&pg=fypage&t=fyfilter',
|
||||
filter_url: '{{fl.类型}}',
|
||||
headers: {'User-Agent': 'MOBILE_UA'},
|
||||
timeout: 5000, // class_name: '电影&电视剧&综艺&动漫',
|
||||
limit: 20,
|
||||
search_limit: 5, // 搜索限制取前5个,可以注释掉,就不限制搜索
|
||||
searchable: 1,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 1,//是否启用分类筛选,
|
||||
play_parse: true,
|
||||
parse_url: '', // 这个参数暂时不起作用。聚合类的每个资源应该有自己独立的解析口。单独配置在采集.json里的parse_url有效
|
||||
search_match: false, // 搜索精准匹配
|
||||
search_pic: true, // 搜索强制需要图片
|
||||
// params: 'http://127.0.0.1:5707/files/json/%E9%87%87%E9%9B%86.json',
|
||||
// params: 'http://127.0.0.1:5707/files/json/采集静态.json$1',
|
||||
// params: 'http://127.0.0.1:5707/files/json/采集[zy]静态.json$1',
|
||||
// hostJs:$js.toString(()=>{
|
||||
//
|
||||
// }),
|
||||
预处理: $js.toString(() => {
|
||||
function getClasses(item) {
|
||||
let classes = [];
|
||||
if (item.class_name && item.class_url) {
|
||||
if (!/&|电影|电视剧|综艺|动漫[\u4E00-\u9FA5]+/.test(item.class_name)) {
|
||||
try {
|
||||
item.class_name = ungzip(item.class_name)
|
||||
} catch (e) {
|
||||
log(`不识别的class_name导致gzip解码失败:${e}`)
|
||||
return classes
|
||||
}
|
||||
}
|
||||
let names = item.class_name.split('&');
|
||||
let urls = item.class_url.split('&');
|
||||
let cnt = Math.min(names.length, urls.length);
|
||||
for (let i = 0; i < cnt; i++) {
|
||||
classes.push({
|
||||
'type_id': urls[i],
|
||||
'type_name': names[i]
|
||||
});
|
||||
}
|
||||
}
|
||||
return classes
|
||||
}
|
||||
|
||||
if (typeof (batchFetch) === 'function') {
|
||||
// 支持批量请求直接放飞自我。搜索限制最大线程数量16
|
||||
rule.search_limit = 16;
|
||||
log('当前程序支持批量请求[batchFetch],搜索限制已设置为16');
|
||||
}
|
||||
let _url = rule.params;
|
||||
log(`传入参数:${_url}`);
|
||||
if (_url && typeof (_url) === 'string' && /^(http|file)/.test(_url)) {
|
||||
if (_url.includes('$')) {
|
||||
let _url_params = _url.split('$');
|
||||
_url = _url_params[0];
|
||||
rule.search_match = !!(_url_params[1]);
|
||||
if (_url_params.length > 2) { // 强制图片
|
||||
rule.search_pic = !!(_url_params[2]);
|
||||
}
|
||||
}
|
||||
let html = request(_url);
|
||||
let json = JSON.parse(html);
|
||||
let _classes = [];
|
||||
rule.filter = {};
|
||||
rule.filter_def = {};
|
||||
json.forEach(it => {
|
||||
let _obj = {
|
||||
type_name: it.name,
|
||||
type_id: it.url,
|
||||
parse_url: it.parse_url || '',
|
||||
searchable: it.searchable !== 0,
|
||||
api: it.api || '',
|
||||
cate_exclude: it.cate_exclude || '',
|
||||
cate_excludes: it.cate_excludes || [],
|
||||
// class_name: it.class_name || '',
|
||||
// class_url: it.class_url || '',
|
||||
};
|
||||
_classes.push(_obj);
|
||||
try {
|
||||
let json1 = [];
|
||||
if (it.class_name && it.class_url) {
|
||||
json1 = getClasses(it);
|
||||
} else {
|
||||
json1 = JSON.parse(request(urljoin(_obj.type_id, _obj.api || rule.classUrl))).class;
|
||||
}
|
||||
if (_obj.cate_excludes && Array.isArray(_obj.cate_excludes) && _obj.cate_excludes.length > 0) {
|
||||
json1 = json1.filter(cl => !_obj.cate_excludes.includes(cl.type_name));
|
||||
} else if (_obj.cate_exclude) {
|
||||
json1 = json1.filter(cl => !new RegExp(_obj.cate_exclude, 'i').test(cl.type_name));
|
||||
}
|
||||
rule.filter[_obj.type_id] = [{
|
||||
"key": "类型", "name": "类型", "value": json1.map(i => {
|
||||
return {"n": i.type_name, 'v': i.type_id}
|
||||
})
|
||||
}];
|
||||
if (json1.length > 0) {
|
||||
rule.filter_def[it.url] = {"类型": json1[0].type_id};
|
||||
}
|
||||
} catch (e) {
|
||||
rule.filter[it.url] = [{"key": "类型", "name": "类型", "value": [{"n": "全部", "v": ""}]}];
|
||||
}
|
||||
});
|
||||
rule.classes = _classes;
|
||||
}
|
||||
}),
|
||||
// class_parse: $js.toString(() => {
|
||||
// let _url = rule.params;
|
||||
// if (_url && typeof (_url) === 'string' && _url.startsWith('http')) {
|
||||
// let html = request(_url);
|
||||
// let json = JSON.parse(html);
|
||||
// let _classes = [];
|
||||
// homeObj.filter = {};
|
||||
// rule.filter_def = {};
|
||||
// json.forEach(it => {
|
||||
// let _obj = {
|
||||
// type_name: it.name,
|
||||
// type_id: it.url,
|
||||
// parse_url: it.parse_url || '',
|
||||
// cate_exclude: it.cate_exclude || '',
|
||||
// };
|
||||
// _classes.push(_obj);
|
||||
// try {
|
||||
// let json1 = JSON.parse(request(urljoin(_obj.type_id, rule.classUrl))).class;
|
||||
// if (_obj.cate_exclude) {
|
||||
// json1 = json1.filter(cl => !new RegExp(_obj.cate_exclude, 'i').test(cl.type_name));
|
||||
// }
|
||||
// homeObj.filter[_obj.type_id] = [{
|
||||
// "key": "类型", "name": "类型", "value": json1.map(i => {
|
||||
// return {"n": i.type_name, 'v': i.type_id}
|
||||
// })
|
||||
// }];
|
||||
// if (json1.length > 0) {
|
||||
// rule.filter_def[it.url] = {"类型": json1[0].type_id};
|
||||
// }
|
||||
// } catch (e) {
|
||||
// homeObj.filter[it.url] = [{"key": "类型", "name": "类型", "value": [{"n": "全部", "v": ""}]}];
|
||||
// }
|
||||
// });
|
||||
// rule.classes = _classes;
|
||||
// input = _classes;
|
||||
// }
|
||||
// }),
|
||||
class_parse: $js.toString(() => {
|
||||
input = rule.classes;
|
||||
}),
|
||||
推荐: $js.toString(() => {
|
||||
let update_info = [{
|
||||
vod_name: '更新日志',
|
||||
vod_id: 'update_info',
|
||||
vod_remarks: `版本:${rule.version}`,
|
||||
vod_pic: 'https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/hipy-server/master/app/static/img/logo.png'
|
||||
}];
|
||||
VODS = [];
|
||||
if (rule.classes) {
|
||||
let randomClass = getRandomItem(rule.classes);
|
||||
let _url = urljoin(randomClass.type_id, input);
|
||||
if (randomClass.api) {
|
||||
_url = _url.replace('/api.php/provide/vod/', randomClass.api)
|
||||
}
|
||||
try {
|
||||
let html = request(_url, {timeout: rule.timeout});
|
||||
let json = JSON.parse(html);
|
||||
VODS = json.list;
|
||||
VODS.forEach(it => {
|
||||
it.vod_id = randomClass.type_id + '$' + it.vod_id;
|
||||
it.vod_remarks = it.vod_remarks + '|' + randomClass.type_name;
|
||||
});
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
VODS = update_info.concat(VODS);
|
||||
}),
|
||||
一级: $js.toString(() => {
|
||||
VODS = [];
|
||||
if (rule.classes) {
|
||||
// log(input);
|
||||
let _url = urljoin(MY_CATE, input);
|
||||
let current_vod = rule.classes.find(item => item.type_id === MY_CATE);
|
||||
if (current_vod && current_vod.api) {
|
||||
_url = _url.replace('/api.php/provide/vod/', current_vod.api)
|
||||
}
|
||||
let html = request(_url);
|
||||
let json = JSON.parse(html);
|
||||
VODS = json.list;
|
||||
VODS.forEach(it => {
|
||||
it.vod_id = MY_CATE + '$' + it.vod_id
|
||||
});
|
||||
}
|
||||
}),
|
||||
// 一级: 'json:list;vod_name;vod_pic;vod_remarks;vod_id;vod_play_from',
|
||||
二级: $js.toString(() => {
|
||||
VOD = {};
|
||||
if (orId === 'update_info') {
|
||||
VOD = {
|
||||
vod_content: rule.update_info.trim(),
|
||||
vod_name: '更新日志',
|
||||
type_name: '更新日志',
|
||||
vod_pic: 'https://resource-cdn.tuxiaobei.com/video/FtWhs2mewX_7nEuE51_k6zvg6awl.png',
|
||||
vod_remarks: `版本:${rule.version}`,
|
||||
vod_play_from: '道长在线',
|
||||
// vod_play_url: '嗅探播放$https://resource-cdn.tuxiaobei.com/video/10/8f/108fc9d1ac3f69d29a738cdc097c9018.mp4',
|
||||
vod_play_url: '随机小视频$http://api.yujn.cn/api/zzxjj.php',
|
||||
};
|
||||
} else {
|
||||
if (rule.classes) {
|
||||
let _url = urljoin(fyclass, input);
|
||||
let current_vod = rule.classes.find(item => item.type_id === fyclass);
|
||||
if (current_vod && current_vod.api) {
|
||||
_url = _url.replace('/api.php/provide/vod/', current_vod.api)
|
||||
}
|
||||
let html = request(_url);
|
||||
let json = JSON.parse(html);
|
||||
let data = json.list;
|
||||
VOD = data[0];
|
||||
if (current_vod && current_vod.type_name) {
|
||||
VOD.vod_play_from = VOD.vod_play_from.split('$$$').map(it => current_vod.type_name + '|' + it).join('$$$')
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
搜索: $js.toString(() => {
|
||||
VODS = [];
|
||||
if (rule.classes) {
|
||||
let canSearch = rule.classes.filter(it => it.searchable);
|
||||
let page = Number(MY_PAGE);
|
||||
page = (MY_PAGE - 1) % Math.ceil(canSearch.length / rule.search_limit) + 1;
|
||||
let truePage = Math.ceil(MY_PAGE / Math.ceil(canSearch.length / rule.search_limit));
|
||||
if (rule.search_limit) {
|
||||
let start = (page - 1) * rule.search_limit;
|
||||
let end = page * rule.search_limit;
|
||||
let t1 = new Date().getTime();
|
||||
let searchMode = typeof (batchFetch) === 'function' ? '批量' : '单个';
|
||||
log('start:' + start);
|
||||
log('end:' + end);
|
||||
log('搜索模式:' + searchMode);
|
||||
log('精准搜索:' + rule.search_match);
|
||||
// log('t1:' + t1);
|
||||
if (start < canSearch.length) {
|
||||
let search_classes = canSearch.slice(start, end);
|
||||
let urls = [];
|
||||
search_classes.forEach(it => {
|
||||
let _url = urljoin(it.type_id, input);
|
||||
if (it.api) {
|
||||
_url = _url.replace('/api.php/provide/vod/', it.api)
|
||||
}
|
||||
_url = _url.replace("#TruePage#", "" + truePage);
|
||||
urls.push(_url);
|
||||
});
|
||||
let results_list = [];
|
||||
let results = [];
|
||||
if (typeof (batchFetch) === 'function') {
|
||||
let reqUrls = urls.map(it => {
|
||||
return {
|
||||
url: it,
|
||||
options: {timeout: rule.timeout}
|
||||
}
|
||||
});
|
||||
let rets = batchFetch(reqUrls);
|
||||
let detailUrls = [];
|
||||
let detailUrlCount = 0;
|
||||
rets.forEach((ret, idx) => {
|
||||
let it = search_classes[idx];
|
||||
if (ret) {
|
||||
try {
|
||||
let json = JSON.parse(ret);
|
||||
let data = json.list;
|
||||
data.forEach(i => {
|
||||
i.site_name = it.type_name;
|
||||
i.vod_id = it.type_id + '$' + i.vod_id;
|
||||
i.vod_remarks = i.vod_remarks + '|' + it.type_name;
|
||||
});
|
||||
if (rule.search_match) {
|
||||
data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
|
||||
}
|
||||
if (data.length > 0) {
|
||||
if (rule.search_pic && !data[0].vod_pic) {
|
||||
log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
|
||||
let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
|
||||
detailUrls.push(detailUrl);
|
||||
results_list.push({
|
||||
data: data,
|
||||
has_pic: false,
|
||||
detailUrlCount: detailUrlCount
|
||||
});
|
||||
detailUrlCount++;
|
||||
// try {
|
||||
// let detailJson = JSON.parse(request(detailUrl));
|
||||
// data.forEach((d, _seq) => {
|
||||
// log('二级数据列表元素数:' + detailJson.list.length);
|
||||
// let detailVodPic = detailJson.list[_seq].vod_pic;
|
||||
// if (detailVodPic) {
|
||||
// Object.assign(d, {vod_pic: detailVodPic});
|
||||
// }
|
||||
// });
|
||||
// } catch (e) {
|
||||
// log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
|
||||
// }
|
||||
} else {
|
||||
results_list.push({data: data, has_pic: true});
|
||||
|
||||
}
|
||||
// results = results.concat(data);
|
||||
}
|
||||
} catch (e) {
|
||||
log(`请求:${it.type_id}发生错误:${e.message}`)
|
||||
}
|
||||
}
|
||||
});
|
||||
// 构造请求二级的batchFetch列表
|
||||
let reqUrls2 = detailUrls.map(it => {
|
||||
return {
|
||||
url: it,
|
||||
options: {timeout: rule.timeout}
|
||||
}
|
||||
});
|
||||
let rets2 = batchFetch(reqUrls2);
|
||||
for (let k = 0; k < results_list.length; k++) {
|
||||
let result_data = results_list[k].data;
|
||||
if (!results_list[k].has_pic) {
|
||||
try {
|
||||
let detailJson = JSON.parse(rets2[results_list[k].detailUrlCount]);
|
||||
log('二级数据列表元素数:' + detailJson.list.length);
|
||||
result_data.forEach((d, _seq) => {
|
||||
// let detailVodPic = detailJson.list[_seq].vod_pic;
|
||||
// log(detailJson);
|
||||
let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
|
||||
if (detailVodPic) {
|
||||
Object.assign(d, {vod_pic: detailVodPic.vod_pic});
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
log(`强制获取网站${result_data[0].site_name}的搜索图片失败:${e.message}`);
|
||||
}
|
||||
}
|
||||
results = results.concat(result_data);
|
||||
}
|
||||
|
||||
} else {
|
||||
urls.forEach((_url, idx) => {
|
||||
let it = search_classes[idx];
|
||||
try {
|
||||
let html = request(_url);
|
||||
let json = JSON.parse(html);
|
||||
let data = json.list;
|
||||
data.forEach(i => {
|
||||
i.vod_id = it.type_id + '$' + i.vod_id;
|
||||
i.vod_remarks = i.vod_remarks + '|' + it.type_name;
|
||||
});
|
||||
if (rule.search_match) {
|
||||
data = data.filter(item => item.vod_name && (new RegExp(KEY, 'i')).test(item.vod_name))
|
||||
}
|
||||
if (data.length > 0) {
|
||||
if (rule.search_pic && !data[0].vod_pic) {
|
||||
log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
|
||||
let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
|
||||
try {
|
||||
let detailJson = JSON.parse(request(detailUrl));
|
||||
log('二级数据列表元素数:' + detailJson.list.length);
|
||||
data.forEach((d, _seq) => {
|
||||
// let detailVodPic = detailJson.list[_seq].vod_pic;
|
||||
let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
|
||||
if (detailVodPic) {
|
||||
Object.assign(d, {vod_pic: detailVodPic.vod_pic});
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
|
||||
}
|
||||
}
|
||||
results = results.concat(data);
|
||||
}
|
||||
results = results.concat(data);
|
||||
} catch (e) {
|
||||
log(`请求:${it.type_id}发生错误:${e.message}`)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
VODS = results;
|
||||
let t2 = new Date().getTime();
|
||||
// log('t2:'+t2);
|
||||
log(`${searchMode}搜索:${urls.length}个站耗时:${(Number(t2) - Number(t1))}ms`)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}),
|
||||
lazy: $js.toString(() => {
|
||||
// lazy想办法用对应的parse_url,但是有难度,暂未实现
|
||||
let parse_url = '';
|
||||
if (flag && flag.includes('|')) {
|
||||
let type_name = flag.split('|')[0];
|
||||
let current_vod = rule.classes.find(item => item.type_name === type_name);
|
||||
if (current_vod && current_vod.parse_url) {
|
||||
parse_url = current_vod.parse_url
|
||||
}
|
||||
}
|
||||
if (/\.(m3u8|mp4)/.test(input)) {
|
||||
input = {parse: 0, url: input}
|
||||
} else {
|
||||
if (parse_url.startsWith('json:')) {
|
||||
let purl = parse_url.replace('json:', '') + input;
|
||||
let html = request(purl);
|
||||
input = {parse: 0, url: JSON.parse(html).url}
|
||||
} else {
|
||||
input = parse_url + input;
|
||||
}
|
||||
}
|
||||
}),
|
||||
}
|
||||
Reference in New Issue
Block a user