上传文件至 lib

This commit is contained in:
wangxd 2024-09-01 19:58:23 +08:00
parent 8fde5e8b12
commit e810f27883
5 changed files with 745 additions and 0 deletions

81
lib/河马短剧.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "河马短剧",
"规则作者": "香雅情",
"请求头参数": "MOBILE_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "否",
"是否开启获取首页数据": "否",
"首页推荐链接": "https://www.kuaikaw.cn",
"首页列表数组规则": "body&&.module-items",
"首页片单列表数组规则": ".module-item:lt(12)",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://www.kuaikaw.cn/browse/{cateId}/{catePg}[firstPage=https://www.kuaikaw.cn/browse/{cateId}]",
"分类名称": "全部",
"分类名称替换词": "0",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "全部&民国&萌宝&动漫&超能&甜宠&豪门恩怨&长生&神医&寻亲&抗战谍战&电视剧&奇幻&闪婚&职场商战&权谋&高手下山&神话&时空之旅&欢喜冤家&都市&体育&家庭&喜剧&都市修仙&神豪&科幻&致富&奇幻脑洞&强者回归&励志&复仇&电影&马甲&亲情&小人物&无敌&现实&重生&穿越&年代&悬疑&婚姻&家国情仇&虐恋&古装&仙侠&玄幻仙侠&传承觉醒&功夫武打&戏曲歌舞&情感&逆袭&战争",
"筛选子分类替换词": "0&590-839&589&1115&442&462&585&1073&438&1125&1093&1092-1097&715&713&943&840-1101&474&1094&718&717&1129&1128&714-1126&917&1124&475&1130&918&721&476&1076-1100&416-463&1091-1096&719&835-837&472&1074&441-469&439-465&916&716-722&445-470&1127&915&466&444-468&1102&720&473&1095&1098&838&417-464&1099",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".BrowseList_listBox__MyeBa&&.BrowseList_listItem__h7lD4",
"分类片单是否Jsoup写法": "是",
"分类片单标题": "img&&alt",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": ".BrowseList_lastChapter__dkL54&&Text",
"分类片单链接加前缀": "https://www.kuaikaw.cn",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$MOBILE_UA",
"搜索链接": "https://www.kuaikaw.cn/search/{SearchPg}?searchValue={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".search_searchList__AvbeR&&.MTagBookList_tagBookItem__C_038",
"搜索片单是否Jsoup写法": "是",
"搜索片单图片": "img&&src",
"搜索片单标题": "img&&alt",
"搜索片单链接": "a&&href",
"搜索片单副标题": "",
"搜索片单链接加前缀": "https://www.kuaikaw.cn",
"搜索片单链接加后缀": "",
"链接是否直接播放": "否",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "是",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".introduction_introBox__t4Bbz&&Text",
"线路列表数组规则": "",
"线路标题": "Text",
"播放列表数组规则": "body&&.CatalogList_swiperBox__5kdPs",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法": "是",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "否",
"选集链接加前缀": "https://www.kuaikaw.cn",
"选集链接加后缀": "",
"分析MacPlayer": "否",
"是否开启手动嗅探": "否",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

189
lib/畅梦.js Normal file
View File

@ -0,0 +1,189 @@
// 注入全局方法 (仅支持tvbox的js1以及c#版drpy的js0暂不支持drpy官方py版的js0)
// 注入全局方法 (仅支持tvbox的js1以及c#版drpy的js0暂不支持drpy官方py版的js0)
// 注入全局方法 (仅支持tvbox的js1以及c#版drpy的js0暂不支持drpy官方py版的js0)
globalThis.getHeaders= function(input){
let t = new Date().getTime().toString();
let headers = {
'version_name': '1.0.6',
'version_code': '6',
'package_name': 'com.app.nanguatv',
'sign': md5('c431ea542cee9679#uBFszdEM0oL0JRn@' + t).toUpperCase(),
'imei': 'c431ea542cee9679',
'timeMillis': t,
'User-Agent': 'okhttp/4.6.0'
};
return headers
}
var rule = {
title:'畅梦影视',
host:'http://ys.changmengyun.com',
homeUrl:'/api.php/provide/vod_rank?app=ylys&sort_type=month&imei=c431ea542cee9679&id=2&page=1',
url:'/api.php/provide/vod_list?app=ylys&id=fyclassfyfilter&page=fypage&imei=c431ea542cee9679',
detailUrl:'/api.php/provide/vod_detail?app=ylys&imei=c431ea542cee9679&id=fyid',
searchUrl:'/api.php/provide/search_result_more?app=ylys&video_name=**&pageSize=20&tid=0&imei=c431ea542cee9679&page=fypage',
searchable:2,
quickSearch:0,
filterable:1,
filter_url:'&area={{fl.area}}&year={{fl.year}}&type={{fl.class}}&total={{fl.total or "状态"}}&order={{fl.by or "新上线"}}',
filter:{
"2":[{"key":"class","name":"类型","value":[{"n":"全部","v":"类型"},{"n":"国产剧","v":"国产剧"},{"n":"港台剧","v":"港台剧"}]},{"key":"area","name":"地区","value":[{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}],
"1":[{"key":"class","name":"类型","value":[{"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":"其它"}]},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}],
"4":[{"key":"class","name":"类型","value":[{"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":"其它"}]},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"新上线","v":"新上线"}]},{"key":"total","name":"状态","value":[{"n":"全部","v":"状态"},{"n":"连载","v":"连载"},{"n":"完结","v":"完结"}]}],
"3":[{"key":"class","name":"类型","value":[{"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":"其它"}]},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"新上线","v":"新上线"}]}],
"46":[{"key":"class","name":"类型","value":[{"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":"其他"}]},{"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":"10年代","v":"10年代"},{"n":"00年代","v":"00年代"},{"n":"90年代","v":"90年代"},{"n":"80年代","v":"80年代"}]},{"key":"by","name":"排序","value":[{"n":"热播榜","v":"热播榜"},{"n":"好评榜","v":"好评榜"},{"n":"新上线","v":"新上线"}]}]
},
headers:{
"User-Agent":"okhttp/4.6.0"
},
timeout:5000,
class_name:'电视剧&电影&动漫&综艺&海外精选', // /api.php/provide/home_nav
class_url:'2&1&4&3&46',
limit:20,
play_parse:true,
lazy:`js:
try {
function getvideo(url) {
let jData = JSON.parse(request(url, {
headers: getHeaders(url)
}));
if (jData.code == 1) {
return jData.data.url
} else {
return 'http://43.154.104.152:1234/jhapi/cs.php?url=' + url.split('=')[1]
}
}
if (/,/.test(input)) {
let mjurl = input.split(',')[1]
let videoUrl = getvideo(mjurl);
input = {
jx: 0,
url: videoUrl,
parse: 0,
header: JSON.stringify({
'user-agent': 'Lavf/58.12.100'
})
}
} else {
let videoUrl = getvideo(input);
if (/jhapi/.test(videoUrl)) {
videoUrl = getvideo(videoUrl);
input = {
jx: 0,
url: videoUrl,
parse: 0,
header: JSON.stringify({
'user-agent': 'Lavf/58.12.100'
})
}
} else {
input = {
jx: 0,
url: videoUrl,
parse: 0
}
}
}
} catch (e) {
log(e.toString())
}
`,
推荐:`js:
var d = [];
let html = request(input, {
headers: getHeaders(input)
});
html = JSON.parse(html);
html.forEach(function(it) {
d.push({
title: it.name,
img: it.img,
desc: it.remarks,
url: it.id
})
});
setResult(d);
`,
一级:`js:
var d = [];
let html = request(input, {
headers: getHeaders(input)
});
html = JSON.parse(html);
html.list.forEach(function(it) {
d.push({
title: it.name,
img: it.img,
desc: it.msg,
url: it.id
})
});
setResult(d);
`,
二级:`js:
var d = [];
VOD = {
vod_id: input.split('id=')[1]
};
try {
let html = request(input, {
headers: getHeaders(input)
});
html = JSON.parse(html);
let node = html.data;
VOD = {
vod_name: node['name'],
vod_pic: node['img'],
type_name: node['type'],
vod_year: node['year'],
vod_remarks: '更新至: ' + node['msg'] + ' / 评分: ' + node['score'],
vod_content: node['info'].strip()
};
let episodes = node.player_info;
let playMap = {};
if (typeof play_url === 'undefined') {
var play_url = ''
}
episodes.forEach(function(ep) {
let playurls = ep['video_info'];
playurls.forEach(function(playurl) {
let source = ep['show'];
if (!playMap.hasOwnProperty(source)) {
playMap[source] = []
}
playMap[source].append(playurl['name'].strip() + '$' + play_url + urlencode(playurl['url']))
})
});
let playFrom = [];
let playList = [];
Object.keys(playMap)
.forEach(function(key) {
playFrom.append(key);
playList.append(playMap[key].join('#'))
});
let vod_play_from = playFrom.join('$$$');
let vod_play_url = playList.join('$$$');
VOD['vod_play_from'] = vod_play_from;
VOD['vod_play_url'] = vod_play_url
} catch (e) {
log('获取二级详情页发生错误:' + e.message)
}
`,
搜索:`js:
var d = [];
let html = request(input, {
headers: getHeaders(input)
});
html = JSON.parse(html);
html.data.forEach(function(it) {
d.push({
title: it.video_name,
img: it.img,
desc: it.qingxidu + '/' + it.category,
url: it.id,
content: it.blurb
})
});
setResult(d);
`,
}

11
lib/白嫖电影网.json Normal file
View File

@ -0,0 +1,11 @@
{
"站名": "白嫖电影网",
"作者": "天天开心",
"分类url": "https://dy.gduan.com/index.php/vod/detail/{area}/by/{by}/id/{cateId}/lang/{lang}/page/{catePg}.html[https://dy.gduan.com/index.php/vod/detail/id/{cateId}.html]",
"分类": "电影&剧集&动漫&综艺",
"分类值": "1&2&4&3",
"简介": ">&&</p>",
"排序": "时间$time#人气$hits#评分$score",
"主页url": "https://dy.gduan.com/"
}

17
lib/茶狐杯.json Normal file
View File

@ -0,0 +1,17 @@
{
"作者":"天天开心",
"站名":"茶狐杯",
"主页url":"https://www.5jcd.com/",
"简介":"+col-pd\">&&</p>",
"线路数组":"<h3&&</h3>",
"线路标题":"+>&&",
"分类url":"https://www.5jcd.com/show_/area/{area}/by/{by}/class/{class}/id/{cateId}/lang/{lang}/page/{catePg}/year/{year}.html;;ax",
"分类":"电影$1#电视剧$2#综艺$3#动漫$4"}

447
lib/采集静态.json Normal file
View File

@ -0,0 +1,447 @@
/**
* !!!
* :
* ?type=url&params=../json/.json
*
* ?type=url&params=../json/.json#1
* ?type=url&params=../json/[zy].json#1
* ?type=url&params=../json/[].json#1
* hipy-server@:
* ?type=url&params=../json/.json#1@[]
* ?type=url&params=../json/[zy].json#1@zy[]
* ?type=url&params=../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: '20240705 beta15',
update_info: `
20240705:
1.json#1
2.json#1#1 #1#[使]
3.
20240703:
1.json"searchable": 0,
20240604:
1.
2.
json(xmljsonxml)
json/api.php/provide/vod/,.jsonapi:/api.php/provide/vod/at/json/
jsonparse_url
jsoncate_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: '', // .jsonparse_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_namegzip:${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;
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 || '',
// 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_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('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(() => {
// lazyparse_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;
}
}
}),
}