Add files via upload
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,48 @@
|
|||||||
|
// 搜索数字验证
|
||||||
|
muban.首图2.二级.desc = '.data:eq(1)&&Text;;;.data:eq(6)&&Text;.data:eq(5)&&Text';
|
||||||
|
muban.首图2.二级.tabs = '.nav-tabs.dpplay&&li';
|
||||||
|
var rule = {
|
||||||
|
title:'007影视',
|
||||||
|
搜索编码:'utf-8',
|
||||||
|
// 搜索编码:'gbk',
|
||||||
|
模板:'首图2',
|
||||||
|
ali_token:'{{ali_token}}',
|
||||||
|
bili_cookie:'{{bili_cookie}}',
|
||||||
|
host:'https://www.007ts.me',
|
||||||
|
// url:'/show/fyclass--------fypage---.html',
|
||||||
|
url:'/show/fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}----fypage---{{fl.year}}',
|
||||||
|
filter:{
|
||||||
|
"1":[{"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":"其它"}]},{"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":"俄罗斯"},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"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":"俄罗斯"},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"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":"其他"}]},{"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":"俄罗斯"},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","value":[{"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":"俄罗斯"},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"7":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"18":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"19":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"20":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
class_parse: '.stui-header__menu li:gt(0):lt(9);a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
lazy:`js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
log(html);
|
||||||
|
var url=html.url;
|
||||||
|
if(html.encrypt=='1'){
|
||||||
|
url=unescape(url)
|
||||||
|
}else if(html.encrypt=='2'){
|
||||||
|
url=unescape(base64Decode(url))
|
||||||
|
}
|
||||||
|
if(/m3u8|mp4/.test(url)){
|
||||||
|
input=url
|
||||||
|
}else if(/qq|iqiyi/.test(url)){
|
||||||
|
input={jx:0,url:'https://jx.m3u8.tv/jiexi/?url='+url,parse:1,header:JSON.stringify({'user-agent':'Mozilla/5.0'})}
|
||||||
|
}else{
|
||||||
|
input
|
||||||
|
}`,
|
||||||
|
|
||||||
|
// searchUrl:'/search/**----------fypage---.html',
|
||||||
|
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
// searchUrl:'/VSP/V3/SearchContent#{"contentTypes":["VOD"],"searchScopes":["CONTENT_NAME","ACTOR"],"sortType":["RELEVANCE"],"count":8,"offset":0,"SearchKey":"**","subjectID":"10000100000000090000000000001323"};postjson',
|
||||||
|
detailUrl:'/detail/fyid.html', //非必填,二级详情拼接链接
|
||||||
|
搜索:'json:list;name;pic;;id',
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
var rule={title:'310直播',host:'http://www.310.tv',url:'/?s=0&t=1&a=fyclass&g=fypage',searchUrl:'',searchable:0,quickSearch:0,class_name:'热门&足球&篮球',class_url:'0&1&2',headers:{'User-Agent':'MOBILE_UA'},timeout:5000,play_parse:false,lazy:'',limit:6,double:false,推荐:'*',一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href',二级:'*',搜索:'',}
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'4KHDR[磁]',
|
||||||
|
host:'https://www.4khdr.cn',
|
||||||
|
homeUrl: "/forum.php?mod=forumdisplay&fid=2&page=1",
|
||||||
|
url: '/forum.php?mod=forumdisplay&fid=2&filter=typeid&typeid=fyclass&page=fypage',
|
||||||
|
filter_url:'{{fl.class}}',
|
||||||
|
filter:{
|
||||||
|
},
|
||||||
|
searchUrl: '/search.php#searchsubmit=yes&srchtxt=**;post',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:1,
|
||||||
|
filterable:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'PC_UA',
|
||||||
|
'Cookie':'hvLw_2132_saltkey=x89cF7aD; hvLw_2132_lastvisit=1691840602; hvLw_2132_visitedfid=2; hvLw_2132_sendmail=1; _clck=hvltzs|2|fe4|0|1234; hvLw_2132_seccodecS=5681.04cfefe37df21abe97; hvLw_2132_ulastactivity=1691933173%7C0; hvLw_2132_auth=e9f3f37HqkcIBFlhm8r%2FqsQJNVKy9x1%2BRzROV4QROggK5CuZMQ3pmPzm9JwrPr%2FCkV7PzN7Nvt0yW1yEQXQjasm3AQ; hvLw_2132_sid=0; hvLw_2132_st_t=99213%7C1691933177%7C1fa4611ff255a89678127a126372871e; hvLw_2132_forum_lastvisit=D_2_1691933177; hvLw_2132_lastact=1691933194%09search.php%09forum; _clsk=fhws28|1691933195886|4|1|r.clarity.ms/collect',
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name: "4K电影&4K美剧&4K华语&4K动画&4K纪录片&4K日韩印&蓝光电影&蓝光美剧&蓝光华语&蓝光动画&蓝光日韩印",
|
||||||
|
class_url:"3&8&15&6&11&4&29&31&33&32&34",
|
||||||
|
play_parse:false,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:'ul#waterfall li;a&&title;img&&src;div.auth.cl&&Text;a&&href',
|
||||||
|
一级:'ul#waterfall li;a&&title;img&&src;div.auth.cl&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
title:"#thread_subject&&Text",
|
||||||
|
img:"img.zoom&&src",
|
||||||
|
desc:'td[id^="postmessage_"] font&&Text',
|
||||||
|
content:'td[id^="postmessage_"] font&&Text',
|
||||||
|
tabs:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
TABS=[]
|
||||||
|
var d = pdfa(html, 'table.t_table');
|
||||||
|
let magnetIndex=0;
|
||||||
|
let aliIndex=0;
|
||||||
|
d.forEach(function(it) {
|
||||||
|
let burl = pdfh(it, 'a&&href');
|
||||||
|
log("burl >>>>>>" + burl);
|
||||||
|
if (burl.startsWith("https://www.aliyundrive.com/s/")){
|
||||||
|
let result = 'aliyun' + aliIndex;
|
||||||
|
aliIndex = aliIndex + 1;
|
||||||
|
TABS.push(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
d.forEach(function(it) {
|
||||||
|
let burl = pdfh(it, 'a&&href');
|
||||||
|
log("burl >>>>>>" + burl);
|
||||||
|
if (burl.startsWith("magnet")){
|
||||||
|
let result = 'magnet' + magnetIndex;
|
||||||
|
magnetIndex = magnetIndex + 1;
|
||||||
|
TABS.push(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
log('TABS >>>>>>>>>>>>>>>>>>' + TABS);
|
||||||
|
`,
|
||||||
|
lists:`js:
|
||||||
|
log(TABS);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
LISTS = [];
|
||||||
|
var d = pdfa(html, 'table.t_table');
|
||||||
|
TABS.forEach(function(tab) {
|
||||||
|
log('tab >>>>>>>>' + tab);
|
||||||
|
if (/^aliyun/.test(tab)) {
|
||||||
|
let targetindex = parseInt(tab.substring(6));
|
||||||
|
let index = 0;
|
||||||
|
d.forEach(function(it){
|
||||||
|
let burl = pdfh(it, 'a&&href');
|
||||||
|
if (burl.startsWith("https://www.aliyundrive.com/s/")){
|
||||||
|
if (index == targetindex){
|
||||||
|
let title = pdfh(it, 'a&&Text');
|
||||||
|
log('title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
|
||||||
|
//burl = "http://127.0.0.1:9978/proxy?do=ali&type=push&url=" + encodeURIComponent(burl);
|
||||||
|
burl = "push://" + encodeURIComponent(burl);
|
||||||
|
log('burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
|
||||||
|
let loopresult = title + '$' + burl;
|
||||||
|
LISTS.push([loopresult]);
|
||||||
|
}
|
||||||
|
index = index + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
TABS.forEach(function(tab) {
|
||||||
|
log('tab >>>>>>>>' + tab);
|
||||||
|
if (/^magnet/.test(tab)) {
|
||||||
|
let targetindex = parseInt(tab.substring(6));
|
||||||
|
let index = 0;
|
||||||
|
d.forEach(function(it){
|
||||||
|
let burl = pdfh(it, 'a&&href');
|
||||||
|
if (burl.startsWith("magnet")){
|
||||||
|
if (index == targetindex){
|
||||||
|
let title = pdfh(it, 'a&&Text');
|
||||||
|
log('title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
|
||||||
|
log('burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
|
||||||
|
let loopresult = title + '$' + burl;
|
||||||
|
LISTS.push([loopresult]);
|
||||||
|
}
|
||||||
|
index = index + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
|
||||||
|
},
|
||||||
|
一级:'ul#waterfall li;a&&title;img&&src;div.auth.cl&&Text;a&&href',
|
||||||
|
搜索:'div#threadlist ul li;h3&&Text;;p:eq(3)&&Text;a&&href;p:eq(2)&&Text',
|
||||||
|
预处理:`
|
||||||
|
if (rule_fetch_params.headers.Cookie.startsWith("http")){
|
||||||
|
rule_fetch_params.headers.Cookie=fetch(rule_fetch_params.headers.Cookie);
|
||||||
|
setItem(RULE_CK,cookie);
|
||||||
|
};
|
||||||
|
log('4khdr cookie>>>>>>>>>>>>>>>' + rule_fetch_params.headers.Cookie);
|
||||||
|
let new_host='https://www.4khdr.cn/search.php';
|
||||||
|
let new_html=request(new_host);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
let formhash = pdfh(new_html, 'input[name="formhash"]&&value');
|
||||||
|
log("formhash>>>>>>>>>>>>>>>" + formhash);
|
||||||
|
rule_fetch_params.formhash = formhash;
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1,226 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '4K视界[V2]', // csp_AppYsV2
|
||||||
|
host: 'http://yycms.77ev.cn/api.php/app/',
|
||||||
|
url: 'video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&letter={{fl.letter}}&year={{fl.year}}&by={{fl.by}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"儿童"},{"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"}]}],
|
||||||
|
"21":[{"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"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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"}]}],
|
||||||
|
"3":[{"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"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"23":[{"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"}]}],
|
||||||
|
"24":[{"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"}]}],
|
||||||
|
"20":[{"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"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/detail?vod_id=fyid',
|
||||||
|
searchUrl: '/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'okhttp/4.1.0'},
|
||||||
|
timeout:5000,
|
||||||
|
// 分类筛选 /api.php/app/nav || /xgapp.php/v1/nav || /api.php/v1.vod/types
|
||||||
|
class_name: '电影&国产剧&电视剧&动漫&综艺&欧美剧&日韩剧&动画片少儿',
|
||||||
|
class_url: '1&21&2&3&4&23&24&20',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
let play_Url = '';
|
||||||
|
if (/\\.m3u8|\\.mp4/.test(input)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/,/.test(input) && /url=/.test(input)) {
|
||||||
|
input = input.split('url=');
|
||||||
|
play_Url = input[0].split(',')[0];
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input[1],
|
||||||
|
playUrl: play_Url,
|
||||||
|
parse: 1
|
||||||
|
}
|
||||||
|
} else if (/url=|id=/.test(input)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: JSON.parse(request(input)).url,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/youku|iqiyi|v\\.qq\\.com|pptv|sohu|le\\.com|1905\\.com|mgtv|bilibili|ixigua/.test(input)) {
|
||||||
|
play_Url = /bilibili/.test(input) ? 'https://jx.xmflv.com/?url=' : 'https://jx.777jiexi.com/player/?url='; // type0的parse
|
||||||
|
// play_Url = /bilibili/.test(input) ? 'https://jx.xmflv.com/?url=' : 'json:http://pandown.pro/app/kkdy.php?url='; // type1的parse可加'json:'直接解析url (除了蜂蜜的'影视TV',其它的壳皆可用)
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
playUrl: play_Url,
|
||||||
|
parse: 1,
|
||||||
|
header: JSON.stringify({
|
||||||
|
'user-agent': 'Mozilla/5.0',
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
} else if (/^YuMi|^FEI-/.test(input)) {
|
||||||
|
let purl = JSON.parse(request("http://175.178.183.192:84/api/?key=f3913eb3f85a8298b3e6e427b8712b2e&url=" + input)).url;
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: purl,
|
||||||
|
// url: input,
|
||||||
|
// playUrl: 'json:http://175.178.183.192:84/api/?key=f3913eb3f85a8298b3e6e427b8712b2e&url=',
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
input
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
limit:6,
|
||||||
|
// 图片来源:'@Referer=https://api.douban.com/@User-Agent=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/113.0.0.0%20Safari/537.36',
|
||||||
|
推荐:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
if(HOST.endsWith('/')){
|
||||||
|
jsondata = JSON.parse(request(HOST + 'vodPhbAll'));
|
||||||
|
} else {
|
||||||
|
jsondata = JSON.parse(request(HOST + '/vodPhbAll'));
|
||||||
|
}
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
if(HOST.endsWith('/')){
|
||||||
|
jsondata = JSON.parse(request(HOST + 'index_video'));
|
||||||
|
} else {
|
||||||
|
jsondata = JSON.parse(request(HOST + '/index_video'));
|
||||||
|
}
|
||||||
|
videoList = /xgapp/.test(HOST) ? jsondata.data : jsondata.list;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach((it,idex) => {
|
||||||
|
let vlist = /v1\\.vod/.test(HOST) ? videoList[idex].vod_list : videoList[idex].vlist ;
|
||||||
|
vlist.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
一级:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = input.replace('video','v1.vod').replace('tid','type').replace('pg=','page=');
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[4];
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.list || jsondata.data;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:`js:
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = HOST + '/'+ input.split('/')[3];
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[3].replace('detail','video_detail').replace('vod_id','id');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let html = request(input);
|
||||||
|
html = JSON.parse(html);
|
||||||
|
let node = /xgapp/.test(HOST) ? html.data.vod_info : html.data;
|
||||||
|
VOD = {
|
||||||
|
vod_id: node.vod_id,
|
||||||
|
vod_name: node.vod_name,
|
||||||
|
vod_pic: node.vod_pic,
|
||||||
|
type_name: node.vod_class,
|
||||||
|
vod_year: node.vod_year,
|
||||||
|
vod_area: node.vod_area,
|
||||||
|
vod_remarks: node.vod_remarks,
|
||||||
|
vod_actor: node.vod_actor,
|
||||||
|
vod_director: node.vod_director,
|
||||||
|
vod_content: node.vod_content.strip()
|
||||||
|
};
|
||||||
|
if (typeof play_url === 'undefined') {
|
||||||
|
var play_url = ''
|
||||||
|
}
|
||||||
|
let episodes = /v1\\.vod/.test(HOST)?node.vod_play_list:node.vod_url_with_player;
|
||||||
|
if (episodes != '') {
|
||||||
|
let playMap = {};
|
||||||
|
episodes.forEach(ep => {
|
||||||
|
let from = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
from = ep.player_info.from||ep.player_info.show||ep.from||ep.show;
|
||||||
|
} else {
|
||||||
|
from = ep.code||ep.name;
|
||||||
|
}
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = []
|
||||||
|
}
|
||||||
|
let parse_api = '';
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
parse_api = ep.player_info.parse != null ? ep.player_info.parse : ep.player_info.parse2;
|
||||||
|
// parse_api = /,/.test(parse_api) ? parse_api.split(',')[1] : parse_api;
|
||||||
|
} else {
|
||||||
|
parse_api = ep.parse_api;
|
||||||
|
}
|
||||||
|
log('parse_api =========> '+parse_api);
|
||||||
|
if (parse_api != null && !/\\.m3u8|\\.mp4/.test(ep.url)) {
|
||||||
|
parse_api = parse_api.replaceAll('..','.') ;
|
||||||
|
ep.url = ep.url.replaceAll('$','$'+parse_api);
|
||||||
|
}
|
||||||
|
playMap[from].push(ep.url)
|
||||||
|
});
|
||||||
|
let playFrom = [];
|
||||||
|
let playList = [];
|
||||||
|
Object.keys(playMap).forEach(key => {
|
||||||
|
playFrom.push(key);
|
||||||
|
playList.push(playMap[key])
|
||||||
|
});
|
||||||
|
VOD.vod_play_from = playFrom.join('$$$');
|
||||||
|
VOD.vod_play_url = playList.join('$$$');
|
||||||
|
} else {
|
||||||
|
VOD.vod_play_from = node.vod_play_from;
|
||||||
|
VOD.vod_play_url = node.vod_play_url;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
log("获取二级详情页发生错误:" + e.message);
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
搜索:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = (HOST + '/'+ input.split('/')[3]).replace('/search','').replace('text=','wd=').replace('pg=','page=');
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[3]
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.list || jsondata.data;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '555电影',
|
||||||
|
host: 'https://www.555dyy.top',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,".row:eq(2)&&a&&href");print(src);HOST=src',
|
||||||
|
homeUrl:'/api.php/app/index_video',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"文艺"},{"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":"加拿大"},{"n":"俄罗斯","v":"俄罗斯"},{"n":"意大利","v":"意大利"},{"n":"比利时","v":"比利时"},{"n":"爱尔兰","v":"爱尔兰"},{"n":"西班牙","v":"西班牙"},{"n":"澳大利亚","v":"澳大利亚"}]},{"key":"lang","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":"西班牙语"}]},{"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"}]}],
|
||||||
|
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"悬疑"},{"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":"其他"}]},{"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"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"社会"},{"n":"友情","v":"友情"},{"n":"真人版","v":"真人版"},{"n":"电影版","v":"电影版"},{"n":"OVA版","v":"OVA版"},{"n":"TV版","v":"TV版"},{"n":"新番动画","v":"新番动画"},{"n":"完结动画","v":"完结动画"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"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":"更早","v":"更早"}]}],
|
||||||
|
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"YouTube","v":"YouTube"},{"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":"其它"}]},{"key":"lang","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":"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"},{"n":"1999","v":"1999"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
tab_remove:['非凡线路','无尽线路','天空线路','新浪线路','BF线路','DM线路','555蓝光','555蓝光3','555蓝光4'],
|
||||||
|
tab_order:['555蓝光2','KK线路','红牛线路'],
|
||||||
|
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电影&剧集&综艺&动漫',
|
||||||
|
class_url:'1&2&3&4',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:input=/ddvod/.test(input)?"http://jhsj.manduhu.com/?url="+input:input',
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list;vlist;*;*;*;*',
|
||||||
|
double:true,
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks;vod_id',
|
||||||
|
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});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)}',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'6V新版[磁]',
|
||||||
|
host:'http://www.xb6v.com',
|
||||||
|
// host:'https://www.66s6.net',
|
||||||
|
// url: '/fyclass/index_fypage.html[/fyclass/index.html]',
|
||||||
|
url: '/fyclassfyfilter/index_fypage.html[/fyclassfyfilter/index.html]',
|
||||||
|
filter_url:'{{fl.class}}',
|
||||||
|
filter:{
|
||||||
|
"dianshiju":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"国剧","v":"/guoju"},{"n":"日韩剧","v":"/rihanju"},{"n":"欧美剧","v":"/oumeiju"}]}]
|
||||||
|
},
|
||||||
|
searchUrl: '/e/search/index.php#show=title&tempid=1&tbname=article&mid=1&dopost=search&submit=&keyboard=**;post',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_parse:'#menus&&li:gt(1);a&&Text;a&&href;.*/(.*)/',
|
||||||
|
cate_exclude:'欧美剧|旧版6v',
|
||||||
|
play_parse:true,
|
||||||
|
limit:6,
|
||||||
|
推荐: '*',
|
||||||
|
一级: '#post_container&&li;h2&&Text;img&&src;.info_date&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "#content&&h1&&Text;.info_category&&Text",
|
||||||
|
"img": "#post_content&&img&&src",
|
||||||
|
"desc": ";;;#post_content&&p:eq(0)&&Text;#post_content&&p:eq(2)&&Text",
|
||||||
|
"content": "#post_content&&p:eq(1)&&Text",
|
||||||
|
"tabs": `js:
|
||||||
|
TABS = ["道长磁力"];
|
||||||
|
let tabs = pdfa(html, '#content&&h3:not(:contains(网盘))');
|
||||||
|
tabs.forEach((it) => {
|
||||||
|
TABS.push(pdfh(it, "body&&Text").replace('播放地址','道长在线').replace('(无插件 极速播放)','一').replace('(无需安装插件)','二'))
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
"lists": `js:
|
||||||
|
log(TABS);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
LISTS = [];
|
||||||
|
let i = 1;
|
||||||
|
TABS.forEach(function(tab) {
|
||||||
|
if (/道长磁力/.test(tab)) {
|
||||||
|
var d = pdfa(html, '.context&&td');
|
||||||
|
d = d.map(function(it) {
|
||||||
|
var title = pdfh(it, 'a&&Text');
|
||||||
|
var burl = pd(it, 'a&&href');
|
||||||
|
return title + '$' + burl
|
||||||
|
});
|
||||||
|
LISTS.push(d)
|
||||||
|
} else if (/道长在线/.test(tab) && i <= TABS.length-1) {
|
||||||
|
var d = pdfa(html, '.context&&.widget:eq(list_idx)&&a'.replace("list_idx", i));
|
||||||
|
d = d.map(function(it) {
|
||||||
|
var title = pdfh(it, 'a&&Text');
|
||||||
|
var burl = pd(it, 'a&&href');
|
||||||
|
return title + '$' + burl
|
||||||
|
});
|
||||||
|
LISTS.push(d)
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
搜索: '*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '六月听书',
|
||||||
|
host: 'http://m.6yueting.com',
|
||||||
|
url: '/ys/fyclass/o2/pfypage',
|
||||||
|
searchUrl: '/search/index/search?content=**&type=1&pageNum=fypage&pageSize=40',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:0,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'MOBILE_UA'},
|
||||||
|
class_name:'全部分类&玄幻奇幻&修真武侠&恐怖灵异&古今言情&都市言情&穿越重生&粤语古仔&网游小说&通俗文学&历史纪实&军事&悬疑推理&ebc5系列&官场商战&儿童读物&广播剧&外文原版&评书大全&相声小品&百家讲坛&健康养生&教材&期刊头条&戏曲&脱口秀',
|
||||||
|
class_url:'t0&t1&t2&t3&t4&t28&t5&t6&t7&t11&t12&t13&t14&t18&t15&t16&t17&t22&t8&t9&t10&t20&t21&t23&t24&t27',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
图片来源:'@Referer=http://m.6yueting.com/@User-Agent=MOBILE_UA',
|
||||||
|
推荐:'*',
|
||||||
|
一级: '.list-wrapper&&.item-link;h2--span&&Text;img&&src;.status&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":".book-title&&Text;.text:eq(0)&&Text",
|
||||||
|
"img":".img&&src",
|
||||||
|
"desc":".text:eq(3)&&Text;;;.text:eq(1)&&Text;.text:eq(2)&&Text",
|
||||||
|
"content":".book-intro&&Text",
|
||||||
|
"tabs":".operate-bar&&.total-num",
|
||||||
|
"lists":".book-list:eq(#id)&&.list-item"
|
||||||
|
},
|
||||||
|
搜索:'js:let d=[];let MY_HOME="http://m.6yueting.com";let html=request(input);html=JSON.parse(html);let list=html.data.content;list.forEach(function(it){d.push({title:it.name.replace(/<.*?>/g,""),img:"http://img.6yueting.com:20001/"+it.coverUrlLocal,url:MY_HOME+"/list/"+it.code,desc:it.cdate,content:it.descXx.replace(/ /g,"")})});setResult(d);',
|
||||||
|
}
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
globalThis.getTime = function(){
|
||||||
|
let ts= Math.round(new Date().getTime()/1000).toString();
|
||||||
|
log('获取时间戳:'+ts);
|
||||||
|
return ts
|
||||||
|
}
|
||||||
|
|
||||||
|
globalThis.getHeaders= function(input,ts){
|
||||||
|
let tkstr=input.split('?')[1].split('&').map(function(it){
|
||||||
|
return it.split('=')[1]
|
||||||
|
}).join('');
|
||||||
|
tkstr=input.split('?')[0].replace('https://api.tyun77.cn','')+tkstr+ts+'XSpeUFjJ';
|
||||||
|
log('tk加密前:'+tkstr);
|
||||||
|
let TK=md5(tkstr);
|
||||||
|
log('tk加密后:'+TK);
|
||||||
|
let headers={
|
||||||
|
"User-Agent":"okhttp/3.12.0",
|
||||||
|
"TK":TK
|
||||||
|
};
|
||||||
|
return headers
|
||||||
|
}
|
||||||
|
|
||||||
|
var rule = {
|
||||||
|
title:'酷云77',
|
||||||
|
host:'https://api.tyun77.cn',
|
||||||
|
homeUrl:'/api.php/provide/homeBlock?type_id=0',
|
||||||
|
searchUrl:'/api.php/provide/searchVideo?searchName=**',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
multi:1,
|
||||||
|
// 分类链接fypage参数支持1个()表达式
|
||||||
|
url:'/api.php/provide/searchFilter?type_id=fyclass&pagesize=24&pagenum=fypage',
|
||||||
|
url:'/api.php/provide/searchFilter?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&pagenum=fypage&pagesize=24&version=&sj=$ts&type_id=fyclass',
|
||||||
|
detailUrl:'/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&version=&ids=fyid',
|
||||||
|
detailUrl:'/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&ids=fyid&package=com.sevenVideo.app.android&version=',
|
||||||
|
filter_url:'year={{fl.y}}&category={{fl.scat}}&area={{fl.a}}',
|
||||||
|
filter:{0: [{'key': 'y', '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': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 1: [{'key': 'y', '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': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 2: [{'key': 'y', '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': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 3: [{'key': 'y', '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': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}], 4: [{'key': 'y', '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': '2015之前', 'v': 'lt|2015'}]}, {'key': 'a', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': '中国大陆'}, {'n': '美国', 'v': '美国'}, {'n': '日本', 'v': '日本'}, {'n': '中国香港', 'v': '中国香港'}, {'n': '中国台湾', 'v': '中国台湾'}, {'n': '韩国', 'v': '韩国'}, {'n': '欧洲', 'v': '欧洲'}, {'n': '其他', 'v': '泰国'}]}, {'key': 'scat', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '剧情', 'v': '剧情'}, {'n': '动作', 'v': '动作'}, {'n': '科幻', 'v': '科幻'}, {'n': '喜剧', 'v': '喜剧'}, {'n': '战争', 'v': '战争'}, {'n': '爱情', 'v': '爱情'}, {'n': '恐怖', 'v': '恐怖'}, {'n': '伦理', 'v': '伦理'}]}]},
|
||||||
|
headers:{
|
||||||
|
"User-Agent":"okhttp/3.12.0"
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'全部&电影&电视剧&综艺&动漫',
|
||||||
|
class_url:'0&1&2&3&4',
|
||||||
|
limit:20,
|
||||||
|
play_parse:true,
|
||||||
|
play_json:0,
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
// lazy:'js:input={parse:1,url:input};',
|
||||||
|
lazy:'',
|
||||||
|
lazy:'js:function GetPlayUrl(playUrl){let realPlay={parse:0,url:playUrl};if(/mgtv|sohu/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0"}}else if(/bili/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.bilibili.com"}}else if(/ixigua/.test(playUrl)){realPlay.headers={"User-Agent":"Mozilla/5.0",Referer:"https://www.ixigua.com"}}return realPlay}if(/\\.m3u8|\\.mp4/.test(input)){input={parse:0,url:input}}else{try{let jxUrl="http://api.tyun77.cn/api.php/provide/parserUrl?url=";var t=Math.floor((new Date).getTime()/1e3).toString();let jxExt="&retryNum=0&pcode=010110002&version=2.1&devid=f9c9ce5bb5827a266829383718e6131a&package=com.sevenVideo.app.android&sys=android&sysver=12&brand=Xiaomi&model=Mi_10_Pro&sj="+t;let url=jxUrl+input+jxExt;let TK="/api.php/provide/parserUrl"+"Xiaomif9c9ce5bb5827a266829383718e6131aMi_10_Procom.sevenVideo.app.android010110002"+0+t+"android12"+encodeURIComponent(vipUrl)+"2.1"+t+"XSpeUFjJ";let html=request(url,{headers:{Referer:jxUrl,"User-Agent":"okhttp/3.12.0",TK:md5(TK)}});let urll=JSON.parse(html).data.url;let playhtml=request(urll);let playurl=JSON.parse(playhtml).url;input=GetPlayUrl(playurl)}catch(e){input={parse:1,jx:1,url:input}}}',
|
||||||
|
推荐:'json:data.blocks;contents;title;videoCover;msg;id',
|
||||||
|
double:true,
|
||||||
|
// 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary',
|
||||||
|
一级:'',
|
||||||
|
一级:'json:data.result;title;videoCover;msg;id',
|
||||||
|
一级:`js:
|
||||||
|
var d=[];
|
||||||
|
let ts= getTime();
|
||||||
|
input=input.replace('$ts',ts);
|
||||||
|
let html = request(input,{
|
||||||
|
headers:getHeaders(input,ts)
|
||||||
|
});
|
||||||
|
print(html);
|
||||||
|
html = JSON.parse(html);
|
||||||
|
html.data.result.forEach(function(it){
|
||||||
|
d.push({
|
||||||
|
title:it.title,
|
||||||
|
img:it.videoCover,
|
||||||
|
desc:it.msg,
|
||||||
|
url:it.id
|
||||||
|
})
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:`js: var d = [];
|
||||||
|
VOD = {
|
||||||
|
vod_id: input
|
||||||
|
};
|
||||||
|
let ts= getTime();
|
||||||
|
try {
|
||||||
|
input=input+'&sj='+ts;
|
||||||
|
let html = request(input,{
|
||||||
|
headers:getHeaders(input,ts)
|
||||||
|
});
|
||||||
|
print(html);
|
||||||
|
html = JSON.parse(html);
|
||||||
|
let node = html.data;
|
||||||
|
VOD = {
|
||||||
|
vod_id: node["id"],
|
||||||
|
vod_name: node["videoName"],
|
||||||
|
vod_pic: node["videoCover"],
|
||||||
|
type_name: node["subCategory"],
|
||||||
|
vod_year: node["year"],
|
||||||
|
vod_area: node["area"],
|
||||||
|
vod_remarks: node["msg"],
|
||||||
|
vod_actor: node["actor"],
|
||||||
|
vod_director: node["director"],
|
||||||
|
vod_content: node["brief"].strip()
|
||||||
|
};
|
||||||
|
let tid = input.split("ids=")[1].split('&')[0];
|
||||||
|
let listUrl='https://api.tyun77.cn/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&ids='+tid+'&package=com.sevenVideo.app.android&version=&sj='+ts;
|
||||||
|
html = request(listUrl,{
|
||||||
|
headers:getHeaders(listUrl,ts)
|
||||||
|
});
|
||||||
|
html = JSON.parse(html);
|
||||||
|
let episodes = html.data.episodes;
|
||||||
|
let playMap = {};
|
||||||
|
if (typeof play_url === "undefined") {
|
||||||
|
var play_url = ""
|
||||||
|
}
|
||||||
|
play_url = play_url.replace("&play_url=", "&type=json&play_url=");
|
||||||
|
episodes.forEach(function(ep) {
|
||||||
|
let playurls = ep["playurls"];
|
||||||
|
playurls.forEach(function(playurl) {
|
||||||
|
let source = playurl["playfrom"];
|
||||||
|
if (!playMap.hasOwnProperty(source)) {
|
||||||
|
playMap[source] = []
|
||||||
|
}
|
||||||
|
playMap[source].append(playurl["title"].strip() + "$" + play_url + urlencode(playurl["playurl"]))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
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)
|
||||||
|
}`,
|
||||||
|
搜索:'',
|
||||||
|
搜索:'json:data;videoName;videoCover;msg;id',
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'88看球',
|
||||||
|
// host:'http://www.88kanqiu.cc',
|
||||||
|
host:'http://www.88kanqiu.live',
|
||||||
|
url:'/match/fyclass/live',
|
||||||
|
searchUrl:'',
|
||||||
|
searchable:0,
|
||||||
|
quickSearch:0,
|
||||||
|
class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live',
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
double:false,
|
||||||
|
推荐:'*',
|
||||||
|
一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":".game-info-container&&Text;.customer-navbar-nav li&&Text",
|
||||||
|
"img":"img&&src",
|
||||||
|
"desc":";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text",
|
||||||
|
"content":"div.game-time&&Text",
|
||||||
|
"tabs":"js:TABS=['88看球']",
|
||||||
|
// "lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+play_url+it.url});LISTS.push(d)});"
|
||||||
|
"lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+it.url});LISTS.push(d)});"
|
||||||
|
},
|
||||||
|
搜索:'',
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
var rule={title:'JRKAN直播',host:'http://m.jrkan2023.com',url:'/fyclass',searchUrl:'',searchable:0,quickSearch:0,class_name:'全部',class_url:'/',headers:{'User-Agent':'MOBILE_UA'},timeout:5000,play_parse:true,lazy:'',limit:6,double:false,推荐:'*',一级:'.loc_match:eq(2) ul;li:gt(1):lt(4)&&Text;img&&src;li:lt(2)&&Text;a:eq(1)&&href',二级:{title:'.sub_list li:lt(2)&&Text;.sub_list li:eq(0)&&Text',img:'img&&src',desc:';;;.lab_team_home&&Text;.lab_team_away&&Text',content:'.sub_list ul&&Text',tabs:'',tab_text:'',lists:'.sub_channel a',list_text:'a&&Text',list_url:'a&&data-play'},搜索:'',}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{distance}from"./mod.js";import{sortListByCN}from"./sortName.js";String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};var showMode="all";var searchDriver="";var limit_search_show=200;var search_type="";var detail_order="name";var playRaw=1;const request_timeout=5e3;const VERSION="alist v2/v3 20221223";function print(any){any=any||"";if(typeof any=="object"&&Object.keys(any).length>0){try{any=JSON.stringify(any);console.log(any)}catch(e){console.log(typeof any+":"+any.length)}}else if(typeof any=="object"&&Object.keys(any).length<1){console.log("null object")}else{console.log(any)}}const http=function(url,options={}){if(options.method==="POST"&&options.data){options.body=JSON.stringify(options.data);options.headers=Object.assign({"content-type":"application/json"},options.headers)}options.timeout=request_timeout;try{const res=req(url,options);res.json=()=>res&&res.content?JSON.parse(res.content):null;res.text=()=>res&&res.content?res.content:"";return res}catch(e){return{json(){return null},text(){return""}}}};["get","post"].forEach(method=>{http[method]=function(url,options={}){return http(url,Object.assign(options,{method:method.toUpperCase()}))}});const __drives={};function isMedia(file){return/\.(dff|dsf|mp3|aac|wav|wma|cda|flac|m4a|mid|mka|mp2|mpa|mpc|ape|ofr|ogg|ra|wv|tta|ac3|dts|tak|webm|wmv|mpeg|mov|ram|swf|mp4|avi|rm|rmvb|flv|mpg|mkv|m3u8|ts|3gp|asf)$/.test(file.toLowerCase())}function get_drives_path(tid){const index=tid.indexOf("$");const name=tid.substring(0,index);const path=tid.substring(index+1);return{drives:get_drives(name),path:path}}function get_drives(name){const{settings,api,server}=__drives[name];if(settings.v3==null){settings.v3=false;const data=http.get(server+"/api/public/settings").json().data;if(Array.isArray(data)){settings.title=data.find(x=>x.key==="title")?.value;settings.v3=false;settings.version=data.find(x=>x.key==="version")?.value;settings.enableSearch=data.find(x=>x.key==="enable search")?.value==="true"}else{settings.title=data.title;settings.v3=true;settings.version=data.version;settings.enableSearch=false}api.path=settings.v3?"/api/fs/list":"/api/public/path";api.file=settings.v3?"/api/fs/get":"/api/public/path";api.search=settings.v3?"/api/public/search":"/api/public/search"}return __drives[name]}function init(ext){console.log("当前版本号:"+VERSION);let data;if(typeof ext=="object"){data=ext;print("alist ext:object")}else if(typeof ext=="string"){if(ext.startsWith("http")){let alist_data=ext.split(";");let alist_data_url=alist_data[0];limit_search_show=alist_data.length>1?Number(alist_data[1])||limit_search_show:limit_search_show;search_type=alist_data.length>2?alist_data[2]:search_type;print(alist_data_url);data=http.get(alist_data_url).json()}else{print("alist ext:json string");data=JSON.parse(ext)}}let drives=[];if(Array.isArray(data)&&data.length>0&&data[0].hasOwnProperty("server")&&data[0].hasOwnProperty("name")){drives=data}else if(!Array.isArray(data)&&data.hasOwnProperty("drives")&&Array.isArray(data.drives)){drives=data.drives.filter(it=>it.type&&it.type==="alist"||!it.type)}print(drives);searchDriver=(drives.find(x=>x.search)||{}).name||"";if(!searchDriver&&drives.length>0){searchDriver=drives[0].name}print(searchDriver);drives.forEach(item=>{let _path_param=[];if(item.params){_path_param=Object.keys(item.params);_path_param.sort((a,b)=>a.length-b.length)}if(item.password){let pwdObj={password:item.password};if(!item.params){item.params={"/":pwdObj}}else{item.params["/"]=pwdObj}_path_param.unshift("/")}__drives[item.name]={name:item.name,server:item.server.endsWith("/")?item.server.rstrip("/"):item.server,startPage:item.startPage||"/",showAll:item.showAll===true,search:!!item.search,params:item.params||{},_path_param:_path_param,settings:{},api:{},getParams(path){const key=this._path_param.find(x=>path.startsWith(x));return Object.assign({},this.params[key],{path:path})},getPath(path){const res=http.post(this.server+this.api.path,{data:this.getParams(path)}).json();return this.settings.v3?res.data.content:res.data.files},getFile(path){let raw_url=this.server+"/d"+path;raw_url=encodeURI(raw_url);let data={raw_url:raw_url,raw_url1:raw_url};if(playRaw===1){try{const res=http.post(this.server+this.api.file,{data:this.getParams(path)}).json();data=this.settings.v3?res.data:res.data.files[0];if(!this.settings.v3){data.raw_url=data.url}data.raw_url1=raw_url;return data}catch(e){return data}}else{return data}},isFolder(data){return data.type===1},isVideo(data){return this.settings.v3?data.type===2||data.type===0||data.type===3:data.type===3||data.type===0||data.type===4},is_subt(data){if(data.type===1){return false}const ext=/\.(srt|ass|scc|stl|ttml)$/;return ext.test(data.name)},getPic(data){let pic=this.settings.v3?data.thumb:data.thumbnail;return pic||(this.isFolder(data)?"https://www.yydsys.top/box/picture/duo.jpg":"")},getTime(data,isStandard){isStandard=isStandard||false;try{let tTime=data.updated_at||data.time_str||data.modified||"";let date="";if(tTime){tTime=tTime.split("T");date=tTime[0];if(isStandard){date=date.replace(/-/g,"/")}tTime=tTime[1].split(/Z|\./);date+=" "+tTime[0]}return date}catch(e){return""}}}});print("init执行完毕")}function home(filter){let classes=Object.keys(__drives).map(key=>({type_id:`${key}$${__drives[key].startPage}`,type_name:key,type_flag:"1"}));let filter_dict={};let filters=[{key:"order",name:"排序",value:[{n:"名称⬆️",v:"vod_name_asc"},{n:"名称⬇️",v:"vod_name_desc"},{n:"中英⬆️",v:"vod_cn_asc"},{n:"中英⬇️",v:"vod_cn_desc"},{n:"时间⬆️",v:"vod_time_asc"},{n:"时间⬇️",v:"vod_time_desc"},{n:"大小⬆️",v:"vod_size_asc"},{n:"大小⬇️",v:"vod_size_desc"},{n:"无",v:"none"}]},{key:"show",name:"播放展示",value:[{n:"单集",v:"single"},{n:"全集",v:"all"}]}];classes.forEach(it=>{filter_dict[it.type_id]=filters});print("----home----");print(classes);return JSON.stringify({class:classes,filters:filter_dict})}function homeVod(params){let _post_data={pageNum:0,pageSize:100};let _post_url="https://pbaccess.video.qq.com/trpc.videosearch.hot_rank.HotRankServantHttp/HotRankHttp";let data=http.post(_post_url,{data:_post_data}).json();let _list=[];try{data=data["data"]["navItemList"][0]["hotRankResult"]["rankItemList"];data.forEach(it=>{_list.push({vod_name:it.title,vod_id:"msearch:"+it.title,vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_remarks:it.changeOrder})})}catch(e){print("Alist获取首页推荐发送错误:"+e.message)}return JSON.stringify({list:_list})}function category(tid,pg,filter,extend){let orid=tid.replace(/#all#|#search#/g,"");let{drives,path}=get_drives_path(orid);const id=orid.endsWith("/")?orid:orid+"/";const list=drives.getPath(path);let subList=[];let vodFiles=[];let allList=[];let fl=filter?extend:{};if(fl.show){showMode=fl.show}list.forEach(item=>{if(drives.is_subt(item)){subList.push(item.name)}if(!drives.showAll&&!drives.isFolder(item)&&!drives.isVideo(item)){return}let vod_time=drives.getTime(item);let vod_size=get_size(item.size);let remark=vod_time.split(" ")[0].substr(3)+"\t"+vod_size;let vod_id=id+item.name+(drives.isFolder(item)?"/":"");if(showMode==="all"){vod_id+="#all#"}print(vod_id);const vod={vod_id:vod_id,vod_name:item.name.replaceAll("$","").replaceAll("#",""),vod_pic:drives.getPic(item),vod_time:vod_time,vod_size:item.size,vod_tag:drives.isFolder(item)?"folder":"file",vod_remarks:drives.isFolder(item)?remark+" 文件夹":remark};if(drives.isVideo(item)){vodFiles.push(vod)}allList.push(vod)});if(vodFiles.length===1&&subList.length>0){let sub;if(subList.length===1){sub=subList[0]}else{let subs=JSON.parse(JSON.stringify(subList));subs.sort((a,b)=>{let a_similar=(a.includes("chs")?100:0)+levenshteinDistance(a,vodFiles[0].vod_name);let b_similar=(b.includes("chs")?100:0)+levenshteinDistance(b,vodFiles[0].vod_name);if(a_similar>b_similar){return 1}else{return-1}});sub=subs.slice(-1)[0]}vodFiles[0].vod_id+="@@@"+sub;vodFiles[0].vod_remarks+="🏷️"}else{vodFiles.forEach(item=>{const lh=0;let sub;subList.forEach(s=>{const l=levenshteinDistance(s,item.vod_name);if(l>60&&l>lh){sub=s}});if(sub){item.vod_id+="@@@"+sub;item.vod_remarks+="🏷️"}})}if(fl.order){let key=fl.order.split("_").slice(0,-1).join("_");let order=fl.order.split("_").slice(-1)[0];print(`排序key:${key},排序order:${order}`);if(key.includes("name")){detail_order="name";allList=sortListByName(allList,key,order)}else if(key.includes("cn")){detail_order="cn";allList=sortListByCN(allList,"vod_name",order)}else if(key.includes("time")){detail_order="time";allList=sortListByTime(allList,key,order)}else if(key.includes("size")){detail_order="size";allList=sortListBySize(allList,key,order)}else if(fl.order.includes("none")){detail_order="none";print("不排序")}}else{if(detail_order!=="none"){allList=sortListByName(allList,"vod_name","asc")}}print("----category----"+`tid:${tid},detail_order:${detail_order},showMode:${showMode}`);return JSON.stringify({page:1,pagecount:1,limit:allList.length,total:allList.length,list:allList})}function getAll(otid,tid,drives,path){try{const content=category(tid,null,false,null);const isFile=isMedia(otid.replace(/#all#|#search#/g,"").split("@@@")[0]);const{list}=JSON.parse(content);let vod_play_url=[];list.forEach(x=>{if(x.vod_tag==="file"){let vid=x.vod_id.replace(/#all#|#search#/g,"");vod_play_url.push(`${x.vod_name}$${vid.substring(vid.indexOf("$")+1)}`)}});const pl=path.split("/").filter(it=>it);let vod_name=pl[pl.length-1]||drives.name;if(vod_name===drives.name){print(pl)}if(otid.includes("#search#")){vod_name+="[搜]"}let vod={vod_id:otid,vod_name:vod_name,type_name:"文件夹",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_tag:"folder",vod_play_from:drives.name,vod_play_url:vod_play_url.join("#"),vod_remarks:drives.settings.title};print("----detail1----");print(vod);return JSON.stringify({list:[vod]})}catch(e){print(e.message);let list=[{vod_name:"无数据,防无限请求",type_name:"文件夹",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg",vod_actor:e.message,vod_director:tid,vod_content:otid}];return JSON.stringify({list:list})}}function detail(tid){let isSearch=tid.includes("#search#");let isAll=tid.includes("#all#");let otid=tid;tid=tid.replace(/#all#|#search#/g,"");let isFile=isMedia(tid.split("@@@")[0]);print(`isFile:${tid}?${isFile}`);let{drives,path}=get_drives_path(tid);print(`drives:${drives},path:${path},`);if(path.endsWith("/")){return getAll(otid,tid,drives,path)}else{if(isSearch&&!isFile){return getAll(otid,tid,drives,path)}else if(isAll){let new_tid;if(isFile){new_tid=tid.split("/").slice(0,-1).join("/")+"/"}else{new_tid=tid}print(`全集模式 tid:${tid}=>tid:${new_tid}`);let{drives,path}=get_drives_path(new_tid);return getAll(otid,new_tid,drives,path)}else if(isFile){let paths=path.split("@@@");let vod_name=paths[0].substring(paths[0].lastIndexOf("/")+1);let vod_title=vod_name;if(otid.includes("#search#")){vod_title+="[搜]"}let vod={vod_id:otid,vod_name:vod_title,type_name:"文件",vod_pic:"https://avatars.githubusercontent.com/u/97389433?s=120&v=4",vod_content:tid,vod_play_from:drives.name,vod_play_url:vod_name+"$"+path,vod_remarks:drives.settings.title};print("----detail2----");print(vod);return JSON.stringify({list:[vod]})}else{return JSON.stringify({list:[]})}}}function play(flag,id,flags){const drives=get_drives(flag);const urls=id.split("@@@");let vod={parse:0,playUrl:"",url:drives.getFile(urls[0]).raw_url};if(urls.length>=2){const path=urls[0].substring(0,urls[0].lastIndexOf("/")+1);vod.subt=drives.getFile(path+urls[1]).raw_url1}print("----play----");print(vod);return JSON.stringify(vod)}function search(wd,quick){print(__drives);print("可搜索的alist驱动:"+searchDriver);if(!searchDriver||!wd){return JSON.stringify({list:[]})}else{let driver=__drives[searchDriver];wd=wd.split(" ").filter(it=>it.trim()).join("+");print(driver);let surl=driver.server+"/search?box="+wd+"&url=";if(search_type){surl+="&type="+search_type}print("搜索链接:"+surl);let html=http.get(surl).text();let lists=[];try{lists=pdfa(html,"div&&ul&&a")}catch(e){}print(`搜索结果数:${lists.length},搜索结果显示数量限制:${limit_search_show}`);let vods=[];let excludeReg=/\.(pdf|epub|mobi|txt|doc|lrc)$/;let cnt=0;lists.forEach(it=>{let vhref=pdfh(it,"a&&href");if(vhref){vhref=unescape(vhref)}if(excludeReg.test(vhref)){return}if(cnt<limit_search_show){print(vhref)}cnt++;let vid=searchDriver+"$"+vhref+"#search#";if(showMode==="all"){vid+="#all#"}vods.push({vod_name:pdfh(it,"a&&Text"),vod_id:vid,vod_tag:isMedia(vhref)?"file":"folder",vod_pic:"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png",vod_remarks:searchDriver})});vods=vods.slice(0,limit_search_show);print(vods);return JSON.stringify({list:vods})}}function get_size(sz){if(sz<=0){return""}let filesize="";if(sz>1024*1024*1024*1024){sz/=1024*1024*1024*1024;filesize="TB"}else if(sz>1024*1024*1024){sz/=1024*1024*1024;filesize="GB"}else if(sz>1024*1024){sz/=1024*1024;filesize="MB"}else if(sz>1024){sz/=1024;filesize="KB"}else{filesize="B"}let sizeStr=sz.toFixed(2)+filesize,index=sizeStr.indexOf("."),dou=sizeStr.substr(index+1,2);if(dou==="00"){return sizeStr.substring(0,index)+sizeStr.substr(index+3,2)}else{return sizeStr}}function levenshteinDistance(str1,str2){return 100-100*distance(str1,str2)/Math.max(str1.length,str2.length)}function naturalSort(options){if(!options){options={}}return function(a,b){if(options.key){a=a[options.key];b=b[options.key]}var EQUAL=0;var GREATER=options.order==="desc"?-1:1;var SMALLER=-GREATER;var re=/(^-?[0-9]+(\.?[0-9]*)[df]?e?[0-9]?$|^0x[0-9a-f]+$|[0-9]+)/gi;var sre=/(^[ ]*|[ ]*$)/g;var dre=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/;var hre=/^0x[0-9a-f]+$/i;var ore=/^0/;var normalize=function normalize(value){var string=""+value;return options.caseSensitive?string:string.toLowerCase()};var x=normalize(a).replace(sre,"")||"";var y=normalize(b).replace(sre,"")||"";var xN=x.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");var yN=y.replace(re,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0");if(!x&&!y)return EQUAL;if(!x&&y)return GREATER;if(x&&!y)return SMALLER;var xD=parseInt(x.match(hre))||xN.length!=1&&x.match(dre)&&Date.parse(x);var yD=parseInt(y.match(hre))||xD&&y.match(dre)&&Date.parse(y)||null;var oFxNcL,oFyNcL;if(yD){if(xD<yD)return SMALLER;else if(xD>yD)return GREATER}for(var cLoc=0,numS=Math.max(xN.length,yN.length);cLoc<numS;cLoc++){oFxNcL=!(xN[cLoc]||"").match(ore)&&parseFloat(xN[cLoc])||xN[cLoc]||0;oFyNcL=!(yN[cLoc]||"").match(ore)&&parseFloat(yN[cLoc])||yN[cLoc]||0;if(isNaN(oFxNcL)!==isNaN(oFyNcL))return isNaN(oFxNcL)?GREATER:SMALLER;else if(typeof oFxNcL!==typeof oFyNcL){oFxNcL+="";oFyNcL+=""}if(oFxNcL<oFyNcL)return SMALLER;if(oFxNcL>oFyNcL)return GREATER}return EQUAL}}const sortListByName=(vodList,key,order)=>{if(!key){return vodList}order=order||"asc";return vodList.sort(naturalSort({key:key,order:order,caseSensitive:true}))};const getTimeInt=timeStr=>{return new Date(timeStr).getTime()};const sortListByTime=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return getTimeInt(a)-getTimeInt(b)});if(order==="desc"){ASCarr.reverse()}return ASCarr};const sortListBySize=(vodList,key,order)=>{if(!key){return vodList}let ASCarr=vodList.sort((a,b)=>{a=a[key];b=b[key];return(Number(a)||0)-(Number(b)||0)});if(order==="desc"){ASCarr.reverse()}return ASCarr};export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search};
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'兔小贝',
|
||||||
|
host:'https://www.tuxiaobei.com',
|
||||||
|
homeUrl:'',
|
||||||
|
url:'/list/mip-data?typeId=fyclass&page=fypage&callback=',
|
||||||
|
detailUrl:'/play/fyid',
|
||||||
|
searchUrl:'/search/index?key=**',
|
||||||
|
searchable:2,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_url:'2&3&4&25',
|
||||||
|
class_name:'儿歌&故事&国学&启蒙',
|
||||||
|
//class_name:'#page-viewport&&ul&&li;.text&&Text;a&&href;/(.*)',
|
||||||
|
cate_exclude:'应用',
|
||||||
|
推荐:'.pic-list.list-box;.items;.text&&Text;mip-img&&src;.all&&Text;a&&href',
|
||||||
|
double:true,
|
||||||
|
limit:5,
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:fetch_params.headers["user-agent"] = IOS_UA;let html=fetch(input,fetch_params);let src = jsp.pdfh(html,"body&&#videoWrap&&video-src");input=src;',
|
||||||
|
// 一级:'json:data.items;name;image;collect_num;category_id+video_id',
|
||||||
|
一级:'json:data.items;name;image;duration_string;video_id',
|
||||||
|
二级:'*',
|
||||||
|
搜索:'.list-con&&.items;.text&&Text;mip-img&&src;.time&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'百忙无果',
|
||||||
|
host:'https://pianku.api.%6d%67%74%76.com',
|
||||||
|
homeUrl:'',
|
||||||
|
searchUrl:'https://mobileso.bz.%6d%67%74%76.com/pc/search/v1?q=**&pn=fypage&pc=10',
|
||||||
|
detailUrl:'https://pcweb.api.mgtv.com/episode/list?page=1&size=50&video_id=fyid',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
multi:1,
|
||||||
|
// 分类链接fypage参数支持1个()表达式
|
||||||
|
// https://www.mgtv.com/lib/3?lastp=list_index&kind=a1&year=all&chargeInfo=a1&sort=c2
|
||||||
|
url:'/rider/list/pcweb/v3?platform=pcweb&channelId=fyclass&pn=fypage&pc=80&hudong=1&_support=10000000&kind=a1&area=a1',
|
||||||
|
filter_url:'year={{fl.year or "all"}}&sort={{fl.sort or "all"}}&chargeInfo={{fl.chargeInfo or "all"}}',
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电视剧&电影&综艺&动漫&纪录片&教育&少儿',
|
||||||
|
class_url:'2&3&1&50&51&115&10',
|
||||||
|
filter:{'2': [{'key': 'chargeInfo', 'name': '付费类型', 'value': [{'n': '全部', 'v': 'all'}, {'n': '免费', 'v': 'b1'}, {'n': 'vip', 'v': 'b2'}, {'n': 'VIP用券', 'v': 'b3'}, {'n': '付费点播', 'v': 'b4'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': 'all'}, {'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'}]}], '3': [{'key': 'chargeInfo', 'name': '付费类型', 'value': [{'n': '全部', 'v': 'all'}, {'n': '免费', 'v': 'b1'}, {'n': 'vip', 'v': 'b2'}, {'n': 'VIP用券', 'v': 'b3'}, {'n': '付费点播', 'v': 'b4'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': 'all'}, {'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'}]}], '1': [{'key': 'chargeInfo', 'name': '付费类型', 'value': [{'n': '全部', 'v': 'all'}, {'n': '免费', 'v': 'b1'}, {'n': 'vip', 'v': 'b2'}, {'n': 'VIP用券', 'v': 'b3'}, {'n': '付费点播', 'v': 'b4'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': 'all'}, {'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'}]}], '50': [{'key': 'chargeInfo', 'name': '付费类型', 'value': [{'n': '全部', 'v': 'all'}, {'n': '免费', 'v': 'b1'}, {'n': 'vip', 'v': 'b2'}, {'n': 'VIP用券', 'v': 'b3'}, {'n': '付费点播', 'v': 'b4'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': 'all'}, {'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'}]}], '51': [{'key': 'chargeInfo', 'name': '付费类型', 'value': [{'n': '全部', 'v': 'all'}, {'n': '免费', 'v': 'b1'}, {'n': 'vip', 'v': 'b2'}, {'n': 'VIP用券', 'v': 'b3'}, {'n': '付费点播', 'v': 'b4'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': 'all'}, {'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'}]}], '115': [{'key': 'chargeInfo', 'name': '付费类型', 'value': [{'n': '全部', 'v': 'all'}, {'n': '免费', 'v': 'b1'}, {'n': 'vip', 'v': 'b2'}, {'n': 'VIP用券', 'v': 'b3'}, {'n': '付费点播', 'v': 'b4'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '最新', 'v': 'c1'}, {'n': '最热', 'v': 'c2'}, {'n': '知乎高分', 'v': 'c4'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': 'all'}, {'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'}]}]},
|
||||||
|
limit:20,
|
||||||
|
play_parse:true,
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
// lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};',
|
||||||
|
// 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
一级:'json:data.hitDocs;title;img;updateInfo||rightCorner.text;playPartId',
|
||||||
|
// 一级:'json:data.hitDocs;title;img;updateInfo;playPartId',
|
||||||
|
二级:'',
|
||||||
|
二级:'js:log(input);',
|
||||||
|
二级:'js:fetch_params.headers.Referer="https://www.mgtv.com";fetch_params.headers["User-Agent"]=UA;pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;VOD={};let d=[];let html=request(input);let json=JSON.parse(html);let host="https://www.mgtv.com";let ourl=json.data.list.length>0?json.data.list[0].url:json.data.series[0].url;if(!/^http/.test(ourl)){ourl=host+ourl}fetch_params.headers["User-Agent"]=MOBILE_UA;html=request(ourl);if(html.includes("window.location =")){print("开始获取ourl");ourl=pdfh(html,"meta[http-equiv=refresh]&&content").split("url=")[1];print("获取到ourl:"+ourl);html=request(ourl)}try{let details=pdfh(html,".m-details&&Html").replace(/h1>/,"h6>").replace(/div/g,"br");print(details);let actor="",director="",time="";if(/播出时间/.test(details)){actor=pdfh(html,"p:eq(5)&&Text").substr(0,25);director=pdfh(html,"p:eq(4)&&Text");time=pdfh(html,"p:eq(3)&&Text")}else{actor=pdfh(html,"p:eq(4)&&Text").substr(0,25);director=pdfh(html,"p:eq(3)&&Text");time="已完结"}let _img=pd(html,".video-img&&img&&src");let JJ=pdfh(html,".desc&&Text").split("简介:")[1];let _desc=time;VOD.vod_name=pdfh(html,".vt-txt&&Text");VOD.type_name=pdfh(html,"p:eq(0)&&Text").substr(0,6);VOD.vod_area=pdfh(html,"p:eq(1)&&Text");VOD.vod_actor=actor;VOD.vod_director=director;VOD.vod_remarks=_desc;VOD.vod_pic=_img;VOD.vod_content=JJ}catch(e){log("获取影片信息发生错误:"+e.message)}function getRjpg(imgUrl,xs){xs=xs||3;let picSize=/jpg_/.test(imgUrl)?imgUrl.split("jpg_")[1].split(".")[0]:false;let rjpg=false;if(picSize){let a=parseInt(picSize.split("x")[0])*xs;let b=parseInt(picSize.split("x")[1])*xs;rjpg=a+"x"+b+".jpg"}let img=/jpg_/.test(imgUrl)&&rjpg?imgUrl.replace(imgUrl.split("jpg_")[1],rjpg):imgUrl;return img}if(json.data.total===1&&json.data.list.length===1){let data=json.data.list[0];let url="https://www.mgtv.com"+data.url;d.push({title:data.t4,desc:data.t2,pic_url:getRjpg(data.img),url:url})}else if(json.data.list.length>1){for(let i=1;i<=json.data.total_page;i++){if(i>1){json=JSON.parse(fetch(input.replace("page=1","page="+i),{}))}json.data.list.forEach(function(data){let url="https://www.mgtv.com"+data.url;if(data.isIntact=="1"){d.push({title:data.t4,desc:data.t2,pic_url:getRjpg(data.img),url:url})}})}}else{print(input+"暂无片源")}VOD.vod_id=input;VOD.vod_play_from="mgtv";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");setResult(d);',
|
||||||
|
搜索:'',
|
||||||
|
搜索:'js:fetch_params.headers.Referer="https://www.mgtv.com";fetch_params.headers["User-Agent"]=UA;let d=[];let html=request(input);let json=JSON.parse(html);json.data.contents.forEach(function(data){if(data.data.sourceList||data.data.yearList){let list=data.data.sourceList?data.data.sourceList:data.data.yearList[0].sourceList;let desc="";list.forEach(function(it){desc+=it.name+"\\t"});if(list[0].source==="imgo"){let img=data.data.pic?data.data.pic:data.data.yearList[0].pic;d.push({title:data.data.title?data.data.title:data.data.yearList[0].title,img:img,content:data.data.story?data.data.story:data.data.yearList[0].story,desc:data.data.playTime,url:list[0].vid})}}});setResult(d);',
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '哔嘀影视',
|
||||||
|
host: 'https://www.bdys10.com',
|
||||||
|
// url: '/s/all/fypage?type=fyclass',
|
||||||
|
url: '/s/all/fypage?type=fyclassfyfilter',
|
||||||
|
filter_url:'&{{fl.area}}&{{fl.year}}&{{fl.by}}',
|
||||||
|
filter: {"0":[{"key":"area","name":"地区","value":[{"n":"不限","v":""},{"n":"中国大陆","v":"area=中国大陆"},{"n":"中国香港","v":"area=中国香港"},{"n":"中国台湾","v":"area=中国台湾"},{"n":"美国","v":"area=美国"},{"n":"英国","v":"area=英国"},{"n":"日本","v":"area=日本"},{"n":"韩国","v":"area=韩国"},{"n":"法国","v":"area=法国"},{"n":"印度","v":"area=印度"},{"n":"德国","v":"area=德国"},{"n":"西班牙","v":"area=西班牙"},{"n":"意大利","v":"area=意大利"},{"n":"澳大利亚","v":"area=澳大利亚"},{"n":"比利时","v":"area=比利时"},{"n":"瑞典","v":"area=瑞典"},{"n":"荷兰","v":"area=荷兰"},{"n":"丹麦","v":"area=丹麦"},{"n":"加拿大","v":"area=加拿大"},{"n":"俄罗斯","v":"area=俄罗斯"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"year=2023"},{"n":"2022","v":"year=2022"},{"n":"2021","v":"year=2021"},{"n":"2020","v":"year=2020"},{"n":"2019","v":"year=2019"},{"n":"2018","v":"year=2018"},{"n":"2017","v":"year=2017"},{"n":"2016","v":"year=2016"},{"n":"2015","v":"year=2015"},{"n":"2014","v":"year=2014"},{"n":"2013","v":"year=2013"},{"n":"2012","v":"year=2012"},{"n":"2011","v":"year=2011"},{"n":"2010","v":"year=2010"},{"n":"2009","v":"year=2009"},{"n":"2008","v":"year=2008"},{"n":"2007","v":"year=2007"},{"n":"2006","v":"year=2006"},{"n":"2005","v":"year=2005"},{"n":"2004","v":"year=2004"},{"n":"2003","v":"year=2003"},{"n":"2002","v":"year=2002"},{"n":"2001","v":"year=2001"},{"n":"2000","v":"year=2000"}]},{"key":"by","name":"排序","value":[{"n":"更新时间","v":"order=0"},{"n":"豆瓣评分","v":"order=1"}]}],"1":[{"key":"area","name":"地区","value":[{"n":"不限","v":""},{"n":"中国大陆","v":"area=中国大陆"},{"n":"中国香港","v":"area=中国香港"},{"n":"中国台湾","v":"area=中国台湾"},{"n":"美国","v":"area=美国"},{"n":"英国","v":"area=英国"},{"n":"日本","v":"area=日本"},{"n":"韩国","v":"area=韩国"},{"n":"法国","v":"area=法国"},{"n":"印度","v":"area=印度"},{"n":"德国","v":"area=德国"},{"n":"西班牙","v":"area=西班牙"},{"n":"意大利","v":"area=意大利"},{"n":"澳大利亚","v":"area=澳大利亚"},{"n":"比利时","v":"area=比利时"},{"n":"瑞典","v":"area=瑞典"},{"n":"荷兰","v":"area=荷兰"},{"n":"丹麦","v":"area=丹麦"},{"n":"加拿大","v":"area=加拿大"},{"n":"俄罗斯","v":"area=俄罗斯"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"year=2023"},{"n":"2022","v":"year=2022"},{"n":"2021","v":"year=2021"},{"n":"2020","v":"year=2020"},{"n":"2019","v":"year=2019"},{"n":"2018","v":"year=2018"},{"n":"2017","v":"year=2017"},{"n":"2016","v":"year=2016"},{"n":"2015","v":"year=2015"},{"n":"2014","v":"year=2014"},{"n":"2013","v":"year=2013"},{"n":"2012","v":"year=2012"},{"n":"2011","v":"year=2011"},{"n":"2010","v":"year=2010"},{"n":"2009","v":"year=2009"},{"n":"2008","v":"year=2008"},{"n":"2007","v":"year=2007"},{"n":"2006","v":"year=2006"},{"n":"2005","v":"year=2005"},{"n":"2004","v":"year=2004"},{"n":"2003","v":"year=2003"},{"n":"2002","v":"year=2002"},{"n":"2001","v":"year=2001"},{"n":"2000","v":"year=2000"}]},{"key":"by","name":"排序","value":[{"n":"更新时间","v":"order=0"},{"n":"豆瓣评分","v":"order=1"}]}]},
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
class_name: '电影&电视剧',
|
||||||
|
class_url: '0&1',
|
||||||
|
searchUrl: '/search/**/fypage',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐:'.row-cards;.card-link;*;img&&data-src;*;*',
|
||||||
|
一级:'.row-cards&&.card-link;h3&&Text;img&&src;p&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":"h2&&Text;.mt-1&&Text",
|
||||||
|
"img":".col-md-auto img&&src",
|
||||||
|
"desc":";;;.mb-md-2:eq(3)&&Text;.mb-md-2:eq(1)&&Text",
|
||||||
|
"content":"#synopsis .card-body&&Text",
|
||||||
|
"tabs":".card-header:eq(1) h3",
|
||||||
|
"lists":"#play-list:eq(#id) a"
|
||||||
|
},
|
||||||
|
搜索:'.row-cards .row-0;.d-inline-block&&title;img&&src;.d-inline-block&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'磁力熊[磁]',
|
||||||
|
host:'https://www.cilixiong.com',
|
||||||
|
homeUrl:'/top250/index.html',
|
||||||
|
// url: '/fyclass/index_(fypage-1).html',
|
||||||
|
url: '/fyclassfyfilter-(fypage-1).html',
|
||||||
|
filter_url:'-{{fl.class or "0"}}-{{fl.area or "0"}}',
|
||||||
|
filter:{
|
||||||
|
"1":[{"key":"class","name":"类型","value":[{"n":"全部","v":"0"},{"n":"剧情","v":"1"},{"n":"喜剧","v":"2"},{"n":"惊悚","v":"3"},{"n":"动作","v":"4"},{"n":"爱情","v":"5"},{"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"},{"n":"历史","v":"15"},{"n":"传记","v":"16"},{"n":"音乐","v":"17"},{"n":"歌舞","v":"18"},{"n":"运动","v":"19"},{"n":"西部","v":"20"},{"n":"灾难","v":"21"},{"n":"古装","v":"22"},{"n":"情色","v":"23"},{"n":"同性","v":"24"},{"n":"儿童","v":"25"},{"n":"纪录片","v":"26"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"1"},{"n":"香港","v":"2"},{"n":"台湾","v":"3"},{"n":"美国","v":"4"},{"n":"日本","v":"5"},{"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"},{"n":"加拿大","v":"15"},{"n":"俄罗斯","v":"16"},{"n":"意大利","v":"17"},{"n":"比利时","v":"18"},{"n":"爱尔兰","v":"19"},{"n":"西班牙","v":"20"},{"n":"澳大利亚","v":"21"},{"n":"波兰","v":"22"},{"n":"土耳其","v":"23"},{"n":"越南","v":"24"}]}],
|
||||||
|
"2":[{"key":"class","name":"类型","value":[{"n":"全部","v":"0"},{"n":"剧情","v":"1"},{"n":"喜剧","v":"2"},{"n":"惊悚","v":"3"},{"n":"动作","v":"4"},{"n":"爱情","v":"5"},{"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"},{"n":"历史","v":"15"},{"n":"传记","v":"16"},{"n":"音乐","v":"17"},{"n":"歌舞","v":"18"},{"n":"运动","v":"19"},{"n":"西部","v":"20"},{"n":"灾难","v":"21"},{"n":"古装","v":"22"},{"n":"情色","v":"23"},{"n":"同性","v":"24"},{"n":"儿童","v":"25"},{"n":"纪录片","v":"26"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"1"},{"n":"香港","v":"2"},{"n":"台湾","v":"3"},{"n":"美国","v":"4"},{"n":"日本","v":"5"},{"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"},{"n":"加拿大","v":"15"},{"n":"俄罗斯","v":"16"},{"n":"意大利","v":"17"},{"n":"比利时","v":"18"},{"n":"爱尔兰","v":"19"},{"n":"西班牙","v":"20"},{"n":"澳大利亚","v":"21"},{"n":"波兰","v":"22"},{"n":"土耳其","v":"23"},{"n":"越南","v":"24"}]}]
|
||||||
|
},
|
||||||
|
searchUrl: '/e/search/index.php#classid=1,2&show=title&tempid=1&keyboard=**;post',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电影&剧集&豆瓣电影Top250&IMDB Top250&高分悬疑片&高分喜剧片&高分传记片&高分爱情片&高分犯罪片&高分恐怖片&高分冒险片&高分武侠片&高分奇幻片&高分历史片&高分战争片&高分歌舞片&高分灾难片&高分情色片&高分西部片&高分音乐片&高分科幻片&高分动作片&高分动画片&高分纪录片&冷门佳片',
|
||||||
|
class_url:'1&2&/top250/&/s/imdbtop250/&/s/suspense/&/s/comedy/&/s/biopic/&/s/romance/&/s/crime/&/s/horror/&/s/adventure/&/s/martial/&/s/fantasy/&/s/history/&/s/war/&/s/musical/&/s/disaster/&/s/erotic/&/s/west/&/s/music/&/s/sci-fi/&s/action/&/s/animation/&/s/documentary/&/s/unpopular/',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐: `js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
var d = [];
|
||||||
|
var html = request(input);
|
||||||
|
var list = pdfa(html, 'body&&.col');
|
||||||
|
list.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
title: pdfh(it, 'h2&&Text'),
|
||||||
|
desc: pdfh(it, '.me-auto&&Text') + '分 / ' + pdfh(it, '.small&&Text'),
|
||||||
|
// pic_url: pd(it, '.card-img&&style'), // 只有 影视TV&爱佬版 有图片
|
||||||
|
pic_url: /!'/.test(pd(it, '.card-img&&style'))?pd(it, '.card-img&&style'):pd(it, '.card-img&&style').replaceAll("'",""), // 兼容 影视TV&爱佬版 以外的其它壳子
|
||||||
|
url: pd(it, 'a&&href')
|
||||||
|
});
|
||||||
|
})
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
一级: `js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
var d = [];
|
||||||
|
if (MY_CATE !== '1' && MY_CATE !== '2') {
|
||||||
|
let turl = (MY_PAGE === 1)? 'index' : 'index_'+ MY_PAGE;
|
||||||
|
input = HOST + MY_CATE + turl + '.html';
|
||||||
|
}
|
||||||
|
var html = request(input);
|
||||||
|
var list = pdfa(html, 'body&&.col');
|
||||||
|
list.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
title: pdfh(it, 'h2&&Text'),
|
||||||
|
desc: pdfh(it, '.me-auto&&Text') + '分 / ' + pdfh(it, '.small&&Text'),
|
||||||
|
// pic_url: pdfh(it, '.card-img&&style'), // 只有 影视TV&爱佬版 有图片
|
||||||
|
pic_url: /!'/.test(pd(it, '.card-img&&style'))?pd(it, '.card-img&&style'):pd(it, '.card-img&&style').replaceAll("'",""), // 兼容 影视TV&爱佬版 以外的其它壳子
|
||||||
|
url: pd(it, 'a&&href')
|
||||||
|
});
|
||||||
|
})
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:{
|
||||||
|
title:'h1&&Text;p.mb-2:eq(4)&&Text',
|
||||||
|
desc:'p.mb-2:eq(1)&&Text;;;p.mb-2:eq(7)&&Text;p.mb-2:eq(5)&&Text',
|
||||||
|
img:'.rounded-2&&src',
|
||||||
|
content:'.mv_card_box&&Text',
|
||||||
|
// tabs:'js:TABS = ["道长磁力"]',
|
||||||
|
// lists:'.mv_down:eq(#id)&&.border-bottom',
|
||||||
|
// list_text:'a&&Text',
|
||||||
|
// list_url:'a&&href',
|
||||||
|
|
||||||
|
tabs:'js:TABS = ["道长磁力","道长在线预览"]',
|
||||||
|
lists:`js:
|
||||||
|
log(TABS);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
LISTS = [];
|
||||||
|
var dd=[];
|
||||||
|
TABS.forEach(function(tab) {
|
||||||
|
if (/道长磁力/.test(tab)) {
|
||||||
|
var d = pdfa(html, '.mv_down&&.border-bottom');
|
||||||
|
d = d.map(function(it) {
|
||||||
|
var title = pdfh(it, 'a&&Text');
|
||||||
|
log('title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
|
||||||
|
var burl = pd(it, 'a&&href');
|
||||||
|
log('burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
|
||||||
|
return title + '$' + burl
|
||||||
|
});
|
||||||
|
LISTS.push(d)
|
||||||
|
} else if (/道长在线预览/.test(tab)) {
|
||||||
|
var d = pd(html, 'iframe&&src');
|
||||||
|
if (d) {
|
||||||
|
d=['第一集在线播放预览$' + d]
|
||||||
|
} else {
|
||||||
|
d=['没有预览不要点$http://www.sharenice.net/douyin/23852']
|
||||||
|
}
|
||||||
|
LISTS.push(d)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
搜索:'.col;h2&&Text;.card-img&&style;.me-auto&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '博看听书',
|
||||||
|
host: 'https://api.bookan.com.cn',
|
||||||
|
homeUrl:'/voice/book/list?instance_id=25304&page=1&category_id=1305&num=24',
|
||||||
|
url: '/voice/book/list?instance_id=25304&page=fypage&category_id=fyclass&num=24',
|
||||||
|
detailUrl:'/voice/album/units?album_id=fyid&page=1&num=200&order=1',
|
||||||
|
searchUrl: 'https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=**&pageNum=fypage&limitNum=20',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
class_name:'少年读物&儿童文学&国学经典&文艺少年&育儿心经&心理哲学&青春励志&历史小说&故事会&音乐戏剧&相声评书',
|
||||||
|
class_url:'1305&1304&1320&1306&1309&1310&1307&1312&1303&1317&1319',
|
||||||
|
headers:{'User-Agent':'MOBILE_UA'},
|
||||||
|
推荐:'*',
|
||||||
|
一级:'json:data.list;name;cover;extra.author;id',
|
||||||
|
二级:'js:let d=[];VOD={vod_url:input,vod_name:"",vod_actor:"",vod_year:"",vod_director:""};let playlists=[];let data=JSON.parse(request(input)).data;VOD.vod_name=data.list[0].id;VOD.vod_actor="▶️创建于"+data.list[0].created_at;VOD.vod_year=data.list[0].created_at.split("-")[0];VOD.vod_director="▶️更新于"+data.list[0].updated_at;let total=data.total;playlists=data.list;if(total>200){for(let i=2;i<total/200+1;i++){let listUrl=input.split("&")[0]+"&page="+i+"&num=200&order=1";let data=JSON.parse(request(listUrl)).data;playlists=playlists.concat(data.list)}}playlists.forEach(function(it){d.push({title:it.title,url:it.file})});VOD.vod_play_from="bookan";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
// 搜索验证
|
||||||
|
var rule = {
|
||||||
|
title:'B站影视',
|
||||||
|
// host:'https://bzhanys.com',
|
||||||
|
host:'https://bzhanyy.com',
|
||||||
|
// url:'/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||||
|
// url:'/index.php/vod/show/id/fyfilter.html',
|
||||||
|
url:'/api.php/xiao/vod?type=fyclass&page=fypage&limit=24',
|
||||||
|
// filterable:1,//是否启用分类筛选,
|
||||||
|
// filter_url:'{{fl.cateId}}{{fl.area}}{{fl.by}}{{fl.class}}/page/fypage{{fl.year}}',
|
||||||
|
// filter:{
|
||||||
|
// "1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"喜剧","v":"6"},{"n":"爱情","v":"7"},{"n":"恐怖","v":"8"},{"n":"科幻","v":"9"},{"n":"剧情","v":"10"},{"n":"战争","v":"11"},{"n":"犯罪","v":"12"},{"n":"武侠","v":"21"},{"n":"纪录","v":"20"},{"n":"理论片","v":"26"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"by","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],
|
||||||
|
// "2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"by","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],
|
||||||
|
// "3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"曲艺","v":"/class/曲艺"},{"n":"生活","v":"/class/生活"},{"n":"游戏互动","v":"/class/游戏互动"},{"n":"财经","v":"/class/财经"},{"n":"求职","v":"/class/求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"港台","v":"/area/港台"},{"n":"日韩","v":"/area/日韩"},{"n":"欧美","v":"/area/欧美"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"by","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}],
|
||||||
|
// "4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"/class/情感"},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"/area/国产"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"},{"n":"2003","v":"/year/2003"},{"n":"2002","v":"/year/2002"},{"n":"2001","v":"/year/2001"},{"n":"2000","v":"/year/2000"}]},{"key":"by","name":"排序","value":[{"n":"按时间","v":"/by/time"},{"n":"按人气","v":"/by/hits"},{"n":"按评分","v":"/by/score"}]}]
|
||||||
|
// },
|
||||||
|
// filter_def:{
|
||||||
|
// 1:{cateId:'1'},
|
||||||
|
// 2:{cateId:'2'},
|
||||||
|
// 3:{cateId:'3'},
|
||||||
|
// 4:{cateId:'4'}
|
||||||
|
// },
|
||||||
|
searchable:2,//是否启用全局搜索,
|
||||||
|
quickSearch:0,//是否启用快速搜索,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA'
|
||||||
|
},
|
||||||
|
class_parse: '.fixed-nav&&.flex:lt(4);li&&Text;li&&data-id',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
var from = html.from;
|
||||||
|
if (html.encrypt == '1') {
|
||||||
|
url = unescape(url)
|
||||||
|
} else if (html.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url))
|
||||||
|
}
|
||||||
|
if (/m3u8|mp4/.test(url)) {
|
||||||
|
input = url
|
||||||
|
} else {
|
||||||
|
var MacPlayerConfig = {};
|
||||||
|
eval(fetch(HOST + "/static/js/playerconfig.js").replace('var Mac', 'Mac'));
|
||||||
|
var jx = MacPlayerConfig.player_list[from].parse;
|
||||||
|
if (jx == '') {
|
||||||
|
jx = MacPlayerConfig.parse
|
||||||
|
};
|
||||||
|
if (jx.startsWith("/")) {
|
||||||
|
jx = "https:" + jx;
|
||||||
|
}
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: jx + url,
|
||||||
|
parse: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
limit:6,
|
||||||
|
// 推荐:'*',
|
||||||
|
推荐:'.movie-list-body&&.movie-list-item;.movie-title&&Text;.Lazy&&data-original;.movie-rating&&Text;a&&href',
|
||||||
|
// 一级:'.movie-list-body&&.movie-list-item;.movie-title&&Text;.Lazy&&data-original;.movie-rating&&Text;a&&href',
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_score;vod_id',
|
||||||
|
二级访问前:'log(MY_URL);MY_URL=MY_URL.replace("/play/","/detail/").replace("/sid/1/nid/1","");log(MY_URL)',
|
||||||
|
二级:{
|
||||||
|
"title":"h1&&title;.scroll-content&&Text",
|
||||||
|
"img":".poster&&img&&src",
|
||||||
|
"desc":";;;.starLink&&Text;.cr3:eq(0)&&Text",
|
||||||
|
"content":".detailsTxt--div&&Text",
|
||||||
|
"tabs":".swiper-wrapper&&a",
|
||||||
|
"lists":".content_playlist:eq(#id)&&li"
|
||||||
|
},
|
||||||
|
|
||||||
|
// searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
|
||||||
|
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
detailUrl:'/index.php/vod/detail/id/fyid.html',
|
||||||
|
// 搜索:'.movie-list-body&&.vod-search-list;*;*;.getop&&Text;*',
|
||||||
|
搜索:'json:list;name;pic;;id',
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
`,
|
||||||
|
}
|
||||||
Vendored
+2
File diff suppressed because one or more lines are too long
@@ -0,0 +1,25 @@
|
|||||||
|
muban.首图.二级.title = 'h1&&Text;.data:eq(0)--span&&Text';
|
||||||
|
muban.首图.二级.desc = '.score&&Text;;;.data:eq(2)--span&&Text;.data:eq(3)--span&&Text';
|
||||||
|
var rule={
|
||||||
|
title:'创艺影视',
|
||||||
|
模板:'首图',
|
||||||
|
host:'https://www.30dian.cn',
|
||||||
|
url:'/vodshow/fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter:{
|
||||||
|
"1":[{"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":"其它"}]},{"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":"2006","v":"2006"},{"n":"2005","v":"2005"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"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":"香港地区"}]},{"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":"2006","v":"2006"},{"n":"2005","v":"2005"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"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":"美国"},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"class","name":"剧情","value":[{"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":"其他"}]},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"30":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'PC_UA',
|
||||||
|
},
|
||||||
|
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(6);a&&Text;a&&href;/(\\d+).html',
|
||||||
|
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
|
||||||
|
推荐: '*',
|
||||||
|
double: false, // 推荐内容是否双层定位
|
||||||
|
一级: '.myui-vodlist li;a&&title;a&&data-original;.tag&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,6191 @@
|
|||||||
|
;(function (root, factory) {
|
||||||
|
if (typeof exports === "object") {
|
||||||
|
// CommonJS
|
||||||
|
module.exports = exports = factory();
|
||||||
|
}
|
||||||
|
else if (typeof define === "function" && define.amd) {
|
||||||
|
// AMD
|
||||||
|
define([], factory);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Global (browser)
|
||||||
|
globalThis.CryptoJS = factory();
|
||||||
|
}
|
||||||
|
}(this, function () {
|
||||||
|
|
||||||
|
/*globals window, global, require*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CryptoJS core components.
|
||||||
|
*/
|
||||||
|
var CryptoJS = CryptoJS || (function (Math, undefined) {
|
||||||
|
|
||||||
|
var crypto;
|
||||||
|
|
||||||
|
// Native crypto from window (Browser)
|
||||||
|
if (typeof window !== 'undefined' && window.crypto) {
|
||||||
|
crypto = window.crypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Native crypto in web worker (Browser)
|
||||||
|
if (typeof self !== 'undefined' && self.crypto) {
|
||||||
|
crypto = self.crypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Native crypto from worker
|
||||||
|
if (typeof globalThis !== 'undefined' && globalThis.crypto) {
|
||||||
|
crypto = globalThis.crypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Native (experimental IE 11) crypto from window (Browser)
|
||||||
|
if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
|
||||||
|
crypto = window.msCrypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Native crypto from global (NodeJS)
|
||||||
|
if (!crypto && typeof global !== 'undefined' && global.crypto) {
|
||||||
|
crypto = global.crypto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Native crypto import via require (NodeJS)
|
||||||
|
if (!crypto && typeof require === 'function') {
|
||||||
|
try {
|
||||||
|
crypto = require('crypto');
|
||||||
|
} catch (err) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Cryptographically secure pseudorandom number generator
|
||||||
|
*
|
||||||
|
* As Math.random() is cryptographically not safe to use
|
||||||
|
*/
|
||||||
|
var cryptoSecureRandomInt = function () {
|
||||||
|
if (crypto) {
|
||||||
|
// Use getRandomValues method (Browser)
|
||||||
|
if (typeof crypto.getRandomValues === 'function') {
|
||||||
|
try {
|
||||||
|
return crypto.getRandomValues(new Uint32Array(1))[0];
|
||||||
|
} catch (err) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use randomBytes method (NodeJS)
|
||||||
|
if (typeof crypto.randomBytes === 'function') {
|
||||||
|
try {
|
||||||
|
return crypto.randomBytes(4).readInt32LE();
|
||||||
|
} catch (err) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error('Native crypto module could not be used to get secure random number.');
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local polyfill of Object.create
|
||||||
|
|
||||||
|
*/
|
||||||
|
var create = Object.create || (function () {
|
||||||
|
function F() {}
|
||||||
|
|
||||||
|
return function (obj) {
|
||||||
|
var subtype;
|
||||||
|
|
||||||
|
F.prototype = obj;
|
||||||
|
|
||||||
|
subtype = new F();
|
||||||
|
|
||||||
|
F.prototype = null;
|
||||||
|
|
||||||
|
return subtype;
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CryptoJS namespace.
|
||||||
|
*/
|
||||||
|
var C = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Library namespace.
|
||||||
|
*/
|
||||||
|
var C_lib = C.lib = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base object for prototypal inheritance.
|
||||||
|
*/
|
||||||
|
var Base = C_lib.Base = (function () {
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
/**
|
||||||
|
* Creates a new object that inherits from this object.
|
||||||
|
*
|
||||||
|
* @param {Object} overrides Properties to copy into the new object.
|
||||||
|
*
|
||||||
|
* @return {Object} The new object.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var MyType = CryptoJS.lib.Base.extend({
|
||||||
|
* field: 'value',
|
||||||
|
*
|
||||||
|
* method: function () {
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
extend: function (overrides) {
|
||||||
|
// Spawn
|
||||||
|
var subtype = create(this);
|
||||||
|
|
||||||
|
// Augment
|
||||||
|
if (overrides) {
|
||||||
|
subtype.mixIn(overrides);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create default initializer
|
||||||
|
if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
|
||||||
|
subtype.init = function () {
|
||||||
|
subtype.$super.init.apply(this, arguments);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initializer's prototype is the subtype object
|
||||||
|
subtype.init.prototype = subtype;
|
||||||
|
|
||||||
|
// Reference supertype
|
||||||
|
subtype.$super = this;
|
||||||
|
|
||||||
|
return subtype;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends this object and runs the init method.
|
||||||
|
* Arguments to create() will be passed to init().
|
||||||
|
*
|
||||||
|
* @return {Object} The new object.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var instance = MyType.create();
|
||||||
|
*/
|
||||||
|
create: function () {
|
||||||
|
var instance = this.extend();
|
||||||
|
instance.init.apply(instance, arguments);
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a newly created object.
|
||||||
|
* Override this method to add some logic when your objects are created.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var MyType = CryptoJS.lib.Base.extend({
|
||||||
|
* init: function () {
|
||||||
|
* // ...
|
||||||
|
* }
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
init: function () {
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copies properties into this object.
|
||||||
|
*
|
||||||
|
* @param {Object} properties The properties to mix in.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* MyType.mixIn({
|
||||||
|
* field: 'value'
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
mixIn: function (properties) {
|
||||||
|
for (var propertyName in properties) {
|
||||||
|
if (properties.hasOwnProperty(propertyName)) {
|
||||||
|
this[propertyName] = properties[propertyName];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE won't copy toString using the loop above
|
||||||
|
if (properties.hasOwnProperty('toString')) {
|
||||||
|
this.toString = properties.toString;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a copy of this object.
|
||||||
|
*
|
||||||
|
* @return {Object} The clone.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var clone = instance.clone();
|
||||||
|
*/
|
||||||
|
clone: function () {
|
||||||
|
return this.init.prototype.extend(this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array of 32-bit words.
|
||||||
|
*
|
||||||
|
* @property {Array} words The array of 32-bit words.
|
||||||
|
* @property {number} sigBytes The number of significant bytes in this word array.
|
||||||
|
*/
|
||||||
|
var WordArray = C_lib.WordArray = Base.extend({
|
||||||
|
/**
|
||||||
|
* Initializes a newly created word array.
|
||||||
|
*
|
||||||
|
* @param {Array} words (Optional) An array of 32-bit words.
|
||||||
|
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.lib.WordArray.create();
|
||||||
|
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
|
||||||
|
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
|
||||||
|
*/
|
||||||
|
init: function (words, sigBytes) {
|
||||||
|
words = this.words = words || [];
|
||||||
|
|
||||||
|
if (sigBytes != undefined) {
|
||||||
|
this.sigBytes = sigBytes;
|
||||||
|
} else {
|
||||||
|
this.sigBytes = words.length * 4;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts this word array to a string.
|
||||||
|
*
|
||||||
|
* @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
|
||||||
|
*
|
||||||
|
* @return {string} The stringified word array.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var string = wordArray + '';
|
||||||
|
* var string = wordArray.toString();
|
||||||
|
* var string = wordArray.toString(CryptoJS.enc.Utf8);
|
||||||
|
*/
|
||||||
|
toString: function (encoder) {
|
||||||
|
return (encoder || Hex).stringify(this);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Concatenates a word array to this word array.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array to append.
|
||||||
|
*
|
||||||
|
* @return {WordArray} This word array.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* wordArray1.concat(wordArray2);
|
||||||
|
*/
|
||||||
|
concat: function (wordArray) {
|
||||||
|
// Shortcuts
|
||||||
|
var thisWords = this.words;
|
||||||
|
var thatWords = wordArray.words;
|
||||||
|
var thisSigBytes = this.sigBytes;
|
||||||
|
var thatSigBytes = wordArray.sigBytes;
|
||||||
|
|
||||||
|
// Clamp excess bits
|
||||||
|
this.clamp();
|
||||||
|
|
||||||
|
// Concat
|
||||||
|
if (thisSigBytes % 4) {
|
||||||
|
// Copy one byte at a time
|
||||||
|
for (var i = 0; i < thatSigBytes; i++) {
|
||||||
|
var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||||
|
thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Copy one word at a time
|
||||||
|
for (var j = 0; j < thatSigBytes; j += 4) {
|
||||||
|
thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.sigBytes += thatSigBytes;
|
||||||
|
|
||||||
|
// Chainable
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes insignificant bits.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* wordArray.clamp();
|
||||||
|
*/
|
||||||
|
clamp: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var words = this.words;
|
||||||
|
var sigBytes = this.sigBytes;
|
||||||
|
|
||||||
|
// Clamp
|
||||||
|
words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
|
||||||
|
words.length = Math.ceil(sigBytes / 4);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a copy of this word array.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The clone.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var clone = wordArray.clone();
|
||||||
|
*/
|
||||||
|
clone: function () {
|
||||||
|
var clone = Base.clone.call(this);
|
||||||
|
clone.words = this.words.slice(0);
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a word array filled with random bytes.
|
||||||
|
*
|
||||||
|
* @param {number} nBytes The number of random bytes to generate.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The random word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.lib.WordArray.random(16);
|
||||||
|
*/
|
||||||
|
random: function (nBytes) {
|
||||||
|
var words = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < nBytes; i += 4) {
|
||||||
|
words.push(cryptoSecureRandomInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new WordArray.init(words, nBytes);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encoder namespace.
|
||||||
|
*/
|
||||||
|
var C_enc = C.enc = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hex encoding strategy.
|
||||||
|
*/
|
||||||
|
var Hex = C_enc.Hex = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a hex string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @return {string} The hex string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hexString = CryptoJS.enc.Hex.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray) {
|
||||||
|
// Shortcuts
|
||||||
|
var words = wordArray.words;
|
||||||
|
var sigBytes = wordArray.sigBytes;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var hexChars = [];
|
||||||
|
for (var i = 0; i < sigBytes; i++) {
|
||||||
|
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||||
|
hexChars.push((bite >>> 4).toString(16));
|
||||||
|
hexChars.push((bite & 0x0f).toString(16));
|
||||||
|
}
|
||||||
|
|
||||||
|
return hexChars.join('');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a hex string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} hexStr The hex string.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Hex.parse(hexString);
|
||||||
|
*/
|
||||||
|
parse: function (hexStr) {
|
||||||
|
// Shortcut
|
||||||
|
var hexStrLength = hexStr.length;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var words = [];
|
||||||
|
for (var i = 0; i < hexStrLength; i += 2) {
|
||||||
|
words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new WordArray.init(words, hexStrLength / 2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Latin1 encoding strategy.
|
||||||
|
*/
|
||||||
|
var Latin1 = C_enc.Latin1 = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a Latin1 string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @return {string} The Latin1 string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray) {
|
||||||
|
// Shortcuts
|
||||||
|
var words = wordArray.words;
|
||||||
|
var sigBytes = wordArray.sigBytes;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var latin1Chars = [];
|
||||||
|
for (var i = 0; i < sigBytes; i++) {
|
||||||
|
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||||
|
latin1Chars.push(String.fromCharCode(bite));
|
||||||
|
}
|
||||||
|
|
||||||
|
return latin1Chars.join('');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Latin1 string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} latin1Str The Latin1 string.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
|
||||||
|
*/
|
||||||
|
parse: function (latin1Str) {
|
||||||
|
// Shortcut
|
||||||
|
var latin1StrLength = latin1Str.length;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var words = [];
|
||||||
|
for (var i = 0; i < latin1StrLength; i++) {
|
||||||
|
words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new WordArray.init(words, latin1StrLength);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UTF-8 encoding strategy.
|
||||||
|
*/
|
||||||
|
var Utf8 = C_enc.Utf8 = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a UTF-8 string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @return {string} The UTF-8 string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray) {
|
||||||
|
try {
|
||||||
|
return decodeURIComponent(escape(Latin1.stringify(wordArray)));
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error('Malformed UTF-8 data');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a UTF-8 string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} utf8Str The UTF-8 string.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
|
||||||
|
*/
|
||||||
|
parse: function (utf8Str) {
|
||||||
|
return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract buffered block algorithm template.
|
||||||
|
*
|
||||||
|
* The property blockSize must be implemented in a concrete subtype.
|
||||||
|
*
|
||||||
|
* @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
|
||||||
|
*/
|
||||||
|
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
|
||||||
|
/**
|
||||||
|
* Resets this block algorithm's data buffer to its initial state.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* bufferedBlockAlgorithm.reset();
|
||||||
|
*/
|
||||||
|
reset: function () {
|
||||||
|
// Initial values
|
||||||
|
this._data = new WordArray.init();
|
||||||
|
this._nDataBytes = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds new data to this block algorithm's buffer.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* bufferedBlockAlgorithm._append('data');
|
||||||
|
* bufferedBlockAlgorithm._append(wordArray);
|
||||||
|
*/
|
||||||
|
_append: function (data) {
|
||||||
|
// Convert string to WordArray, else assume WordArray already
|
||||||
|
if (typeof data == 'string') {
|
||||||
|
data = Utf8.parse(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append
|
||||||
|
this._data.concat(data);
|
||||||
|
this._nDataBytes += data.sigBytes;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes available data blocks.
|
||||||
|
*
|
||||||
|
* This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
|
||||||
|
*
|
||||||
|
* @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The processed data.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var processedData = bufferedBlockAlgorithm._process();
|
||||||
|
* var processedData = bufferedBlockAlgorithm._process(!!'flush');
|
||||||
|
*/
|
||||||
|
_process: function (doFlush) {
|
||||||
|
var processedWords;
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
var dataSigBytes = data.sigBytes;
|
||||||
|
var blockSize = this.blockSize;
|
||||||
|
var blockSizeBytes = blockSize * 4;
|
||||||
|
|
||||||
|
// Count blocks ready
|
||||||
|
var nBlocksReady = dataSigBytes / blockSizeBytes;
|
||||||
|
if (doFlush) {
|
||||||
|
// Round up to include partial blocks
|
||||||
|
nBlocksReady = Math.ceil(nBlocksReady);
|
||||||
|
} else {
|
||||||
|
// Round down to include only full blocks,
|
||||||
|
// less the number of blocks that must remain in the buffer
|
||||||
|
nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Count words ready
|
||||||
|
var nWordsReady = nBlocksReady * blockSize;
|
||||||
|
|
||||||
|
// Count bytes ready
|
||||||
|
var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
|
||||||
|
|
||||||
|
// Process blocks
|
||||||
|
if (nWordsReady) {
|
||||||
|
for (var offset = 0; offset < nWordsReady; offset += blockSize) {
|
||||||
|
// Perform concrete-algorithm logic
|
||||||
|
this._doProcessBlock(dataWords, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove processed words
|
||||||
|
processedWords = dataWords.splice(0, nWordsReady);
|
||||||
|
data.sigBytes -= nBytesReady;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return processed words
|
||||||
|
return new WordArray.init(processedWords, nBytesReady);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a copy of this object.
|
||||||
|
*
|
||||||
|
* @return {Object} The clone.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var clone = bufferedBlockAlgorithm.clone();
|
||||||
|
*/
|
||||||
|
clone: function () {
|
||||||
|
var clone = Base.clone.call(this);
|
||||||
|
clone._data = this._data.clone();
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
},
|
||||||
|
|
||||||
|
_minBufferSize: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract hasher template.
|
||||||
|
*
|
||||||
|
* @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
|
||||||
|
*/
|
||||||
|
var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*/
|
||||||
|
cfg: Base.extend(),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a newly created hasher.
|
||||||
|
*
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this hash computation.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hasher = CryptoJS.algo.SHA256.create();
|
||||||
|
*/
|
||||||
|
init: function (cfg) {
|
||||||
|
// Apply config defaults
|
||||||
|
this.cfg = this.cfg.extend(cfg);
|
||||||
|
|
||||||
|
// Set initial values
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets this hasher to its initial state.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* hasher.reset();
|
||||||
|
*/
|
||||||
|
reset: function () {
|
||||||
|
// Reset data buffer
|
||||||
|
BufferedBlockAlgorithm.reset.call(this);
|
||||||
|
|
||||||
|
// Perform concrete-hasher logic
|
||||||
|
this._doReset();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates this hasher with a message.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} messageUpdate The message to append.
|
||||||
|
*
|
||||||
|
* @return {Hasher} This hasher.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* hasher.update('message');
|
||||||
|
* hasher.update(wordArray);
|
||||||
|
*/
|
||||||
|
update: function (messageUpdate) {
|
||||||
|
// Append
|
||||||
|
this._append(messageUpdate);
|
||||||
|
|
||||||
|
// Update the hash
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Chainable
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalizes the hash computation.
|
||||||
|
* Note that the finalize operation is effectively a destructive, read-once operation.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} messageUpdate (Optional) A final message update.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = hasher.finalize();
|
||||||
|
* var hash = hasher.finalize('message');
|
||||||
|
* var hash = hasher.finalize(wordArray);
|
||||||
|
*/
|
||||||
|
finalize: function (messageUpdate) {
|
||||||
|
// Final message update
|
||||||
|
if (messageUpdate) {
|
||||||
|
this._append(messageUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform concrete-hasher logic
|
||||||
|
var hash = this._doFinalize();
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
},
|
||||||
|
|
||||||
|
blockSize: 512/32,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a shortcut function to a hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {Hasher} hasher The hasher to create a helper for.
|
||||||
|
*
|
||||||
|
* @return {Function} The shortcut function.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
|
||||||
|
*/
|
||||||
|
_createHelper: function (hasher) {
|
||||||
|
return function (message, cfg) {
|
||||||
|
return new hasher.init(cfg).finalize(message);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {Hasher} hasher The hasher to use in this HMAC helper.
|
||||||
|
*
|
||||||
|
* @return {Function} The shortcut function.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
|
||||||
|
*/
|
||||||
|
_createHmacHelper: function (hasher) {
|
||||||
|
return function (message, key) {
|
||||||
|
return new C_algo.HMAC.init(hasher, key).finalize(message);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Algorithm namespace.
|
||||||
|
*/
|
||||||
|
var C_algo = C.algo = {};
|
||||||
|
|
||||||
|
return C;
|
||||||
|
}(Math));
|
||||||
|
|
||||||
|
|
||||||
|
(function (undefined) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var Base = C_lib.Base;
|
||||||
|
var X32WordArray = C_lib.WordArray;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* x64 namespace.
|
||||||
|
*/
|
||||||
|
var C_x64 = C.x64 = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A 64-bit word.
|
||||||
|
*/
|
||||||
|
var X64Word = C_x64.Word = Base.extend({
|
||||||
|
/**
|
||||||
|
* Initializes a newly created 64-bit word.
|
||||||
|
*
|
||||||
|
* @param {number} high The high 32 bits.
|
||||||
|
* @param {number} low The low 32 bits.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
|
||||||
|
*/
|
||||||
|
init: function (high, low) {
|
||||||
|
this.high = high;
|
||||||
|
this.low = low;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bitwise NOTs this word.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after negating.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var negated = x64Word.not();
|
||||||
|
*/
|
||||||
|
// not: function () {
|
||||||
|
// var high = ~this.high;
|
||||||
|
// var low = ~this.low;
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bitwise ANDs this word with the passed word.
|
||||||
|
*
|
||||||
|
* @param {X64Word} word The x64-Word to AND with this word.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after ANDing.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var anded = x64Word.and(anotherX64Word);
|
||||||
|
*/
|
||||||
|
// and: function (word) {
|
||||||
|
// var high = this.high & word.high;
|
||||||
|
// var low = this.low & word.low;
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bitwise ORs this word with the passed word.
|
||||||
|
*
|
||||||
|
* @param {X64Word} word The x64-Word to OR with this word.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after ORing.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ored = x64Word.or(anotherX64Word);
|
||||||
|
*/
|
||||||
|
// or: function (word) {
|
||||||
|
// var high = this.high | word.high;
|
||||||
|
// var low = this.low | word.low;
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bitwise XORs this word with the passed word.
|
||||||
|
*
|
||||||
|
* @param {X64Word} word The x64-Word to XOR with this word.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after XORing.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var xored = x64Word.xor(anotherX64Word);
|
||||||
|
*/
|
||||||
|
// xor: function (word) {
|
||||||
|
// var high = this.high ^ word.high;
|
||||||
|
// var low = this.low ^ word.low;
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shifts this word n bits to the left.
|
||||||
|
*
|
||||||
|
* @param {number} n The number of bits to shift.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after shifting.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var shifted = x64Word.shiftL(25);
|
||||||
|
*/
|
||||||
|
// shiftL: function (n) {
|
||||||
|
// if (n < 32) {
|
||||||
|
// var high = (this.high << n) | (this.low >>> (32 - n));
|
||||||
|
// var low = this.low << n;
|
||||||
|
// } else {
|
||||||
|
// var high = this.low << (n - 32);
|
||||||
|
// var low = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shifts this word n bits to the right.
|
||||||
|
*
|
||||||
|
* @param {number} n The number of bits to shift.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after shifting.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var shifted = x64Word.shiftR(7);
|
||||||
|
*/
|
||||||
|
// shiftR: function (n) {
|
||||||
|
// if (n < 32) {
|
||||||
|
// var low = (this.low >>> n) | (this.high << (32 - n));
|
||||||
|
// var high = this.high >>> n;
|
||||||
|
// } else {
|
||||||
|
// var low = this.high >>> (n - 32);
|
||||||
|
// var high = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotates this word n bits to the left.
|
||||||
|
*
|
||||||
|
* @param {number} n The number of bits to rotate.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after rotating.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var rotated = x64Word.rotL(25);
|
||||||
|
*/
|
||||||
|
// rotL: function (n) {
|
||||||
|
// return this.shiftL(n).or(this.shiftR(64 - n));
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rotates this word n bits to the right.
|
||||||
|
*
|
||||||
|
* @param {number} n The number of bits to rotate.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after rotating.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var rotated = x64Word.rotR(7);
|
||||||
|
*/
|
||||||
|
// rotR: function (n) {
|
||||||
|
// return this.shiftR(n).or(this.shiftL(64 - n));
|
||||||
|
// },
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds this word with the passed word.
|
||||||
|
*
|
||||||
|
* @param {X64Word} word The x64-Word to add with this word.
|
||||||
|
*
|
||||||
|
* @return {X64Word} A new x64-Word object after adding.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var added = x64Word.add(anotherX64Word);
|
||||||
|
*/
|
||||||
|
// add: function (word) {
|
||||||
|
// var low = (this.low + word.low) | 0;
|
||||||
|
// var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
|
||||||
|
// var high = (this.high + word.high + carry) | 0;
|
||||||
|
|
||||||
|
// return X64Word.create(high, low);
|
||||||
|
// }
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An array of 64-bit words.
|
||||||
|
*
|
||||||
|
* @property {Array} words The array of CryptoJS.x64.Word objects.
|
||||||
|
* @property {number} sigBytes The number of significant bytes in this word array.
|
||||||
|
*/
|
||||||
|
var X64WordArray = C_x64.WordArray = Base.extend({
|
||||||
|
/**
|
||||||
|
* Initializes a newly created word array.
|
||||||
|
*
|
||||||
|
* @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
|
||||||
|
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.x64.WordArray.create();
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.x64.WordArray.create([
|
||||||
|
* CryptoJS.x64.Word.create(0x00010203, 0x04050607),
|
||||||
|
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
|
||||||
|
* ]);
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.x64.WordArray.create([
|
||||||
|
* CryptoJS.x64.Word.create(0x00010203, 0x04050607),
|
||||||
|
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
|
||||||
|
* ], 10);
|
||||||
|
*/
|
||||||
|
init: function (words, sigBytes) {
|
||||||
|
words = this.words = words || [];
|
||||||
|
|
||||||
|
if (sigBytes != undefined) {
|
||||||
|
this.sigBytes = sigBytes;
|
||||||
|
} else {
|
||||||
|
this.sigBytes = words.length * 8;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts this 64-bit word array to a 32-bit word array.
|
||||||
|
*
|
||||||
|
* @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var x32WordArray = x64WordArray.toX32();
|
||||||
|
*/
|
||||||
|
toX32: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var x64Words = this.words;
|
||||||
|
var x64WordsLength = x64Words.length;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var x32Words = [];
|
||||||
|
for (var i = 0; i < x64WordsLength; i++) {
|
||||||
|
var x64Word = x64Words[i];
|
||||||
|
x32Words.push(x64Word.high);
|
||||||
|
x32Words.push(x64Word.low);
|
||||||
|
}
|
||||||
|
|
||||||
|
return X32WordArray.create(x32Words, this.sigBytes);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a copy of this word array.
|
||||||
|
*
|
||||||
|
* @return {X64WordArray} The clone.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var clone = x64WordArray.clone();
|
||||||
|
*/
|
||||||
|
clone: function () {
|
||||||
|
var clone = Base.clone.call(this);
|
||||||
|
|
||||||
|
// Clone "words" array
|
||||||
|
var words = clone.words = this.words.slice(0);
|
||||||
|
|
||||||
|
// Clone each X64Word object
|
||||||
|
var wordsLength = words.length;
|
||||||
|
for (var i = 0; i < wordsLength; i++) {
|
||||||
|
words[i] = words[i].clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Check if typed arrays are supported
|
||||||
|
if (typeof ArrayBuffer != 'function') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
|
||||||
|
// Reference original init
|
||||||
|
var superInit = WordArray.init;
|
||||||
|
|
||||||
|
// Augment WordArray.init to handle typed arrays
|
||||||
|
var subInit = WordArray.init = function (typedArray) {
|
||||||
|
// Convert buffers to uint8
|
||||||
|
if (typedArray instanceof ArrayBuffer) {
|
||||||
|
typedArray = new Uint8Array(typedArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert other array views to uint8
|
||||||
|
if (
|
||||||
|
typedArray instanceof Int8Array ||
|
||||||
|
(typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) ||
|
||||||
|
typedArray instanceof Int16Array ||
|
||||||
|
typedArray instanceof Uint16Array ||
|
||||||
|
typedArray instanceof Int32Array ||
|
||||||
|
typedArray instanceof Uint32Array ||
|
||||||
|
typedArray instanceof Float32Array ||
|
||||||
|
typedArray instanceof Float64Array
|
||||||
|
) {
|
||||||
|
typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle Uint8Array
|
||||||
|
if (typedArray instanceof Uint8Array) {
|
||||||
|
// Shortcut
|
||||||
|
var typedArrayByteLength = typedArray.byteLength;
|
||||||
|
|
||||||
|
// Extract bytes
|
||||||
|
var words = [];
|
||||||
|
for (var i = 0; i < typedArrayByteLength; i++) {
|
||||||
|
words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize this word array
|
||||||
|
superInit.call(this, words, typedArrayByteLength);
|
||||||
|
} else {
|
||||||
|
// Else call normal init
|
||||||
|
superInit.apply(this, arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
subInit.prototype = WordArray;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var C_enc = C.enc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UTF-16 BE encoding strategy.
|
||||||
|
*/
|
||||||
|
var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a UTF-16 BE string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @return {string} The UTF-16 BE string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray) {
|
||||||
|
// Shortcuts
|
||||||
|
var words = wordArray.words;
|
||||||
|
var sigBytes = wordArray.sigBytes;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var utf16Chars = [];
|
||||||
|
for (var i = 0; i < sigBytes; i += 2) {
|
||||||
|
var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
|
||||||
|
utf16Chars.push(String.fromCharCode(codePoint));
|
||||||
|
}
|
||||||
|
|
||||||
|
return utf16Chars.join('');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a UTF-16 BE string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} utf16Str The UTF-16 BE string.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
|
||||||
|
*/
|
||||||
|
parse: function (utf16Str) {
|
||||||
|
// Shortcut
|
||||||
|
var utf16StrLength = utf16Str.length;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var words = [];
|
||||||
|
for (var i = 0; i < utf16StrLength; i++) {
|
||||||
|
words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
return WordArray.create(words, utf16StrLength * 2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UTF-16 LE encoding strategy.
|
||||||
|
*/
|
||||||
|
C_enc.Utf16LE = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a UTF-16 LE string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @return {string} The UTF-16 LE string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray) {
|
||||||
|
// Shortcuts
|
||||||
|
var words = wordArray.words;
|
||||||
|
var sigBytes = wordArray.sigBytes;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var utf16Chars = [];
|
||||||
|
for (var i = 0; i < sigBytes; i += 2) {
|
||||||
|
var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
|
||||||
|
utf16Chars.push(String.fromCharCode(codePoint));
|
||||||
|
}
|
||||||
|
|
||||||
|
return utf16Chars.join('');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a UTF-16 LE string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} utf16Str The UTF-16 LE string.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
|
||||||
|
*/
|
||||||
|
parse: function (utf16Str) {
|
||||||
|
// Shortcut
|
||||||
|
var utf16StrLength = utf16Str.length;
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var words = [];
|
||||||
|
for (var i = 0; i < utf16StrLength; i++) {
|
||||||
|
words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
return WordArray.create(words, utf16StrLength * 2);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function swapEndian(word) {
|
||||||
|
return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var C_enc = C.enc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base64 encoding strategy.
|
||||||
|
*/
|
||||||
|
var Base64 = C_enc.Base64 = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a Base64 string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @return {string} The Base64 string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var base64String = CryptoJS.enc.Base64.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray) {
|
||||||
|
// Shortcuts
|
||||||
|
var words = wordArray.words;
|
||||||
|
var sigBytes = wordArray.sigBytes;
|
||||||
|
var map = this._map;
|
||||||
|
|
||||||
|
// Clamp excess bits
|
||||||
|
wordArray.clamp();
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var base64Chars = [];
|
||||||
|
for (var i = 0; i < sigBytes; i += 3) {
|
||||||
|
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||||
|
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
|
||||||
|
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
|
||||||
|
|
||||||
|
var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
|
||||||
|
|
||||||
|
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
|
||||||
|
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
var paddingChar = map.charAt(64);
|
||||||
|
if (paddingChar) {
|
||||||
|
while (base64Chars.length % 4) {
|
||||||
|
base64Chars.push(paddingChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return base64Chars.join('');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Base64 string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} base64Str The Base64 string.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Base64.parse(base64String);
|
||||||
|
*/
|
||||||
|
parse: function (base64Str) {
|
||||||
|
// Shortcuts
|
||||||
|
var base64StrLength = base64Str.length;
|
||||||
|
var map = this._map;
|
||||||
|
var reverseMap = this._reverseMap;
|
||||||
|
|
||||||
|
if (!reverseMap) {
|
||||||
|
reverseMap = this._reverseMap = [];
|
||||||
|
for (var j = 0; j < map.length; j++) {
|
||||||
|
reverseMap[map.charCodeAt(j)] = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore padding
|
||||||
|
var paddingChar = map.charAt(64);
|
||||||
|
if (paddingChar) {
|
||||||
|
var paddingIndex = base64Str.indexOf(paddingChar);
|
||||||
|
if (paddingIndex !== -1) {
|
||||||
|
base64StrLength = paddingIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
return parseLoop(base64Str, base64StrLength, reverseMap);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
|
||||||
|
};
|
||||||
|
|
||||||
|
function parseLoop(base64Str, base64StrLength, reverseMap) {
|
||||||
|
var words = [];
|
||||||
|
var nBytes = 0;
|
||||||
|
for (var i = 0; i < base64StrLength; i++) {
|
||||||
|
if (i % 4) {
|
||||||
|
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
|
||||||
|
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
|
||||||
|
var bitsCombined = bits1 | bits2;
|
||||||
|
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
|
||||||
|
nBytes++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return WordArray.create(words, nBytes);
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var C_enc = C.enc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base64url encoding strategy.
|
||||||
|
*/
|
||||||
|
var Base64url = C_enc.Base64url = {
|
||||||
|
/**
|
||||||
|
* Converts a word array to a Base64url string.
|
||||||
|
*
|
||||||
|
* @param {WordArray} wordArray The word array.
|
||||||
|
*
|
||||||
|
* @param {boolean} urlSafe Whether to use url safe
|
||||||
|
*
|
||||||
|
* @return {string} The Base64url string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var base64String = CryptoJS.enc.Base64url.stringify(wordArray);
|
||||||
|
*/
|
||||||
|
stringify: function (wordArray, urlSafe=true) {
|
||||||
|
// Shortcuts
|
||||||
|
var words = wordArray.words;
|
||||||
|
var sigBytes = wordArray.sigBytes;
|
||||||
|
var map = urlSafe ? this._safe_map : this._map;
|
||||||
|
|
||||||
|
// Clamp excess bits
|
||||||
|
wordArray.clamp();
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
var base64Chars = [];
|
||||||
|
for (var i = 0; i < sigBytes; i += 3) {
|
||||||
|
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
|
||||||
|
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
|
||||||
|
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
|
||||||
|
|
||||||
|
var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
|
||||||
|
|
||||||
|
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
|
||||||
|
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
var paddingChar = map.charAt(64);
|
||||||
|
if (paddingChar) {
|
||||||
|
while (base64Chars.length % 4) {
|
||||||
|
base64Chars.push(paddingChar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return base64Chars.join('');
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a Base64url string to a word array.
|
||||||
|
*
|
||||||
|
* @param {string} base64Str The Base64url string.
|
||||||
|
*
|
||||||
|
* @param {boolean} urlSafe Whether to use url safe
|
||||||
|
*
|
||||||
|
* @return {WordArray} The word array.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var wordArray = CryptoJS.enc.Base64url.parse(base64String);
|
||||||
|
*/
|
||||||
|
parse: function (base64Str, urlSafe=true) {
|
||||||
|
// Shortcuts
|
||||||
|
var base64StrLength = base64Str.length;
|
||||||
|
var map = urlSafe ? this._safe_map : this._map;
|
||||||
|
var reverseMap = this._reverseMap;
|
||||||
|
|
||||||
|
if (!reverseMap) {
|
||||||
|
reverseMap = this._reverseMap = [];
|
||||||
|
for (var j = 0; j < map.length; j++) {
|
||||||
|
reverseMap[map.charCodeAt(j)] = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore padding
|
||||||
|
var paddingChar = map.charAt(64);
|
||||||
|
if (paddingChar) {
|
||||||
|
var paddingIndex = base64Str.indexOf(paddingChar);
|
||||||
|
if (paddingIndex !== -1) {
|
||||||
|
base64StrLength = paddingIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert
|
||||||
|
return parseLoop(base64Str, base64StrLength, reverseMap);
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
|
||||||
|
_safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',
|
||||||
|
};
|
||||||
|
|
||||||
|
function parseLoop(base64Str, base64StrLength, reverseMap) {
|
||||||
|
var words = [];
|
||||||
|
var nBytes = 0;
|
||||||
|
for (var i = 0; i < base64StrLength; i++) {
|
||||||
|
if (i % 4) {
|
||||||
|
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
|
||||||
|
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
|
||||||
|
var bitsCombined = bits1 | bits2;
|
||||||
|
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
|
||||||
|
nBytes++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return WordArray.create(words, nBytes);
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
(function (Math) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var Hasher = C_lib.Hasher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Constants table
|
||||||
|
var T = [];
|
||||||
|
|
||||||
|
// Compute constants
|
||||||
|
(function () {
|
||||||
|
for (var i = 0; i < 64; i++) {
|
||||||
|
T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MD5 hash algorithm.
|
||||||
|
*/
|
||||||
|
var MD5 = C_algo.MD5 = Hasher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = new WordArray.init([
|
||||||
|
0x67452301, 0xefcdab89,
|
||||||
|
0x98badcfe, 0x10325476
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Swap endian
|
||||||
|
for (var i = 0; i < 16; i++) {
|
||||||
|
// Shortcuts
|
||||||
|
var offset_i = offset + i;
|
||||||
|
var M_offset_i = M[offset_i];
|
||||||
|
|
||||||
|
M[offset_i] = (
|
||||||
|
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var H = this._hash.words;
|
||||||
|
|
||||||
|
var M_offset_0 = M[offset + 0];
|
||||||
|
var M_offset_1 = M[offset + 1];
|
||||||
|
var M_offset_2 = M[offset + 2];
|
||||||
|
var M_offset_3 = M[offset + 3];
|
||||||
|
var M_offset_4 = M[offset + 4];
|
||||||
|
var M_offset_5 = M[offset + 5];
|
||||||
|
var M_offset_6 = M[offset + 6];
|
||||||
|
var M_offset_7 = M[offset + 7];
|
||||||
|
var M_offset_8 = M[offset + 8];
|
||||||
|
var M_offset_9 = M[offset + 9];
|
||||||
|
var M_offset_10 = M[offset + 10];
|
||||||
|
var M_offset_11 = M[offset + 11];
|
||||||
|
var M_offset_12 = M[offset + 12];
|
||||||
|
var M_offset_13 = M[offset + 13];
|
||||||
|
var M_offset_14 = M[offset + 14];
|
||||||
|
var M_offset_15 = M[offset + 15];
|
||||||
|
|
||||||
|
// Working varialbes
|
||||||
|
var a = H[0];
|
||||||
|
var b = H[1];
|
||||||
|
var c = H[2];
|
||||||
|
var d = H[3];
|
||||||
|
|
||||||
|
// Computation
|
||||||
|
a = FF(a, b, c, d, M_offset_0, 7, T[0]);
|
||||||
|
d = FF(d, a, b, c, M_offset_1, 12, T[1]);
|
||||||
|
c = FF(c, d, a, b, M_offset_2, 17, T[2]);
|
||||||
|
b = FF(b, c, d, a, M_offset_3, 22, T[3]);
|
||||||
|
a = FF(a, b, c, d, M_offset_4, 7, T[4]);
|
||||||
|
d = FF(d, a, b, c, M_offset_5, 12, T[5]);
|
||||||
|
c = FF(c, d, a, b, M_offset_6, 17, T[6]);
|
||||||
|
b = FF(b, c, d, a, M_offset_7, 22, T[7]);
|
||||||
|
a = FF(a, b, c, d, M_offset_8, 7, T[8]);
|
||||||
|
d = FF(d, a, b, c, M_offset_9, 12, T[9]);
|
||||||
|
c = FF(c, d, a, b, M_offset_10, 17, T[10]);
|
||||||
|
b = FF(b, c, d, a, M_offset_11, 22, T[11]);
|
||||||
|
a = FF(a, b, c, d, M_offset_12, 7, T[12]);
|
||||||
|
d = FF(d, a, b, c, M_offset_13, 12, T[13]);
|
||||||
|
c = FF(c, d, a, b, M_offset_14, 17, T[14]);
|
||||||
|
b = FF(b, c, d, a, M_offset_15, 22, T[15]);
|
||||||
|
|
||||||
|
a = GG(a, b, c, d, M_offset_1, 5, T[16]);
|
||||||
|
d = GG(d, a, b, c, M_offset_6, 9, T[17]);
|
||||||
|
c = GG(c, d, a, b, M_offset_11, 14, T[18]);
|
||||||
|
b = GG(b, c, d, a, M_offset_0, 20, T[19]);
|
||||||
|
a = GG(a, b, c, d, M_offset_5, 5, T[20]);
|
||||||
|
d = GG(d, a, b, c, M_offset_10, 9, T[21]);
|
||||||
|
c = GG(c, d, a, b, M_offset_15, 14, T[22]);
|
||||||
|
b = GG(b, c, d, a, M_offset_4, 20, T[23]);
|
||||||
|
a = GG(a, b, c, d, M_offset_9, 5, T[24]);
|
||||||
|
d = GG(d, a, b, c, M_offset_14, 9, T[25]);
|
||||||
|
c = GG(c, d, a, b, M_offset_3, 14, T[26]);
|
||||||
|
b = GG(b, c, d, a, M_offset_8, 20, T[27]);
|
||||||
|
a = GG(a, b, c, d, M_offset_13, 5, T[28]);
|
||||||
|
d = GG(d, a, b, c, M_offset_2, 9, T[29]);
|
||||||
|
c = GG(c, d, a, b, M_offset_7, 14, T[30]);
|
||||||
|
b = GG(b, c, d, a, M_offset_12, 20, T[31]);
|
||||||
|
|
||||||
|
a = HH(a, b, c, d, M_offset_5, 4, T[32]);
|
||||||
|
d = HH(d, a, b, c, M_offset_8, 11, T[33]);
|
||||||
|
c = HH(c, d, a, b, M_offset_11, 16, T[34]);
|
||||||
|
b = HH(b, c, d, a, M_offset_14, 23, T[35]);
|
||||||
|
a = HH(a, b, c, d, M_offset_1, 4, T[36]);
|
||||||
|
d = HH(d, a, b, c, M_offset_4, 11, T[37]);
|
||||||
|
c = HH(c, d, a, b, M_offset_7, 16, T[38]);
|
||||||
|
b = HH(b, c, d, a, M_offset_10, 23, T[39]);
|
||||||
|
a = HH(a, b, c, d, M_offset_13, 4, T[40]);
|
||||||
|
d = HH(d, a, b, c, M_offset_0, 11, T[41]);
|
||||||
|
c = HH(c, d, a, b, M_offset_3, 16, T[42]);
|
||||||
|
b = HH(b, c, d, a, M_offset_6, 23, T[43]);
|
||||||
|
a = HH(a, b, c, d, M_offset_9, 4, T[44]);
|
||||||
|
d = HH(d, a, b, c, M_offset_12, 11, T[45]);
|
||||||
|
c = HH(c, d, a, b, M_offset_15, 16, T[46]);
|
||||||
|
b = HH(b, c, d, a, M_offset_2, 23, T[47]);
|
||||||
|
|
||||||
|
a = II(a, b, c, d, M_offset_0, 6, T[48]);
|
||||||
|
d = II(d, a, b, c, M_offset_7, 10, T[49]);
|
||||||
|
c = II(c, d, a, b, M_offset_14, 15, T[50]);
|
||||||
|
b = II(b, c, d, a, M_offset_5, 21, T[51]);
|
||||||
|
a = II(a, b, c, d, M_offset_12, 6, T[52]);
|
||||||
|
d = II(d, a, b, c, M_offset_3, 10, T[53]);
|
||||||
|
c = II(c, d, a, b, M_offset_10, 15, T[54]);
|
||||||
|
b = II(b, c, d, a, M_offset_1, 21, T[55]);
|
||||||
|
a = II(a, b, c, d, M_offset_8, 6, T[56]);
|
||||||
|
d = II(d, a, b, c, M_offset_15, 10, T[57]);
|
||||||
|
c = II(c, d, a, b, M_offset_6, 15, T[58]);
|
||||||
|
b = II(b, c, d, a, M_offset_13, 21, T[59]);
|
||||||
|
a = II(a, b, c, d, M_offset_4, 6, T[60]);
|
||||||
|
d = II(d, a, b, c, M_offset_11, 10, T[61]);
|
||||||
|
c = II(c, d, a, b, M_offset_2, 15, T[62]);
|
||||||
|
b = II(b, c, d, a, M_offset_9, 21, T[63]);
|
||||||
|
|
||||||
|
// Intermediate hash value
|
||||||
|
H[0] = (H[0] + a) | 0;
|
||||||
|
H[1] = (H[1] + b) | 0;
|
||||||
|
H[2] = (H[2] + c) | 0;
|
||||||
|
H[3] = (H[3] + d) | 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
|
||||||
|
var nBitsTotal = this._nDataBytes * 8;
|
||||||
|
var nBitsLeft = data.sigBytes * 8;
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||||
|
|
||||||
|
var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
|
||||||
|
var nBitsTotalL = nBitsTotal;
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
|
||||||
|
(((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
|
||||||
|
(((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
|
||||||
|
data.sigBytes = (dataWords.length + 1) * 4;
|
||||||
|
|
||||||
|
// Hash final blocks
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var hash = this._hash;
|
||||||
|
var H = hash.words;
|
||||||
|
|
||||||
|
// Swap endian
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
// Shortcut
|
||||||
|
var H_i = H[i];
|
||||||
|
|
||||||
|
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return final computed hash
|
||||||
|
return hash;
|
||||||
|
},
|
||||||
|
|
||||||
|
clone: function () {
|
||||||
|
var clone = Hasher.clone.call(this);
|
||||||
|
clone._hash = this._hash.clone();
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function FF(a, b, c, d, x, s, t) {
|
||||||
|
var n = a + ((b & c) | (~b & d)) + x + t;
|
||||||
|
return ((n << s) | (n >>> (32 - s))) + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function GG(a, b, c, d, x, s, t) {
|
||||||
|
var n = a + ((b & d) | (c & ~d)) + x + t;
|
||||||
|
return ((n << s) | (n >>> (32 - s))) + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function HH(a, b, c, d, x, s, t) {
|
||||||
|
var n = a + (b ^ c ^ d) + x + t;
|
||||||
|
return ((n << s) | (n >>> (32 - s))) + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function II(a, b, c, d, x, s, t) {
|
||||||
|
var n = a + (c ^ (b | ~d)) + x + t;
|
||||||
|
return ((n << s) | (n >>> (32 - s))) + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.MD5('message');
|
||||||
|
* var hash = CryptoJS.MD5(wordArray);
|
||||||
|
*/
|
||||||
|
C.MD5 = Hasher._createHelper(MD5);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacMD5(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacMD5 = Hasher._createHmacHelper(MD5);
|
||||||
|
}(Math));
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var Hasher = C_lib.Hasher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Reusable object
|
||||||
|
var W = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SHA-1 hash algorithm.
|
||||||
|
*/
|
||||||
|
var SHA1 = C_algo.SHA1 = Hasher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = new WordArray.init([
|
||||||
|
0x67452301, 0xefcdab89,
|
||||||
|
0x98badcfe, 0x10325476,
|
||||||
|
0xc3d2e1f0
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Shortcut
|
||||||
|
var H = this._hash.words;
|
||||||
|
|
||||||
|
// Working variables
|
||||||
|
var a = H[0];
|
||||||
|
var b = H[1];
|
||||||
|
var c = H[2];
|
||||||
|
var d = H[3];
|
||||||
|
var e = H[4];
|
||||||
|
|
||||||
|
// Computation
|
||||||
|
for (var i = 0; i < 80; i++) {
|
||||||
|
if (i < 16) {
|
||||||
|
W[i] = M[offset + i] | 0;
|
||||||
|
} else {
|
||||||
|
var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
|
||||||
|
W[i] = (n << 1) | (n >>> 31);
|
||||||
|
}
|
||||||
|
|
||||||
|
var t = ((a << 5) | (a >>> 27)) + e + W[i];
|
||||||
|
if (i < 20) {
|
||||||
|
t += ((b & c) | (~b & d)) + 0x5a827999;
|
||||||
|
} else if (i < 40) {
|
||||||
|
t += (b ^ c ^ d) + 0x6ed9eba1;
|
||||||
|
} else if (i < 60) {
|
||||||
|
t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
|
||||||
|
} else /* if (i < 80) */ {
|
||||||
|
t += (b ^ c ^ d) - 0x359d3e2a;
|
||||||
|
}
|
||||||
|
|
||||||
|
e = d;
|
||||||
|
d = c;
|
||||||
|
c = (b << 30) | (b >>> 2);
|
||||||
|
b = a;
|
||||||
|
a = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intermediate hash value
|
||||||
|
H[0] = (H[0] + a) | 0;
|
||||||
|
H[1] = (H[1] + b) | 0;
|
||||||
|
H[2] = (H[2] + c) | 0;
|
||||||
|
H[3] = (H[3] + d) | 0;
|
||||||
|
H[4] = (H[4] + e) | 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
|
||||||
|
var nBitsTotal = this._nDataBytes * 8;
|
||||||
|
var nBitsLeft = data.sigBytes * 8;
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
|
||||||
|
data.sigBytes = dataWords.length * 4;
|
||||||
|
|
||||||
|
// Hash final blocks
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Return final computed hash
|
||||||
|
return this._hash;
|
||||||
|
},
|
||||||
|
|
||||||
|
clone: function () {
|
||||||
|
var clone = Hasher.clone.call(this);
|
||||||
|
clone._hash = this._hash.clone();
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.SHA1('message');
|
||||||
|
* var hash = CryptoJS.SHA1(wordArray);
|
||||||
|
*/
|
||||||
|
C.SHA1 = Hasher._createHelper(SHA1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacSHA1(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function (Math) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var Hasher = C_lib.Hasher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Initialization and round constants tables
|
||||||
|
var H = [];
|
||||||
|
var K = [];
|
||||||
|
|
||||||
|
// Compute constants
|
||||||
|
(function () {
|
||||||
|
function isPrime(n) {
|
||||||
|
var sqrtN = Math.sqrt(n);
|
||||||
|
for (var factor = 2; factor <= sqrtN; factor++) {
|
||||||
|
if (!(n % factor)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getFractionalBits(n) {
|
||||||
|
return ((n - (n | 0)) * 0x100000000) | 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var n = 2;
|
||||||
|
var nPrime = 0;
|
||||||
|
while (nPrime < 64) {
|
||||||
|
if (isPrime(n)) {
|
||||||
|
if (nPrime < 8) {
|
||||||
|
H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
|
||||||
|
}
|
||||||
|
K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
|
||||||
|
|
||||||
|
nPrime++;
|
||||||
|
}
|
||||||
|
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Reusable object
|
||||||
|
var W = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SHA-256 hash algorithm.
|
||||||
|
*/
|
||||||
|
var SHA256 = C_algo.SHA256 = Hasher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = new WordArray.init(H.slice(0));
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Shortcut
|
||||||
|
var H = this._hash.words;
|
||||||
|
|
||||||
|
// Working variables
|
||||||
|
var a = H[0];
|
||||||
|
var b = H[1];
|
||||||
|
var c = H[2];
|
||||||
|
var d = H[3];
|
||||||
|
var e = H[4];
|
||||||
|
var f = H[5];
|
||||||
|
var g = H[6];
|
||||||
|
var h = H[7];
|
||||||
|
|
||||||
|
// Computation
|
||||||
|
for (var i = 0; i < 64; i++) {
|
||||||
|
if (i < 16) {
|
||||||
|
W[i] = M[offset + i] | 0;
|
||||||
|
} else {
|
||||||
|
var gamma0x = W[i - 15];
|
||||||
|
var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
|
||||||
|
((gamma0x << 14) | (gamma0x >>> 18)) ^
|
||||||
|
(gamma0x >>> 3);
|
||||||
|
|
||||||
|
var gamma1x = W[i - 2];
|
||||||
|
var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
|
||||||
|
((gamma1x << 13) | (gamma1x >>> 19)) ^
|
||||||
|
(gamma1x >>> 10);
|
||||||
|
|
||||||
|
W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
|
||||||
|
}
|
||||||
|
|
||||||
|
var ch = (e & f) ^ (~e & g);
|
||||||
|
var maj = (a & b) ^ (a & c) ^ (b & c);
|
||||||
|
|
||||||
|
var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
|
||||||
|
var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
|
||||||
|
|
||||||
|
var t1 = h + sigma1 + ch + K[i] + W[i];
|
||||||
|
var t2 = sigma0 + maj;
|
||||||
|
|
||||||
|
h = g;
|
||||||
|
g = f;
|
||||||
|
f = e;
|
||||||
|
e = (d + t1) | 0;
|
||||||
|
d = c;
|
||||||
|
c = b;
|
||||||
|
b = a;
|
||||||
|
a = (t1 + t2) | 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intermediate hash value
|
||||||
|
H[0] = (H[0] + a) | 0;
|
||||||
|
H[1] = (H[1] + b) | 0;
|
||||||
|
H[2] = (H[2] + c) | 0;
|
||||||
|
H[3] = (H[3] + d) | 0;
|
||||||
|
H[4] = (H[4] + e) | 0;
|
||||||
|
H[5] = (H[5] + f) | 0;
|
||||||
|
H[6] = (H[6] + g) | 0;
|
||||||
|
H[7] = (H[7] + h) | 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
|
||||||
|
var nBitsTotal = this._nDataBytes * 8;
|
||||||
|
var nBitsLeft = data.sigBytes * 8;
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
|
||||||
|
data.sigBytes = dataWords.length * 4;
|
||||||
|
|
||||||
|
// Hash final blocks
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Return final computed hash
|
||||||
|
return this._hash;
|
||||||
|
},
|
||||||
|
|
||||||
|
clone: function () {
|
||||||
|
var clone = Hasher.clone.call(this);
|
||||||
|
clone._hash = this._hash.clone();
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.SHA256('message');
|
||||||
|
* var hash = CryptoJS.SHA256(wordArray);
|
||||||
|
*/
|
||||||
|
C.SHA256 = Hasher._createHelper(SHA256);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacSHA256(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
|
||||||
|
}(Math));
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
var SHA256 = C_algo.SHA256;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SHA-224 hash algorithm.
|
||||||
|
*/
|
||||||
|
var SHA224 = C_algo.SHA224 = SHA256.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = new WordArray.init([
|
||||||
|
0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
|
||||||
|
0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
var hash = SHA256._doFinalize.call(this);
|
||||||
|
|
||||||
|
hash.sigBytes -= 4;
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.SHA224('message');
|
||||||
|
* var hash = CryptoJS.SHA224(wordArray);
|
||||||
|
*/
|
||||||
|
C.SHA224 = SHA256._createHelper(SHA224);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacSHA224(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var Hasher = C_lib.Hasher;
|
||||||
|
var C_x64 = C.x64;
|
||||||
|
var X64Word = C_x64.Word;
|
||||||
|
var X64WordArray = C_x64.WordArray;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
function X64Word_create() {
|
||||||
|
return X64Word.create.apply(X64Word, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constants
|
||||||
|
var K = [
|
||||||
|
X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),
|
||||||
|
X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),
|
||||||
|
X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),
|
||||||
|
X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),
|
||||||
|
X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),
|
||||||
|
X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),
|
||||||
|
X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),
|
||||||
|
X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),
|
||||||
|
X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),
|
||||||
|
X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),
|
||||||
|
X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),
|
||||||
|
X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),
|
||||||
|
X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),
|
||||||
|
X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),
|
||||||
|
X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),
|
||||||
|
X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),
|
||||||
|
X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),
|
||||||
|
X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),
|
||||||
|
X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),
|
||||||
|
X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),
|
||||||
|
X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),
|
||||||
|
X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),
|
||||||
|
X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),
|
||||||
|
X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),
|
||||||
|
X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),
|
||||||
|
X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),
|
||||||
|
X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),
|
||||||
|
X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),
|
||||||
|
X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),
|
||||||
|
X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),
|
||||||
|
X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),
|
||||||
|
X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),
|
||||||
|
X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),
|
||||||
|
X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),
|
||||||
|
X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),
|
||||||
|
X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),
|
||||||
|
X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),
|
||||||
|
X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),
|
||||||
|
X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),
|
||||||
|
X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Reusable objects
|
||||||
|
var W = [];
|
||||||
|
(function () {
|
||||||
|
for (var i = 0; i < 80; i++) {
|
||||||
|
W[i] = X64Word_create();
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SHA-512 hash algorithm.
|
||||||
|
*/
|
||||||
|
var SHA512 = C_algo.SHA512 = Hasher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = new X64WordArray.init([
|
||||||
|
new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),
|
||||||
|
new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),
|
||||||
|
new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),
|
||||||
|
new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var H = this._hash.words;
|
||||||
|
|
||||||
|
var H0 = H[0];
|
||||||
|
var H1 = H[1];
|
||||||
|
var H2 = H[2];
|
||||||
|
var H3 = H[3];
|
||||||
|
var H4 = H[4];
|
||||||
|
var H5 = H[5];
|
||||||
|
var H6 = H[6];
|
||||||
|
var H7 = H[7];
|
||||||
|
|
||||||
|
var H0h = H0.high;
|
||||||
|
var H0l = H0.low;
|
||||||
|
var H1h = H1.high;
|
||||||
|
var H1l = H1.low;
|
||||||
|
var H2h = H2.high;
|
||||||
|
var H2l = H2.low;
|
||||||
|
var H3h = H3.high;
|
||||||
|
var H3l = H3.low;
|
||||||
|
var H4h = H4.high;
|
||||||
|
var H4l = H4.low;
|
||||||
|
var H5h = H5.high;
|
||||||
|
var H5l = H5.low;
|
||||||
|
var H6h = H6.high;
|
||||||
|
var H6l = H6.low;
|
||||||
|
var H7h = H7.high;
|
||||||
|
var H7l = H7.low;
|
||||||
|
|
||||||
|
// Working variables
|
||||||
|
var ah = H0h;
|
||||||
|
var al = H0l;
|
||||||
|
var bh = H1h;
|
||||||
|
var bl = H1l;
|
||||||
|
var ch = H2h;
|
||||||
|
var cl = H2l;
|
||||||
|
var dh = H3h;
|
||||||
|
var dl = H3l;
|
||||||
|
var eh = H4h;
|
||||||
|
var el = H4l;
|
||||||
|
var fh = H5h;
|
||||||
|
var fl = H5l;
|
||||||
|
var gh = H6h;
|
||||||
|
var gl = H6l;
|
||||||
|
var hh = H7h;
|
||||||
|
var hl = H7l;
|
||||||
|
|
||||||
|
// Rounds
|
||||||
|
for (var i = 0; i < 80; i++) {
|
||||||
|
var Wil;
|
||||||
|
var Wih;
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var Wi = W[i];
|
||||||
|
|
||||||
|
// Extend message
|
||||||
|
if (i < 16) {
|
||||||
|
Wih = Wi.high = M[offset + i * 2] | 0;
|
||||||
|
Wil = Wi.low = M[offset + i * 2 + 1] | 0;
|
||||||
|
} else {
|
||||||
|
// Gamma0
|
||||||
|
var gamma0x = W[i - 15];
|
||||||
|
var gamma0xh = gamma0x.high;
|
||||||
|
var gamma0xl = gamma0x.low;
|
||||||
|
var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);
|
||||||
|
var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));
|
||||||
|
|
||||||
|
// Gamma1
|
||||||
|
var gamma1x = W[i - 2];
|
||||||
|
var gamma1xh = gamma1x.high;
|
||||||
|
var gamma1xl = gamma1x.low;
|
||||||
|
var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);
|
||||||
|
var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));
|
||||||
|
|
||||||
|
// W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
|
||||||
|
var Wi7 = W[i - 7];
|
||||||
|
var Wi7h = Wi7.high;
|
||||||
|
var Wi7l = Wi7.low;
|
||||||
|
|
||||||
|
var Wi16 = W[i - 16];
|
||||||
|
var Wi16h = Wi16.high;
|
||||||
|
var Wi16l = Wi16.low;
|
||||||
|
|
||||||
|
Wil = gamma0l + Wi7l;
|
||||||
|
Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);
|
||||||
|
Wil = Wil + gamma1l;
|
||||||
|
Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);
|
||||||
|
Wil = Wil + Wi16l;
|
||||||
|
Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);
|
||||||
|
|
||||||
|
Wi.high = Wih;
|
||||||
|
Wi.low = Wil;
|
||||||
|
}
|
||||||
|
|
||||||
|
var chh = (eh & fh) ^ (~eh & gh);
|
||||||
|
var chl = (el & fl) ^ (~el & gl);
|
||||||
|
var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
|
||||||
|
var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
|
||||||
|
|
||||||
|
var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
|
||||||
|
var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
|
||||||
|
var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));
|
||||||
|
var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));
|
||||||
|
|
||||||
|
// t1 = h + sigma1 + ch + K[i] + W[i]
|
||||||
|
var Ki = K[i];
|
||||||
|
var Kih = Ki.high;
|
||||||
|
var Kil = Ki.low;
|
||||||
|
|
||||||
|
var t1l = hl + sigma1l;
|
||||||
|
var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
|
||||||
|
var t1l = t1l + chl;
|
||||||
|
var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
|
||||||
|
var t1l = t1l + Kil;
|
||||||
|
var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);
|
||||||
|
var t1l = t1l + Wil;
|
||||||
|
var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);
|
||||||
|
|
||||||
|
// t2 = sigma0 + maj
|
||||||
|
var t2l = sigma0l + majl;
|
||||||
|
var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
|
||||||
|
|
||||||
|
// Update working variables
|
||||||
|
hh = gh;
|
||||||
|
hl = gl;
|
||||||
|
gh = fh;
|
||||||
|
gl = fl;
|
||||||
|
fh = eh;
|
||||||
|
fl = el;
|
||||||
|
el = (dl + t1l) | 0;
|
||||||
|
eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
|
||||||
|
dh = ch;
|
||||||
|
dl = cl;
|
||||||
|
ch = bh;
|
||||||
|
cl = bl;
|
||||||
|
bh = ah;
|
||||||
|
bl = al;
|
||||||
|
al = (t1l + t2l) | 0;
|
||||||
|
ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Intermediate hash value
|
||||||
|
H0l = H0.low = (H0l + al);
|
||||||
|
H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));
|
||||||
|
H1l = H1.low = (H1l + bl);
|
||||||
|
H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));
|
||||||
|
H2l = H2.low = (H2l + cl);
|
||||||
|
H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));
|
||||||
|
H3l = H3.low = (H3l + dl);
|
||||||
|
H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));
|
||||||
|
H4l = H4.low = (H4l + el);
|
||||||
|
H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));
|
||||||
|
H5l = H5.low = (H5l + fl);
|
||||||
|
H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));
|
||||||
|
H6l = H6.low = (H6l + gl);
|
||||||
|
H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));
|
||||||
|
H7l = H7.low = (H7l + hl);
|
||||||
|
H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
|
||||||
|
var nBitsTotal = this._nDataBytes * 8;
|
||||||
|
var nBitsLeft = data.sigBytes * 8;
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||||
|
dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);
|
||||||
|
dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;
|
||||||
|
data.sigBytes = dataWords.length * 4;
|
||||||
|
|
||||||
|
// Hash final blocks
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Convert hash to 32-bit word array before returning
|
||||||
|
var hash = this._hash.toX32();
|
||||||
|
|
||||||
|
// Return final computed hash
|
||||||
|
return hash;
|
||||||
|
},
|
||||||
|
|
||||||
|
clone: function () {
|
||||||
|
var clone = Hasher.clone.call(this);
|
||||||
|
clone._hash = this._hash.clone();
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
},
|
||||||
|
|
||||||
|
blockSize: 1024/32
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.SHA512('message');
|
||||||
|
* var hash = CryptoJS.SHA512(wordArray);
|
||||||
|
*/
|
||||||
|
C.SHA512 = Hasher._createHelper(SHA512);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacSHA512(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_x64 = C.x64;
|
||||||
|
var X64Word = C_x64.Word;
|
||||||
|
var X64WordArray = C_x64.WordArray;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
var SHA512 = C_algo.SHA512;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SHA-384 hash algorithm.
|
||||||
|
*/
|
||||||
|
var SHA384 = C_algo.SHA384 = SHA512.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = new X64WordArray.init([
|
||||||
|
new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),
|
||||||
|
new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),
|
||||||
|
new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),
|
||||||
|
new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
var hash = SHA512._doFinalize.call(this);
|
||||||
|
|
||||||
|
hash.sigBytes -= 16;
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.SHA384('message');
|
||||||
|
* var hash = CryptoJS.SHA384(wordArray);
|
||||||
|
*/
|
||||||
|
C.SHA384 = SHA512._createHelper(SHA384);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacSHA384(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function (Math) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var Hasher = C_lib.Hasher;
|
||||||
|
var C_x64 = C.x64;
|
||||||
|
var X64Word = C_x64.Word;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Constants tables
|
||||||
|
var RHO_OFFSETS = [];
|
||||||
|
var PI_INDEXES = [];
|
||||||
|
var ROUND_CONSTANTS = [];
|
||||||
|
|
||||||
|
// Compute Constants
|
||||||
|
(function () {
|
||||||
|
// Compute rho offset constants
|
||||||
|
var x = 1, y = 0;
|
||||||
|
for (var t = 0; t < 24; t++) {
|
||||||
|
RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;
|
||||||
|
|
||||||
|
var newX = y % 5;
|
||||||
|
var newY = (2 * x + 3 * y) % 5;
|
||||||
|
x = newX;
|
||||||
|
y = newY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute pi index constants
|
||||||
|
for (var x = 0; x < 5; x++) {
|
||||||
|
for (var y = 0; y < 5; y++) {
|
||||||
|
PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute round constants
|
||||||
|
var LFSR = 0x01;
|
||||||
|
for (var i = 0; i < 24; i++) {
|
||||||
|
var roundConstantMsw = 0;
|
||||||
|
var roundConstantLsw = 0;
|
||||||
|
|
||||||
|
for (var j = 0; j < 7; j++) {
|
||||||
|
if (LFSR & 0x01) {
|
||||||
|
var bitPosition = (1 << j) - 1;
|
||||||
|
if (bitPosition < 32) {
|
||||||
|
roundConstantLsw ^= 1 << bitPosition;
|
||||||
|
} else /* if (bitPosition >= 32) */ {
|
||||||
|
roundConstantMsw ^= 1 << (bitPosition - 32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute next LFSR
|
||||||
|
if (LFSR & 0x80) {
|
||||||
|
// Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
|
||||||
|
LFSR = (LFSR << 1) ^ 0x71;
|
||||||
|
} else {
|
||||||
|
LFSR <<= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Reusable objects for temporary values
|
||||||
|
var T = [];
|
||||||
|
(function () {
|
||||||
|
for (var i = 0; i < 25; i++) {
|
||||||
|
T[i] = X64Word.create();
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SHA-3 hash algorithm.
|
||||||
|
*/
|
||||||
|
var SHA3 = C_algo.SHA3 = Hasher.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {number} outputLength
|
||||||
|
* The desired number of bits in the output hash.
|
||||||
|
* Only values permitted are: 224, 256, 384, 512.
|
||||||
|
* Default: 512
|
||||||
|
*/
|
||||||
|
cfg: Hasher.cfg.extend({
|
||||||
|
outputLength: 512
|
||||||
|
}),
|
||||||
|
|
||||||
|
_doReset: function () {
|
||||||
|
var state = this._state = []
|
||||||
|
for (var i = 0; i < 25; i++) {
|
||||||
|
state[i] = new X64Word.init();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var state = this._state;
|
||||||
|
var nBlockSizeLanes = this.blockSize / 2;
|
||||||
|
|
||||||
|
// Absorb
|
||||||
|
for (var i = 0; i < nBlockSizeLanes; i++) {
|
||||||
|
// Shortcuts
|
||||||
|
var M2i = M[offset + 2 * i];
|
||||||
|
var M2i1 = M[offset + 2 * i + 1];
|
||||||
|
|
||||||
|
// Swap endian
|
||||||
|
M2i = (
|
||||||
|
(((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
M2i1 = (
|
||||||
|
(((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Absorb message into state
|
||||||
|
var lane = state[i];
|
||||||
|
lane.high ^= M2i1;
|
||||||
|
lane.low ^= M2i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rounds
|
||||||
|
for (var round = 0; round < 24; round++) {
|
||||||
|
// Theta
|
||||||
|
for (var x = 0; x < 5; x++) {
|
||||||
|
// Mix column lanes
|
||||||
|
var tMsw = 0, tLsw = 0;
|
||||||
|
for (var y = 0; y < 5; y++) {
|
||||||
|
var lane = state[x + 5 * y];
|
||||||
|
tMsw ^= lane.high;
|
||||||
|
tLsw ^= lane.low;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Temporary values
|
||||||
|
var Tx = T[x];
|
||||||
|
Tx.high = tMsw;
|
||||||
|
Tx.low = tLsw;
|
||||||
|
}
|
||||||
|
for (var x = 0; x < 5; x++) {
|
||||||
|
// Shortcuts
|
||||||
|
var Tx4 = T[(x + 4) % 5];
|
||||||
|
var Tx1 = T[(x + 1) % 5];
|
||||||
|
var Tx1Msw = Tx1.high;
|
||||||
|
var Tx1Lsw = Tx1.low;
|
||||||
|
|
||||||
|
// Mix surrounding columns
|
||||||
|
var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
|
||||||
|
var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
|
||||||
|
for (var y = 0; y < 5; y++) {
|
||||||
|
var lane = state[x + 5 * y];
|
||||||
|
lane.high ^= tMsw;
|
||||||
|
lane.low ^= tLsw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rho Pi
|
||||||
|
for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
|
||||||
|
var tMsw;
|
||||||
|
var tLsw;
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var lane = state[laneIndex];
|
||||||
|
var laneMsw = lane.high;
|
||||||
|
var laneLsw = lane.low;
|
||||||
|
var rhoOffset = RHO_OFFSETS[laneIndex];
|
||||||
|
|
||||||
|
// Rotate lanes
|
||||||
|
if (rhoOffset < 32) {
|
||||||
|
tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
|
||||||
|
tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
|
||||||
|
} else /* if (rhoOffset >= 32) */ {
|
||||||
|
tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
|
||||||
|
tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Transpose lanes
|
||||||
|
var TPiLane = T[PI_INDEXES[laneIndex]];
|
||||||
|
TPiLane.high = tMsw;
|
||||||
|
TPiLane.low = tLsw;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rho pi at x = y = 0
|
||||||
|
var T0 = T[0];
|
||||||
|
var state0 = state[0];
|
||||||
|
T0.high = state0.high;
|
||||||
|
T0.low = state0.low;
|
||||||
|
|
||||||
|
// Chi
|
||||||
|
for (var x = 0; x < 5; x++) {
|
||||||
|
for (var y = 0; y < 5; y++) {
|
||||||
|
// Shortcuts
|
||||||
|
var laneIndex = x + 5 * y;
|
||||||
|
var lane = state[laneIndex];
|
||||||
|
var TLane = T[laneIndex];
|
||||||
|
var Tx1Lane = T[((x + 1) % 5) + 5 * y];
|
||||||
|
var Tx2Lane = T[((x + 2) % 5) + 5 * y];
|
||||||
|
|
||||||
|
// Mix rows
|
||||||
|
lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
|
||||||
|
lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iota
|
||||||
|
var lane = state[0];
|
||||||
|
var roundConstant = ROUND_CONSTANTS[round];
|
||||||
|
lane.high ^= roundConstant.high;
|
||||||
|
lane.low ^= roundConstant.low;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
var nBitsTotal = this._nDataBytes * 8;
|
||||||
|
var nBitsLeft = data.sigBytes * 8;
|
||||||
|
var blockSizeBits = this.blockSize * 32;
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
|
||||||
|
dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
|
||||||
|
data.sigBytes = dataWords.length * 4;
|
||||||
|
|
||||||
|
// Hash final blocks
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var state = this._state;
|
||||||
|
var outputLengthBytes = this.cfg.outputLength / 8;
|
||||||
|
var outputLengthLanes = outputLengthBytes / 8;
|
||||||
|
|
||||||
|
// Squeeze
|
||||||
|
var hashWords = [];
|
||||||
|
for (var i = 0; i < outputLengthLanes; i++) {
|
||||||
|
// Shortcuts
|
||||||
|
var lane = state[i];
|
||||||
|
var laneMsw = lane.high;
|
||||||
|
var laneLsw = lane.low;
|
||||||
|
|
||||||
|
// Swap endian
|
||||||
|
laneMsw = (
|
||||||
|
(((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
laneLsw = (
|
||||||
|
(((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Squeeze state to retrieve hash
|
||||||
|
hashWords.push(laneLsw);
|
||||||
|
hashWords.push(laneMsw);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return final computed hash
|
||||||
|
return new WordArray.init(hashWords, outputLengthBytes);
|
||||||
|
},
|
||||||
|
|
||||||
|
clone: function () {
|
||||||
|
var clone = Hasher.clone.call(this);
|
||||||
|
|
||||||
|
var state = clone._state = this._state.slice(0);
|
||||||
|
for (var i = 0; i < 25; i++) {
|
||||||
|
state[i] = state[i].clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.SHA3('message');
|
||||||
|
* var hash = CryptoJS.SHA3(wordArray);
|
||||||
|
*/
|
||||||
|
C.SHA3 = Hasher._createHelper(SHA3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacSHA3(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
|
||||||
|
}(Math));
|
||||||
|
|
||||||
|
|
||||||
|
/** @preserve
|
||||||
|
(c) 2012 by Cédric Mesnil. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||||
|
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (Math) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var Hasher = C_lib.Hasher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Constants table
|
||||||
|
var _zl = WordArray.create([
|
||||||
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
|
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
|
||||||
|
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
|
||||||
|
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
|
||||||
|
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);
|
||||||
|
var _zr = WordArray.create([
|
||||||
|
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
|
||||||
|
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
|
||||||
|
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
|
||||||
|
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
|
||||||
|
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);
|
||||||
|
var _sl = WordArray.create([
|
||||||
|
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
|
||||||
|
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
|
||||||
|
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
|
||||||
|
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
|
||||||
|
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);
|
||||||
|
var _sr = WordArray.create([
|
||||||
|
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
|
||||||
|
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
|
||||||
|
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
|
||||||
|
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
|
||||||
|
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);
|
||||||
|
|
||||||
|
var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);
|
||||||
|
var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RIPEMD160 hash algorithm.
|
||||||
|
*/
|
||||||
|
var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
|
||||||
|
// Swap endian
|
||||||
|
for (var i = 0; i < 16; i++) {
|
||||||
|
// Shortcuts
|
||||||
|
var offset_i = offset + i;
|
||||||
|
var M_offset_i = M[offset_i];
|
||||||
|
|
||||||
|
// Swap
|
||||||
|
M[offset_i] = (
|
||||||
|
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Shortcut
|
||||||
|
var H = this._hash.words;
|
||||||
|
var hl = _hl.words;
|
||||||
|
var hr = _hr.words;
|
||||||
|
var zl = _zl.words;
|
||||||
|
var zr = _zr.words;
|
||||||
|
var sl = _sl.words;
|
||||||
|
var sr = _sr.words;
|
||||||
|
|
||||||
|
// Working variables
|
||||||
|
var al, bl, cl, dl, el;
|
||||||
|
var ar, br, cr, dr, er;
|
||||||
|
|
||||||
|
ar = al = H[0];
|
||||||
|
br = bl = H[1];
|
||||||
|
cr = cl = H[2];
|
||||||
|
dr = dl = H[3];
|
||||||
|
er = el = H[4];
|
||||||
|
// Computation
|
||||||
|
var t;
|
||||||
|
for (var i = 0; i < 80; i += 1) {
|
||||||
|
t = (al + M[offset+zl[i]])|0;
|
||||||
|
if (i<16){
|
||||||
|
t += f1(bl,cl,dl) + hl[0];
|
||||||
|
} else if (i<32) {
|
||||||
|
t += f2(bl,cl,dl) + hl[1];
|
||||||
|
} else if (i<48) {
|
||||||
|
t += f3(bl,cl,dl) + hl[2];
|
||||||
|
} else if (i<64) {
|
||||||
|
t += f4(bl,cl,dl) + hl[3];
|
||||||
|
} else {// if (i<80) {
|
||||||
|
t += f5(bl,cl,dl) + hl[4];
|
||||||
|
}
|
||||||
|
t = t|0;
|
||||||
|
t = rotl(t,sl[i]);
|
||||||
|
t = (t+el)|0;
|
||||||
|
al = el;
|
||||||
|
el = dl;
|
||||||
|
dl = rotl(cl, 10);
|
||||||
|
cl = bl;
|
||||||
|
bl = t;
|
||||||
|
|
||||||
|
t = (ar + M[offset+zr[i]])|0;
|
||||||
|
if (i<16){
|
||||||
|
t += f5(br,cr,dr) + hr[0];
|
||||||
|
} else if (i<32) {
|
||||||
|
t += f4(br,cr,dr) + hr[1];
|
||||||
|
} else if (i<48) {
|
||||||
|
t += f3(br,cr,dr) + hr[2];
|
||||||
|
} else if (i<64) {
|
||||||
|
t += f2(br,cr,dr) + hr[3];
|
||||||
|
} else {// if (i<80) {
|
||||||
|
t += f1(br,cr,dr) + hr[4];
|
||||||
|
}
|
||||||
|
t = t|0;
|
||||||
|
t = rotl(t,sr[i]) ;
|
||||||
|
t = (t+er)|0;
|
||||||
|
ar = er;
|
||||||
|
er = dr;
|
||||||
|
dr = rotl(cr, 10);
|
||||||
|
cr = br;
|
||||||
|
br = t;
|
||||||
|
}
|
||||||
|
// Intermediate hash value
|
||||||
|
t = (H[1] + cl + dr)|0;
|
||||||
|
H[1] = (H[2] + dl + er)|0;
|
||||||
|
H[2] = (H[3] + el + ar)|0;
|
||||||
|
H[3] = (H[4] + al + br)|0;
|
||||||
|
H[4] = (H[0] + bl + cr)|0;
|
||||||
|
H[0] = t;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var data = this._data;
|
||||||
|
var dataWords = data.words;
|
||||||
|
|
||||||
|
var nBitsTotal = this._nDataBytes * 8;
|
||||||
|
var nBitsLeft = data.sigBytes * 8;
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
|
||||||
|
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
|
||||||
|
(((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
|
||||||
|
);
|
||||||
|
data.sigBytes = (dataWords.length + 1) * 4;
|
||||||
|
|
||||||
|
// Hash final blocks
|
||||||
|
this._process();
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var hash = this._hash;
|
||||||
|
var H = hash.words;
|
||||||
|
|
||||||
|
// Swap endian
|
||||||
|
for (var i = 0; i < 5; i++) {
|
||||||
|
// Shortcut
|
||||||
|
var H_i = H[i];
|
||||||
|
|
||||||
|
// Swap
|
||||||
|
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return final computed hash
|
||||||
|
return hash;
|
||||||
|
},
|
||||||
|
|
||||||
|
clone: function () {
|
||||||
|
var clone = Hasher.clone.call(this);
|
||||||
|
clone._hash = this._hash.clone();
|
||||||
|
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
function f1(x, y, z) {
|
||||||
|
return ((x) ^ (y) ^ (z));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function f2(x, y, z) {
|
||||||
|
return (((x)&(y)) | ((~x)&(z)));
|
||||||
|
}
|
||||||
|
|
||||||
|
function f3(x, y, z) {
|
||||||
|
return (((x) | (~(y))) ^ (z));
|
||||||
|
}
|
||||||
|
|
||||||
|
function f4(x, y, z) {
|
||||||
|
return (((x) & (z)) | ((y)&(~(z))));
|
||||||
|
}
|
||||||
|
|
||||||
|
function f5(x, y, z) {
|
||||||
|
return ((x) ^ ((y) |(~(z))));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function rotl(x,n) {
|
||||||
|
return (x<<n) | (x>>>(32-n));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the hasher's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The hash.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hash = CryptoJS.RIPEMD160('message');
|
||||||
|
* var hash = CryptoJS.RIPEMD160(wordArray);
|
||||||
|
*/
|
||||||
|
C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut function to the HMAC's object interface.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} message The message to hash.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = CryptoJS.HmacRIPEMD160(message, key);
|
||||||
|
*/
|
||||||
|
C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
|
||||||
|
}(Math));
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var Base = C_lib.Base;
|
||||||
|
var C_enc = C.enc;
|
||||||
|
var Utf8 = C_enc.Utf8;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HMAC algorithm.
|
||||||
|
*/
|
||||||
|
var HMAC = C_algo.HMAC = Base.extend({
|
||||||
|
/**
|
||||||
|
* Initializes a newly created HMAC.
|
||||||
|
*
|
||||||
|
* @param {Hasher} hasher The hash algorithm to use.
|
||||||
|
* @param {WordArray|string} key The secret key.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
|
||||||
|
*/
|
||||||
|
init: function (hasher, key) {
|
||||||
|
// Init hasher
|
||||||
|
hasher = this._hasher = new hasher.init();
|
||||||
|
|
||||||
|
// Convert string to WordArray, else assume WordArray already
|
||||||
|
if (typeof key == 'string') {
|
||||||
|
key = Utf8.parse(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var hasherBlockSize = hasher.blockSize;
|
||||||
|
var hasherBlockSizeBytes = hasherBlockSize * 4;
|
||||||
|
|
||||||
|
// Allow arbitrary length keys
|
||||||
|
if (key.sigBytes > hasherBlockSizeBytes) {
|
||||||
|
key = hasher.finalize(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clamp excess bits
|
||||||
|
key.clamp();
|
||||||
|
|
||||||
|
// Clone key for inner and outer pads
|
||||||
|
var oKey = this._oKey = key.clone();
|
||||||
|
var iKey = this._iKey = key.clone();
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var oKeyWords = oKey.words;
|
||||||
|
var iKeyWords = iKey.words;
|
||||||
|
|
||||||
|
// XOR keys with pad constants
|
||||||
|
for (var i = 0; i < hasherBlockSize; i++) {
|
||||||
|
oKeyWords[i] ^= 0x5c5c5c5c;
|
||||||
|
iKeyWords[i] ^= 0x36363636;
|
||||||
|
}
|
||||||
|
oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
|
||||||
|
|
||||||
|
// Set initial values
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets this HMAC to its initial state.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* hmacHasher.reset();
|
||||||
|
*/
|
||||||
|
reset: function () {
|
||||||
|
// Shortcut
|
||||||
|
var hasher = this._hasher;
|
||||||
|
|
||||||
|
// Reset
|
||||||
|
hasher.reset();
|
||||||
|
hasher.update(this._iKey);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates this HMAC with a message.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} messageUpdate The message to append.
|
||||||
|
*
|
||||||
|
* @return {HMAC} This HMAC instance.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* hmacHasher.update('message');
|
||||||
|
* hmacHasher.update(wordArray);
|
||||||
|
*/
|
||||||
|
update: function (messageUpdate) {
|
||||||
|
this._hasher.update(messageUpdate);
|
||||||
|
|
||||||
|
// Chainable
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalizes the HMAC computation.
|
||||||
|
* Note that the finalize operation is effectively a destructive, read-once operation.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} messageUpdate (Optional) A final message update.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The HMAC.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hmac = hmacHasher.finalize();
|
||||||
|
* var hmac = hmacHasher.finalize('message');
|
||||||
|
* var hmac = hmacHasher.finalize(wordArray);
|
||||||
|
*/
|
||||||
|
finalize: function (messageUpdate) {
|
||||||
|
// Shortcut
|
||||||
|
var hasher = this._hasher;
|
||||||
|
|
||||||
|
// Compute HMAC
|
||||||
|
var innerHash = hasher.finalize(messageUpdate);
|
||||||
|
hasher.reset();
|
||||||
|
var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));
|
||||||
|
|
||||||
|
return hmac;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var Base = C_lib.Base;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
var SHA1 = C_algo.SHA1;
|
||||||
|
var HMAC = C_algo.HMAC;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Password-Based Key Derivation Function 2 algorithm.
|
||||||
|
*/
|
||||||
|
var PBKDF2 = C_algo.PBKDF2 = Base.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
|
||||||
|
* @property {Hasher} hasher The hasher to use. Default: SHA1
|
||||||
|
* @property {number} iterations The number of iterations to perform. Default: 1
|
||||||
|
*/
|
||||||
|
cfg: Base.extend({
|
||||||
|
keySize: 128/32,
|
||||||
|
hasher: SHA1,
|
||||||
|
iterations: 1
|
||||||
|
}),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a newly created key derivation function.
|
||||||
|
*
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for the derivation.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var kdf = CryptoJS.algo.PBKDF2.create();
|
||||||
|
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
|
||||||
|
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
|
||||||
|
*/
|
||||||
|
init: function (cfg) {
|
||||||
|
this.cfg = this.cfg.extend(cfg);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the Password-Based Key Derivation Function 2.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} password The password.
|
||||||
|
* @param {WordArray|string} salt A salt.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The derived key.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var key = kdf.compute(password, salt);
|
||||||
|
*/
|
||||||
|
compute: function (password, salt) {
|
||||||
|
// Shortcut
|
||||||
|
var cfg = this.cfg;
|
||||||
|
|
||||||
|
// Init HMAC
|
||||||
|
var hmac = HMAC.create(cfg.hasher, password);
|
||||||
|
|
||||||
|
// Initial values
|
||||||
|
var derivedKey = WordArray.create();
|
||||||
|
var blockIndex = WordArray.create([0x00000001]);
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var derivedKeyWords = derivedKey.words;
|
||||||
|
var blockIndexWords = blockIndex.words;
|
||||||
|
var keySize = cfg.keySize;
|
||||||
|
var iterations = cfg.iterations;
|
||||||
|
|
||||||
|
// Generate key
|
||||||
|
while (derivedKeyWords.length < keySize) {
|
||||||
|
var block = hmac.update(salt).finalize(blockIndex);
|
||||||
|
hmac.reset();
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var blockWords = block.words;
|
||||||
|
var blockWordsLength = blockWords.length;
|
||||||
|
|
||||||
|
// Iterations
|
||||||
|
var intermediate = block;
|
||||||
|
for (var i = 1; i < iterations; i++) {
|
||||||
|
intermediate = hmac.finalize(intermediate);
|
||||||
|
hmac.reset();
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var intermediateWords = intermediate.words;
|
||||||
|
|
||||||
|
// XOR intermediate with block
|
||||||
|
for (var j = 0; j < blockWordsLength; j++) {
|
||||||
|
blockWords[j] ^= intermediateWords[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
derivedKey.concat(block);
|
||||||
|
blockIndexWords[0]++;
|
||||||
|
}
|
||||||
|
derivedKey.sigBytes = keySize * 4;
|
||||||
|
|
||||||
|
return derivedKey;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Computes the Password-Based Key Derivation Function 2.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} password The password.
|
||||||
|
* @param {WordArray|string} salt A salt.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this computation.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The derived key.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var key = CryptoJS.PBKDF2(password, salt);
|
||||||
|
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
|
||||||
|
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
|
||||||
|
*/
|
||||||
|
C.PBKDF2 = function (password, salt, cfg) {
|
||||||
|
return PBKDF2.create(cfg).compute(password, salt);
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var Base = C_lib.Base;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
var MD5 = C_algo.MD5;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This key derivation function is meant to conform with EVP_BytesToKey.
|
||||||
|
* www.openssl.org/docs/crypto/EVP_BytesToKey.html
|
||||||
|
*/
|
||||||
|
var EvpKDF = C_algo.EvpKDF = Base.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
|
||||||
|
* @property {Hasher} hasher The hash algorithm to use. Default: MD5
|
||||||
|
* @property {number} iterations The number of iterations to perform. Default: 1
|
||||||
|
*/
|
||||||
|
cfg: Base.extend({
|
||||||
|
keySize: 128/32,
|
||||||
|
hasher: MD5,
|
||||||
|
iterations: 1
|
||||||
|
}),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a newly created key derivation function.
|
||||||
|
*
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for the derivation.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var kdf = CryptoJS.algo.EvpKDF.create();
|
||||||
|
* var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
|
||||||
|
* var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
|
||||||
|
*/
|
||||||
|
init: function (cfg) {
|
||||||
|
this.cfg = this.cfg.extend(cfg);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derives a key from a password.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} password The password.
|
||||||
|
* @param {WordArray|string} salt A salt.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The derived key.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var key = kdf.compute(password, salt);
|
||||||
|
*/
|
||||||
|
compute: function (password, salt) {
|
||||||
|
var block;
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var cfg = this.cfg;
|
||||||
|
|
||||||
|
// Init hasher
|
||||||
|
var hasher = cfg.hasher.create();
|
||||||
|
|
||||||
|
// Initial values
|
||||||
|
var derivedKey = WordArray.create();
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var derivedKeyWords = derivedKey.words;
|
||||||
|
var keySize = cfg.keySize;
|
||||||
|
var iterations = cfg.iterations;
|
||||||
|
|
||||||
|
// Generate key
|
||||||
|
while (derivedKeyWords.length < keySize) {
|
||||||
|
if (block) {
|
||||||
|
hasher.update(block);
|
||||||
|
}
|
||||||
|
block = hasher.update(password).finalize(salt);
|
||||||
|
hasher.reset();
|
||||||
|
|
||||||
|
// Iterations
|
||||||
|
for (var i = 1; i < iterations; i++) {
|
||||||
|
block = hasher.finalize(block);
|
||||||
|
hasher.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
derivedKey.concat(block);
|
||||||
|
}
|
||||||
|
derivedKey.sigBytes = keySize * 4;
|
||||||
|
|
||||||
|
return derivedKey;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derives a key from a password.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} password The password.
|
||||||
|
* @param {WordArray|string} salt A salt.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this computation.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The derived key.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var key = CryptoJS.EvpKDF(password, salt);
|
||||||
|
* var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });
|
||||||
|
* var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });
|
||||||
|
*/
|
||||||
|
C.EvpKDF = function (password, salt, cfg) {
|
||||||
|
return EvpKDF.create(cfg).compute(password, salt);
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cipher core components.
|
||||||
|
*/
|
||||||
|
CryptoJS.lib.Cipher || (function (undefined) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var Base = C_lib.Base;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
|
||||||
|
var C_enc = C.enc;
|
||||||
|
var Utf8 = C_enc.Utf8;
|
||||||
|
var Base64 = C_enc.Base64;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
var EvpKDF = C_algo.EvpKDF;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract base cipher template.
|
||||||
|
*
|
||||||
|
* @property {number} keySize This cipher's key size. Default: 4 (128 bits)
|
||||||
|
* @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)
|
||||||
|
* @property {number} _ENC_XFORM_MODE A constant representing encryption mode.
|
||||||
|
* @property {number} _DEC_XFORM_MODE A constant representing decryption mode.
|
||||||
|
*/
|
||||||
|
var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {WordArray} iv The IV to use for this operation.
|
||||||
|
*/
|
||||||
|
cfg: Base.extend(),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates this cipher in encryption mode.
|
||||||
|
*
|
||||||
|
* @param {WordArray} key The key.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @return {Cipher} A cipher instance.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
|
||||||
|
*/
|
||||||
|
createEncryptor: function (key, cfg) {
|
||||||
|
return this.create(this._ENC_XFORM_MODE, key, cfg);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates this cipher in decryption mode.
|
||||||
|
*
|
||||||
|
* @param {WordArray} key The key.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @return {Cipher} A cipher instance.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
|
||||||
|
*/
|
||||||
|
createDecryptor: function (key, cfg) {
|
||||||
|
return this.create(this._DEC_XFORM_MODE, key, cfg);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a newly created cipher.
|
||||||
|
*
|
||||||
|
* @param {number} xformMode Either the encryption or decryption transormation mode constant.
|
||||||
|
* @param {WordArray} key The key.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
|
||||||
|
*/
|
||||||
|
init: function (xformMode, key, cfg) {
|
||||||
|
// Apply config defaults
|
||||||
|
this.cfg = this.cfg.extend(cfg);
|
||||||
|
|
||||||
|
// Store transform mode and key
|
||||||
|
this._xformMode = xformMode;
|
||||||
|
this._key = key;
|
||||||
|
|
||||||
|
// Set initial values
|
||||||
|
this.reset();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets this cipher to its initial state.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* cipher.reset();
|
||||||
|
*/
|
||||||
|
reset: function () {
|
||||||
|
// Reset data buffer
|
||||||
|
BufferedBlockAlgorithm.reset.call(this);
|
||||||
|
|
||||||
|
// Perform concrete-cipher logic
|
||||||
|
this._doReset();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds data to be encrypted or decrypted.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The data after processing.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var encrypted = cipher.process('data');
|
||||||
|
* var encrypted = cipher.process(wordArray);
|
||||||
|
*/
|
||||||
|
process: function (dataUpdate) {
|
||||||
|
// Append
|
||||||
|
this._append(dataUpdate);
|
||||||
|
|
||||||
|
// Process available blocks
|
||||||
|
return this._process();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalizes the encryption or decryption process.
|
||||||
|
* Note that the finalize operation is effectively a destructive, read-once operation.
|
||||||
|
*
|
||||||
|
* @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The data after final processing.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var encrypted = cipher.finalize();
|
||||||
|
* var encrypted = cipher.finalize('data');
|
||||||
|
* var encrypted = cipher.finalize(wordArray);
|
||||||
|
*/
|
||||||
|
finalize: function (dataUpdate) {
|
||||||
|
// Final data update
|
||||||
|
if (dataUpdate) {
|
||||||
|
this._append(dataUpdate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform concrete-cipher logic
|
||||||
|
var finalProcessedData = this._doFinalize();
|
||||||
|
|
||||||
|
return finalProcessedData;
|
||||||
|
},
|
||||||
|
|
||||||
|
keySize: 128/32,
|
||||||
|
|
||||||
|
ivSize: 128/32,
|
||||||
|
|
||||||
|
_ENC_XFORM_MODE: 1,
|
||||||
|
|
||||||
|
_DEC_XFORM_MODE: 2,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates shortcut functions to a cipher's object interface.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher The cipher to create a helper for.
|
||||||
|
*
|
||||||
|
* @return {Object} An object with encrypt and decrypt shortcut functions.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
|
||||||
|
*/
|
||||||
|
_createHelper: (function () {
|
||||||
|
function selectCipherStrategy(key) {
|
||||||
|
if (typeof key == 'string') {
|
||||||
|
return PasswordBasedCipher;
|
||||||
|
} else {
|
||||||
|
return SerializableCipher;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return function (cipher) {
|
||||||
|
return {
|
||||||
|
encrypt: function (message, key, cfg) {
|
||||||
|
return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);
|
||||||
|
},
|
||||||
|
|
||||||
|
decrypt: function (ciphertext, key, cfg) {
|
||||||
|
return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}())
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract base stream cipher template.
|
||||||
|
*
|
||||||
|
* @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)
|
||||||
|
*/
|
||||||
|
var StreamCipher = C_lib.StreamCipher = Cipher.extend({
|
||||||
|
_doFinalize: function () {
|
||||||
|
// Process partial blocks
|
||||||
|
var finalProcessedBlocks = this._process(!!'flush');
|
||||||
|
|
||||||
|
return finalProcessedBlocks;
|
||||||
|
},
|
||||||
|
|
||||||
|
blockSize: 1
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mode namespace.
|
||||||
|
*/
|
||||||
|
var C_mode = C.mode = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract base block cipher mode template.
|
||||||
|
*/
|
||||||
|
var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
|
||||||
|
/**
|
||||||
|
* Creates this mode for encryption.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher A block cipher instance.
|
||||||
|
* @param {Array} iv The IV words.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
|
||||||
|
*/
|
||||||
|
createEncryptor: function (cipher, iv) {
|
||||||
|
return this.Encryptor.create(cipher, iv);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates this mode for decryption.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher A block cipher instance.
|
||||||
|
* @param {Array} iv The IV words.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
|
||||||
|
*/
|
||||||
|
createDecryptor: function (cipher, iv) {
|
||||||
|
return this.Decryptor.create(cipher, iv);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes a newly created mode.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher A block cipher instance.
|
||||||
|
* @param {Array} iv The IV words.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
|
||||||
|
*/
|
||||||
|
init: function (cipher, iv) {
|
||||||
|
this._cipher = cipher;
|
||||||
|
this._iv = iv;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cipher Block Chaining mode.
|
||||||
|
*/
|
||||||
|
var CBC = C_mode.CBC = (function () {
|
||||||
|
/**
|
||||||
|
* Abstract base CBC mode.
|
||||||
|
*/
|
||||||
|
var CBC = BlockCipherMode.extend();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CBC encryptor.
|
||||||
|
*/
|
||||||
|
CBC.Encryptor = CBC.extend({
|
||||||
|
/**
|
||||||
|
* Processes the data block at offset.
|
||||||
|
*
|
||||||
|
* @param {Array} words The data words to operate on.
|
||||||
|
* @param {number} offset The offset where the block starts.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* mode.processBlock(data.words, offset);
|
||||||
|
*/
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher;
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
|
||||||
|
// XOR and encrypt
|
||||||
|
xorBlock.call(this, words, offset, blockSize);
|
||||||
|
cipher.encryptBlock(words, offset);
|
||||||
|
|
||||||
|
// Remember this block to use with next block
|
||||||
|
this._prevBlock = words.slice(offset, offset + blockSize);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CBC decryptor.
|
||||||
|
*/
|
||||||
|
CBC.Decryptor = CBC.extend({
|
||||||
|
/**
|
||||||
|
* Processes the data block at offset.
|
||||||
|
*
|
||||||
|
* @param {Array} words The data words to operate on.
|
||||||
|
* @param {number} offset The offset where the block starts.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* mode.processBlock(data.words, offset);
|
||||||
|
*/
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher;
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
|
||||||
|
// Remember this block to use with next block
|
||||||
|
var thisBlock = words.slice(offset, offset + blockSize);
|
||||||
|
|
||||||
|
// Decrypt and XOR
|
||||||
|
cipher.decryptBlock(words, offset);
|
||||||
|
xorBlock.call(this, words, offset, blockSize);
|
||||||
|
|
||||||
|
// This block becomes the previous block
|
||||||
|
this._prevBlock = thisBlock;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function xorBlock(words, offset, blockSize) {
|
||||||
|
var block;
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var iv = this._iv;
|
||||||
|
|
||||||
|
// Choose mixing block
|
||||||
|
if (iv) {
|
||||||
|
block = iv;
|
||||||
|
|
||||||
|
// Remove IV for subsequent blocks
|
||||||
|
this._iv = undefined;
|
||||||
|
} else {
|
||||||
|
block = this._prevBlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XOR blocks
|
||||||
|
for (var i = 0; i < blockSize; i++) {
|
||||||
|
words[offset + i] ^= block[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CBC;
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Padding namespace.
|
||||||
|
*/
|
||||||
|
var C_pad = C.pad = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PKCS #5/7 padding strategy.
|
||||||
|
*/
|
||||||
|
var Pkcs7 = C_pad.Pkcs7 = {
|
||||||
|
/**
|
||||||
|
* Pads data using the algorithm defined in PKCS #5/7.
|
||||||
|
*
|
||||||
|
* @param {WordArray} data The data to pad.
|
||||||
|
* @param {number} blockSize The multiple that the data should be padded to.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* CryptoJS.pad.Pkcs7.pad(wordArray, 4);
|
||||||
|
*/
|
||||||
|
pad: function (data, blockSize) {
|
||||||
|
// Shortcut
|
||||||
|
var blockSizeBytes = blockSize * 4;
|
||||||
|
|
||||||
|
// Count padding bytes
|
||||||
|
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
|
||||||
|
|
||||||
|
// Create padding word
|
||||||
|
var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;
|
||||||
|
|
||||||
|
// Create padding
|
||||||
|
var paddingWords = [];
|
||||||
|
for (var i = 0; i < nPaddingBytes; i += 4) {
|
||||||
|
paddingWords.push(paddingWord);
|
||||||
|
}
|
||||||
|
var padding = WordArray.create(paddingWords, nPaddingBytes);
|
||||||
|
|
||||||
|
// Add padding
|
||||||
|
data.concat(padding);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unpads data that had been padded using the algorithm defined in PKCS #5/7.
|
||||||
|
*
|
||||||
|
* @param {WordArray} data The data to unpad.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* CryptoJS.pad.Pkcs7.unpad(wordArray);
|
||||||
|
*/
|
||||||
|
unpad: function (data) {
|
||||||
|
// Get number of padding bytes from last byte
|
||||||
|
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
|
||||||
|
|
||||||
|
// Remove padding
|
||||||
|
data.sigBytes -= nPaddingBytes;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract base block cipher template.
|
||||||
|
*
|
||||||
|
* @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)
|
||||||
|
*/
|
||||||
|
var BlockCipher = C_lib.BlockCipher = Cipher.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {Mode} mode The block mode to use. Default: CBC
|
||||||
|
* @property {Padding} padding The padding strategy to use. Default: Pkcs7
|
||||||
|
*/
|
||||||
|
cfg: Cipher.cfg.extend({
|
||||||
|
mode: CBC,
|
||||||
|
padding: Pkcs7
|
||||||
|
}),
|
||||||
|
|
||||||
|
reset: function () {
|
||||||
|
var modeCreator;
|
||||||
|
|
||||||
|
// Reset cipher
|
||||||
|
Cipher.reset.call(this);
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var cfg = this.cfg;
|
||||||
|
var iv = cfg.iv;
|
||||||
|
var mode = cfg.mode;
|
||||||
|
|
||||||
|
// Reset block mode
|
||||||
|
if (this._xformMode == this._ENC_XFORM_MODE) {
|
||||||
|
modeCreator = mode.createEncryptor;
|
||||||
|
} else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
|
||||||
|
modeCreator = mode.createDecryptor;
|
||||||
|
// Keep at least one block in the buffer for unpadding
|
||||||
|
this._minBufferSize = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this._mode && this._mode.__creator == modeCreator) {
|
||||||
|
this._mode.init(this, iv && iv.words);
|
||||||
|
} else {
|
||||||
|
this._mode = modeCreator.call(mode, this, iv && iv.words);
|
||||||
|
this._mode.__creator = modeCreator;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (words, offset) {
|
||||||
|
this._mode.processBlock(words, offset);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doFinalize: function () {
|
||||||
|
var finalProcessedBlocks;
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var padding = this.cfg.padding;
|
||||||
|
|
||||||
|
// Finalize
|
||||||
|
if (this._xformMode == this._ENC_XFORM_MODE) {
|
||||||
|
// Pad data
|
||||||
|
padding.pad(this._data, this.blockSize);
|
||||||
|
|
||||||
|
// Process final blocks
|
||||||
|
finalProcessedBlocks = this._process(!!'flush');
|
||||||
|
} else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
|
||||||
|
// Process final blocks
|
||||||
|
finalProcessedBlocks = this._process(!!'flush');
|
||||||
|
|
||||||
|
// Unpad data
|
||||||
|
padding.unpad(finalProcessedBlocks);
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalProcessedBlocks;
|
||||||
|
},
|
||||||
|
|
||||||
|
blockSize: 128/32
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of cipher parameters.
|
||||||
|
*
|
||||||
|
* @property {WordArray} ciphertext The raw ciphertext.
|
||||||
|
* @property {WordArray} key The key to this ciphertext.
|
||||||
|
* @property {WordArray} iv The IV used in the ciphering operation.
|
||||||
|
* @property {WordArray} salt The salt used with a key derivation function.
|
||||||
|
* @property {Cipher} algorithm The cipher algorithm.
|
||||||
|
* @property {Mode} mode The block mode used in the ciphering operation.
|
||||||
|
* @property {Padding} padding The padding scheme used in the ciphering operation.
|
||||||
|
* @property {number} blockSize The block size of the cipher.
|
||||||
|
* @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.
|
||||||
|
*/
|
||||||
|
var CipherParams = C_lib.CipherParams = Base.extend({
|
||||||
|
/**
|
||||||
|
* Initializes a newly created cipher params object.
|
||||||
|
*
|
||||||
|
* @param {Object} cipherParams An object with any of the possible cipher parameters.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var cipherParams = CryptoJS.lib.CipherParams.create({
|
||||||
|
* ciphertext: ciphertextWordArray,
|
||||||
|
* key: keyWordArray,
|
||||||
|
* iv: ivWordArray,
|
||||||
|
* salt: saltWordArray,
|
||||||
|
* algorithm: CryptoJS.algo.AES,
|
||||||
|
* mode: CryptoJS.mode.CBC,
|
||||||
|
* padding: CryptoJS.pad.PKCS7,
|
||||||
|
* blockSize: 4,
|
||||||
|
* formatter: CryptoJS.format.OpenSSL
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
init: function (cipherParams) {
|
||||||
|
this.mixIn(cipherParams);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts this cipher params object to a string.
|
||||||
|
*
|
||||||
|
* @param {Format} formatter (Optional) The formatting strategy to use.
|
||||||
|
*
|
||||||
|
* @return {string} The stringified cipher params.
|
||||||
|
*
|
||||||
|
* @throws Error If neither the formatter nor the default formatter is set.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var string = cipherParams + '';
|
||||||
|
* var string = cipherParams.toString();
|
||||||
|
* var string = cipherParams.toString(CryptoJS.format.OpenSSL);
|
||||||
|
*/
|
||||||
|
toString: function (formatter) {
|
||||||
|
return (formatter || this.formatter).stringify(this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format namespace.
|
||||||
|
*/
|
||||||
|
var C_format = C.format = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenSSL formatting strategy.
|
||||||
|
*/
|
||||||
|
var OpenSSLFormatter = C_format.OpenSSL = {
|
||||||
|
/**
|
||||||
|
* Converts a cipher params object to an OpenSSL-compatible string.
|
||||||
|
*
|
||||||
|
* @param {CipherParams} cipherParams The cipher params object.
|
||||||
|
*
|
||||||
|
* @return {string} The OpenSSL-compatible string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
|
||||||
|
*/
|
||||||
|
stringify: function (cipherParams) {
|
||||||
|
var wordArray;
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var ciphertext = cipherParams.ciphertext;
|
||||||
|
var salt = cipherParams.salt;
|
||||||
|
|
||||||
|
// Format
|
||||||
|
if (salt) {
|
||||||
|
wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);
|
||||||
|
} else {
|
||||||
|
wordArray = ciphertext;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wordArray.toString(Base64);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an OpenSSL-compatible string to a cipher params object.
|
||||||
|
*
|
||||||
|
* @param {string} openSSLStr The OpenSSL-compatible string.
|
||||||
|
*
|
||||||
|
* @return {CipherParams} The cipher params object.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
|
||||||
|
*/
|
||||||
|
parse: function (openSSLStr) {
|
||||||
|
var salt;
|
||||||
|
|
||||||
|
// Parse base64
|
||||||
|
var ciphertext = Base64.parse(openSSLStr);
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var ciphertextWords = ciphertext.words;
|
||||||
|
|
||||||
|
// Test for salt
|
||||||
|
if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {
|
||||||
|
// Extract salt
|
||||||
|
salt = WordArray.create(ciphertextWords.slice(2, 4));
|
||||||
|
|
||||||
|
// Remove salt from ciphertext
|
||||||
|
ciphertextWords.splice(0, 4);
|
||||||
|
ciphertext.sigBytes -= 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CipherParams.create({ ciphertext: ciphertext, salt: salt });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A cipher wrapper that returns ciphertext as a serializable cipher params object.
|
||||||
|
*/
|
||||||
|
var SerializableCipher = C_lib.SerializableCipher = Base.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
|
||||||
|
*/
|
||||||
|
cfg: Base.extend({
|
||||||
|
format: OpenSSLFormatter
|
||||||
|
}),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encrypts a message.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher The cipher algorithm to use.
|
||||||
|
* @param {WordArray|string} message The message to encrypt.
|
||||||
|
* @param {WordArray} key The key.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @return {CipherParams} A cipher params object.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
|
||||||
|
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
|
||||||
|
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
|
||||||
|
*/
|
||||||
|
encrypt: function (cipher, message, key, cfg) {
|
||||||
|
// Apply config defaults
|
||||||
|
cfg = this.cfg.extend(cfg);
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
var encryptor = cipher.createEncryptor(key, cfg);
|
||||||
|
var ciphertext = encryptor.finalize(message);
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var cipherCfg = encryptor.cfg;
|
||||||
|
|
||||||
|
// Create and return serializable cipher params
|
||||||
|
return CipherParams.create({
|
||||||
|
ciphertext: ciphertext,
|
||||||
|
key: key,
|
||||||
|
iv: cipherCfg.iv,
|
||||||
|
algorithm: cipher,
|
||||||
|
mode: cipherCfg.mode,
|
||||||
|
padding: cipherCfg.padding,
|
||||||
|
blockSize: cipher.blockSize,
|
||||||
|
formatter: cfg.format
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decrypts serialized ciphertext.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher The cipher algorithm to use.
|
||||||
|
* @param {CipherParams|string} ciphertext The ciphertext to decrypt.
|
||||||
|
* @param {WordArray} key The key.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The plaintext.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
|
||||||
|
* var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
|
||||||
|
*/
|
||||||
|
decrypt: function (cipher, ciphertext, key, cfg) {
|
||||||
|
// Apply config defaults
|
||||||
|
cfg = this.cfg.extend(cfg);
|
||||||
|
|
||||||
|
// Convert string to CipherParams
|
||||||
|
ciphertext = this._parse(ciphertext, cfg.format);
|
||||||
|
|
||||||
|
// Decrypt
|
||||||
|
var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);
|
||||||
|
|
||||||
|
return plaintext;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts serialized ciphertext to CipherParams,
|
||||||
|
* else assumed CipherParams already and returns ciphertext unchanged.
|
||||||
|
*
|
||||||
|
* @param {CipherParams|string} ciphertext The ciphertext.
|
||||||
|
* @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
|
||||||
|
*
|
||||||
|
* @return {CipherParams} The unserialized ciphertext.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
|
||||||
|
*/
|
||||||
|
_parse: function (ciphertext, format) {
|
||||||
|
if (typeof ciphertext == 'string') {
|
||||||
|
return format.parse(ciphertext, this);
|
||||||
|
} else {
|
||||||
|
return ciphertext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Key derivation function namespace.
|
||||||
|
*/
|
||||||
|
var C_kdf = C.kdf = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenSSL key derivation function.
|
||||||
|
*/
|
||||||
|
var OpenSSLKdf = C_kdf.OpenSSL = {
|
||||||
|
/**
|
||||||
|
* Derives a key and IV from a password.
|
||||||
|
*
|
||||||
|
* @param {string} password The password to derive from.
|
||||||
|
* @param {number} keySize The size in words of the key to generate.
|
||||||
|
* @param {number} ivSize The size in words of the IV to generate.
|
||||||
|
* @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.
|
||||||
|
*
|
||||||
|
* @return {CipherParams} A cipher params object with the key, IV, and salt.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
|
||||||
|
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
|
||||||
|
*/
|
||||||
|
execute: function (password, keySize, ivSize, salt) {
|
||||||
|
// Generate random salt
|
||||||
|
if (!salt) {
|
||||||
|
salt = WordArray.random(64/8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Derive key and IV
|
||||||
|
var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
|
||||||
|
|
||||||
|
// Separate key and IV
|
||||||
|
var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
|
||||||
|
key.sigBytes = keySize * 4;
|
||||||
|
|
||||||
|
// Return params
|
||||||
|
return CipherParams.create({ key: key, iv: iv, salt: salt });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A serializable cipher wrapper that derives the key from a password,
|
||||||
|
* and returns ciphertext as a serializable cipher params object.
|
||||||
|
*/
|
||||||
|
var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
|
||||||
|
*/
|
||||||
|
cfg: SerializableCipher.cfg.extend({
|
||||||
|
kdf: OpenSSLKdf
|
||||||
|
}),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encrypts a message using a password.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher The cipher algorithm to use.
|
||||||
|
* @param {WordArray|string} message The message to encrypt.
|
||||||
|
* @param {string} password The password.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @return {CipherParams} A cipher params object.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
|
||||||
|
* var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
|
||||||
|
*/
|
||||||
|
encrypt: function (cipher, message, password, cfg) {
|
||||||
|
// Apply config defaults
|
||||||
|
cfg = this.cfg.extend(cfg);
|
||||||
|
|
||||||
|
// Derive key and other params
|
||||||
|
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
|
||||||
|
|
||||||
|
// Add IV to config
|
||||||
|
cfg.iv = derivedParams.iv;
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
|
||||||
|
|
||||||
|
// Mix in derived params
|
||||||
|
ciphertext.mixIn(derivedParams);
|
||||||
|
|
||||||
|
return ciphertext;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decrypts serialized ciphertext using a password.
|
||||||
|
*
|
||||||
|
* @param {Cipher} cipher The cipher algorithm to use.
|
||||||
|
* @param {CipherParams|string} ciphertext The ciphertext to decrypt.
|
||||||
|
* @param {string} password The password.
|
||||||
|
* @param {Object} cfg (Optional) The configuration options to use for this operation.
|
||||||
|
*
|
||||||
|
* @return {WordArray} The plaintext.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
|
||||||
|
* var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
|
||||||
|
*/
|
||||||
|
decrypt: function (cipher, ciphertext, password, cfg) {
|
||||||
|
// Apply config defaults
|
||||||
|
cfg = this.cfg.extend(cfg);
|
||||||
|
|
||||||
|
// Convert string to CipherParams
|
||||||
|
ciphertext = this._parse(ciphertext, cfg.format);
|
||||||
|
|
||||||
|
// Derive key and other params
|
||||||
|
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
|
||||||
|
|
||||||
|
// Add IV to config
|
||||||
|
cfg.iv = derivedParams.iv;
|
||||||
|
|
||||||
|
// Decrypt
|
||||||
|
var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
|
||||||
|
|
||||||
|
return plaintext;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cipher Feedback block mode.
|
||||||
|
*/
|
||||||
|
CryptoJS.mode.CFB = (function () {
|
||||||
|
var CFB = CryptoJS.lib.BlockCipherMode.extend();
|
||||||
|
|
||||||
|
CFB.Encryptor = CFB.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher;
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
|
||||||
|
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
|
||||||
|
|
||||||
|
// Remember this block to use with next block
|
||||||
|
this._prevBlock = words.slice(offset, offset + blockSize);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
CFB.Decryptor = CFB.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher;
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
|
||||||
|
// Remember this block to use with next block
|
||||||
|
var thisBlock = words.slice(offset, offset + blockSize);
|
||||||
|
|
||||||
|
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
|
||||||
|
|
||||||
|
// This block becomes the previous block
|
||||||
|
this._prevBlock = thisBlock;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
|
||||||
|
var keystream;
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var iv = this._iv;
|
||||||
|
|
||||||
|
// Generate keystream
|
||||||
|
if (iv) {
|
||||||
|
keystream = iv.slice(0);
|
||||||
|
|
||||||
|
// Remove IV for subsequent blocks
|
||||||
|
this._iv = undefined;
|
||||||
|
} else {
|
||||||
|
keystream = this._prevBlock;
|
||||||
|
}
|
||||||
|
cipher.encryptBlock(keystream, 0);
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
for (var i = 0; i < blockSize; i++) {
|
||||||
|
words[offset + i] ^= keystream[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CFB;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Counter block mode.
|
||||||
|
*/
|
||||||
|
CryptoJS.mode.CTR = (function () {
|
||||||
|
var CTR = CryptoJS.lib.BlockCipherMode.extend();
|
||||||
|
|
||||||
|
var Encryptor = CTR.Encryptor = CTR.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
var iv = this._iv;
|
||||||
|
var counter = this._counter;
|
||||||
|
|
||||||
|
// Generate keystream
|
||||||
|
if (iv) {
|
||||||
|
counter = this._counter = iv.slice(0);
|
||||||
|
|
||||||
|
// Remove IV for subsequent blocks
|
||||||
|
this._iv = undefined;
|
||||||
|
}
|
||||||
|
var keystream = counter.slice(0);
|
||||||
|
cipher.encryptBlock(keystream, 0);
|
||||||
|
|
||||||
|
// Increment counter
|
||||||
|
counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
for (var i = 0; i < blockSize; i++) {
|
||||||
|
words[offset + i] ^= keystream[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
CTR.Decryptor = Encryptor;
|
||||||
|
|
||||||
|
return CTR;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
/** @preserve
|
||||||
|
* Counter block mode compatible with Dr Brian Gladman fileenc.c
|
||||||
|
* derived from CryptoJS.mode.CTR
|
||||||
|
* Jan Hruby [email protected]
|
||||||
|
*/
|
||||||
|
CryptoJS.mode.CTRGladman = (function () {
|
||||||
|
var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();
|
||||||
|
|
||||||
|
function incWord(word)
|
||||||
|
{
|
||||||
|
if (((word >> 24) & 0xff) === 0xff) { //overflow
|
||||||
|
var b1 = (word >> 16)&0xff;
|
||||||
|
var b2 = (word >> 8)&0xff;
|
||||||
|
var b3 = word & 0xff;
|
||||||
|
|
||||||
|
if (b1 === 0xff) // overflow b1
|
||||||
|
{
|
||||||
|
b1 = 0;
|
||||||
|
if (b2 === 0xff)
|
||||||
|
{
|
||||||
|
b2 = 0;
|
||||||
|
if (b3 === 0xff)
|
||||||
|
{
|
||||||
|
b3 = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++b3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++b2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++b1;
|
||||||
|
}
|
||||||
|
|
||||||
|
word = 0;
|
||||||
|
word += (b1 << 16);
|
||||||
|
word += (b2 << 8);
|
||||||
|
word += b3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
word += (0x01 << 24);
|
||||||
|
}
|
||||||
|
return word;
|
||||||
|
}
|
||||||
|
|
||||||
|
function incCounter(counter)
|
||||||
|
{
|
||||||
|
if ((counter[0] = incWord(counter[0])) === 0)
|
||||||
|
{
|
||||||
|
// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
|
||||||
|
counter[1] = incWord(counter[1]);
|
||||||
|
}
|
||||||
|
return counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
var iv = this._iv;
|
||||||
|
var counter = this._counter;
|
||||||
|
|
||||||
|
// Generate keystream
|
||||||
|
if (iv) {
|
||||||
|
counter = this._counter = iv.slice(0);
|
||||||
|
|
||||||
|
// Remove IV for subsequent blocks
|
||||||
|
this._iv = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
incCounter(counter);
|
||||||
|
|
||||||
|
var keystream = counter.slice(0);
|
||||||
|
cipher.encryptBlock(keystream, 0);
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
for (var i = 0; i < blockSize; i++) {
|
||||||
|
words[offset + i] ^= keystream[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
CTRGladman.Decryptor = Encryptor;
|
||||||
|
|
||||||
|
return CTRGladman;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Output Feedback block mode.
|
||||||
|
*/
|
||||||
|
CryptoJS.mode.OFB = (function () {
|
||||||
|
var OFB = CryptoJS.lib.BlockCipherMode.extend();
|
||||||
|
|
||||||
|
var Encryptor = OFB.Encryptor = OFB.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
// Shortcuts
|
||||||
|
var cipher = this._cipher
|
||||||
|
var blockSize = cipher.blockSize;
|
||||||
|
var iv = this._iv;
|
||||||
|
var keystream = this._keystream;
|
||||||
|
|
||||||
|
// Generate keystream
|
||||||
|
if (iv) {
|
||||||
|
keystream = this._keystream = iv.slice(0);
|
||||||
|
|
||||||
|
// Remove IV for subsequent blocks
|
||||||
|
this._iv = undefined;
|
||||||
|
}
|
||||||
|
cipher.encryptBlock(keystream, 0);
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
for (var i = 0; i < blockSize; i++) {
|
||||||
|
words[offset + i] ^= keystream[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
OFB.Decryptor = Encryptor;
|
||||||
|
|
||||||
|
return OFB;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Electronic Codebook block mode.
|
||||||
|
*/
|
||||||
|
CryptoJS.mode.ECB = (function () {
|
||||||
|
var ECB = CryptoJS.lib.BlockCipherMode.extend();
|
||||||
|
|
||||||
|
ECB.Encryptor = ECB.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
this._cipher.encryptBlock(words, offset);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ECB.Decryptor = ECB.extend({
|
||||||
|
processBlock: function (words, offset) {
|
||||||
|
this._cipher.decryptBlock(words, offset);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return ECB;
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ANSI X.923 padding strategy.
|
||||||
|
*/
|
||||||
|
CryptoJS.pad.AnsiX923 = {
|
||||||
|
pad: function (data, blockSize) {
|
||||||
|
// Shortcuts
|
||||||
|
var dataSigBytes = data.sigBytes;
|
||||||
|
var blockSizeBytes = blockSize * 4;
|
||||||
|
|
||||||
|
// Count padding bytes
|
||||||
|
var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
|
||||||
|
|
||||||
|
// Compute last byte position
|
||||||
|
var lastBytePos = dataSigBytes + nPaddingBytes - 1;
|
||||||
|
|
||||||
|
// Pad
|
||||||
|
data.clamp();
|
||||||
|
data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
|
||||||
|
data.sigBytes += nPaddingBytes;
|
||||||
|
},
|
||||||
|
|
||||||
|
unpad: function (data) {
|
||||||
|
// Get number of padding bytes from last byte
|
||||||
|
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
|
||||||
|
|
||||||
|
// Remove padding
|
||||||
|
data.sigBytes -= nPaddingBytes;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ISO 10126 padding strategy.
|
||||||
|
*/
|
||||||
|
CryptoJS.pad.Iso10126 = {
|
||||||
|
pad: function (data, blockSize) {
|
||||||
|
// Shortcut
|
||||||
|
var blockSizeBytes = blockSize * 4;
|
||||||
|
|
||||||
|
// Count padding bytes
|
||||||
|
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
|
||||||
|
|
||||||
|
// Pad
|
||||||
|
data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).
|
||||||
|
concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));
|
||||||
|
},
|
||||||
|
|
||||||
|
unpad: function (data) {
|
||||||
|
// Get number of padding bytes from last byte
|
||||||
|
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
|
||||||
|
|
||||||
|
// Remove padding
|
||||||
|
data.sigBytes -= nPaddingBytes;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ISO/IEC 9797-1 Padding Method 2.
|
||||||
|
*/
|
||||||
|
CryptoJS.pad.Iso97971 = {
|
||||||
|
pad: function (data, blockSize) {
|
||||||
|
// Add 0x80 byte
|
||||||
|
data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));
|
||||||
|
|
||||||
|
// Zero pad the rest
|
||||||
|
CryptoJS.pad.ZeroPadding.pad(data, blockSize);
|
||||||
|
},
|
||||||
|
|
||||||
|
unpad: function (data) {
|
||||||
|
// Remove zero padding
|
||||||
|
CryptoJS.pad.ZeroPadding.unpad(data);
|
||||||
|
|
||||||
|
// Remove one more byte -- the 0x80 byte
|
||||||
|
data.sigBytes--;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zero padding strategy.
|
||||||
|
*/
|
||||||
|
CryptoJS.pad.ZeroPadding = {
|
||||||
|
pad: function (data, blockSize) {
|
||||||
|
// Shortcut
|
||||||
|
var blockSizeBytes = blockSize * 4;
|
||||||
|
|
||||||
|
// Pad
|
||||||
|
data.clamp();
|
||||||
|
data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
|
||||||
|
},
|
||||||
|
|
||||||
|
unpad: function (data) {
|
||||||
|
// Shortcut
|
||||||
|
var dataWords = data.words;
|
||||||
|
|
||||||
|
// Unpad
|
||||||
|
var i = data.sigBytes - 1;
|
||||||
|
for (var i = data.sigBytes - 1; i >= 0; i--) {
|
||||||
|
if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
|
||||||
|
data.sigBytes = i + 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A noop padding strategy.
|
||||||
|
*/
|
||||||
|
CryptoJS.pad.NoPadding = {
|
||||||
|
pad: function () {
|
||||||
|
},
|
||||||
|
|
||||||
|
unpad: function () {
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
(function (undefined) {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var CipherParams = C_lib.CipherParams;
|
||||||
|
var C_enc = C.enc;
|
||||||
|
var Hex = C_enc.Hex;
|
||||||
|
var C_format = C.format;
|
||||||
|
|
||||||
|
var HexFormatter = C_format.Hex = {
|
||||||
|
/**
|
||||||
|
* Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
|
||||||
|
*
|
||||||
|
* @param {CipherParams} cipherParams The cipher params object.
|
||||||
|
*
|
||||||
|
* @return {string} The hexadecimally encoded string.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var hexString = CryptoJS.format.Hex.stringify(cipherParams);
|
||||||
|
*/
|
||||||
|
stringify: function (cipherParams) {
|
||||||
|
return cipherParams.ciphertext.toString(Hex);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a hexadecimally encoded ciphertext string to a cipher params object.
|
||||||
|
*
|
||||||
|
* @param {string} input The hexadecimally encoded string.
|
||||||
|
*
|
||||||
|
* @return {CipherParams} The cipher params object.
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var cipherParams = CryptoJS.format.Hex.parse(hexString);
|
||||||
|
*/
|
||||||
|
parse: function (input) {
|
||||||
|
var ciphertext = Hex.parse(input);
|
||||||
|
return CipherParams.create({ ciphertext: ciphertext });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var BlockCipher = C_lib.BlockCipher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Lookup tables
|
||||||
|
var SBOX = [];
|
||||||
|
var INV_SBOX = [];
|
||||||
|
var SUB_MIX_0 = [];
|
||||||
|
var SUB_MIX_1 = [];
|
||||||
|
var SUB_MIX_2 = [];
|
||||||
|
var SUB_MIX_3 = [];
|
||||||
|
var INV_SUB_MIX_0 = [];
|
||||||
|
var INV_SUB_MIX_1 = [];
|
||||||
|
var INV_SUB_MIX_2 = [];
|
||||||
|
var INV_SUB_MIX_3 = [];
|
||||||
|
|
||||||
|
// Compute lookup tables
|
||||||
|
(function () {
|
||||||
|
// Compute double table
|
||||||
|
var d = [];
|
||||||
|
for (var i = 0; i < 256; i++) {
|
||||||
|
if (i < 128) {
|
||||||
|
d[i] = i << 1;
|
||||||
|
} else {
|
||||||
|
d[i] = (i << 1) ^ 0x11b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Walk GF(2^8)
|
||||||
|
var x = 0;
|
||||||
|
var xi = 0;
|
||||||
|
for (var i = 0; i < 256; i++) {
|
||||||
|
// Compute sbox
|
||||||
|
var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);
|
||||||
|
sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;
|
||||||
|
SBOX[x] = sx;
|
||||||
|
INV_SBOX[sx] = x;
|
||||||
|
|
||||||
|
// Compute multiplication
|
||||||
|
var x2 = d[x];
|
||||||
|
var x4 = d[x2];
|
||||||
|
var x8 = d[x4];
|
||||||
|
|
||||||
|
// Compute sub bytes, mix columns tables
|
||||||
|
var t = (d[sx] * 0x101) ^ (sx * 0x1010100);
|
||||||
|
SUB_MIX_0[x] = (t << 24) | (t >>> 8);
|
||||||
|
SUB_MIX_1[x] = (t << 16) | (t >>> 16);
|
||||||
|
SUB_MIX_2[x] = (t << 8) | (t >>> 24);
|
||||||
|
SUB_MIX_3[x] = t;
|
||||||
|
|
||||||
|
// Compute inv sub bytes, inv mix columns tables
|
||||||
|
var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
|
||||||
|
INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);
|
||||||
|
INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);
|
||||||
|
INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);
|
||||||
|
INV_SUB_MIX_3[sx] = t;
|
||||||
|
|
||||||
|
// Compute next counter
|
||||||
|
if (!x) {
|
||||||
|
x = xi = 1;
|
||||||
|
} else {
|
||||||
|
x = x2 ^ d[d[d[x8 ^ x2]]];
|
||||||
|
xi ^= d[d[xi]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Precomputed Rcon lookup
|
||||||
|
var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AES block cipher algorithm.
|
||||||
|
*/
|
||||||
|
var AES = C_algo.AES = BlockCipher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
var t;
|
||||||
|
|
||||||
|
// Skip reset of nRounds has been set before and key did not change
|
||||||
|
if (this._nRounds && this._keyPriorReset === this._key) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shortcuts
|
||||||
|
var key = this._keyPriorReset = this._key;
|
||||||
|
var keyWords = key.words;
|
||||||
|
var keySize = key.sigBytes / 4;
|
||||||
|
|
||||||
|
// Compute number of rounds
|
||||||
|
var nRounds = this._nRounds = keySize + 6;
|
||||||
|
|
||||||
|
// Compute number of key schedule rows
|
||||||
|
var ksRows = (nRounds + 1) * 4;
|
||||||
|
|
||||||
|
// Compute key schedule
|
||||||
|
var keySchedule = this._keySchedule = [];
|
||||||
|
for (var ksRow = 0; ksRow < ksRows; ksRow++) {
|
||||||
|
if (ksRow < keySize) {
|
||||||
|
keySchedule[ksRow] = keyWords[ksRow];
|
||||||
|
} else {
|
||||||
|
t = keySchedule[ksRow - 1];
|
||||||
|
|
||||||
|
if (!(ksRow % keySize)) {
|
||||||
|
// Rot word
|
||||||
|
t = (t << 8) | (t >>> 24);
|
||||||
|
|
||||||
|
// Sub word
|
||||||
|
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
|
||||||
|
|
||||||
|
// Mix Rcon
|
||||||
|
t ^= RCON[(ksRow / keySize) | 0] << 24;
|
||||||
|
} else if (keySize > 6 && ksRow % keySize == 4) {
|
||||||
|
// Sub word
|
||||||
|
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
|
||||||
|
}
|
||||||
|
|
||||||
|
keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute inv key schedule
|
||||||
|
var invKeySchedule = this._invKeySchedule = [];
|
||||||
|
for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
|
||||||
|
var ksRow = ksRows - invKsRow;
|
||||||
|
|
||||||
|
if (invKsRow % 4) {
|
||||||
|
var t = keySchedule[ksRow];
|
||||||
|
} else {
|
||||||
|
var t = keySchedule[ksRow - 4];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (invKsRow < 4 || ksRow <= 4) {
|
||||||
|
invKeySchedule[invKsRow] = t;
|
||||||
|
} else {
|
||||||
|
invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
|
||||||
|
INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
encryptBlock: function (M, offset) {
|
||||||
|
this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
|
||||||
|
},
|
||||||
|
|
||||||
|
decryptBlock: function (M, offset) {
|
||||||
|
// Swap 2nd and 4th rows
|
||||||
|
var t = M[offset + 1];
|
||||||
|
M[offset + 1] = M[offset + 3];
|
||||||
|
M[offset + 3] = t;
|
||||||
|
|
||||||
|
this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
|
||||||
|
|
||||||
|
// Inv swap 2nd and 4th rows
|
||||||
|
var t = M[offset + 1];
|
||||||
|
M[offset + 1] = M[offset + 3];
|
||||||
|
M[offset + 3] = t;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
|
||||||
|
// Shortcut
|
||||||
|
var nRounds = this._nRounds;
|
||||||
|
|
||||||
|
// Get input, add round key
|
||||||
|
var s0 = M[offset] ^ keySchedule[0];
|
||||||
|
var s1 = M[offset + 1] ^ keySchedule[1];
|
||||||
|
var s2 = M[offset + 2] ^ keySchedule[2];
|
||||||
|
var s3 = M[offset + 3] ^ keySchedule[3];
|
||||||
|
|
||||||
|
// Key schedule row counter
|
||||||
|
var ksRow = 4;
|
||||||
|
|
||||||
|
// Rounds
|
||||||
|
for (var round = 1; round < nRounds; round++) {
|
||||||
|
// Shift rows, sub bytes, mix columns, add round key
|
||||||
|
var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
|
||||||
|
var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
|
||||||
|
var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
|
||||||
|
var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];
|
||||||
|
|
||||||
|
// Update state
|
||||||
|
s0 = t0;
|
||||||
|
s1 = t1;
|
||||||
|
s2 = t2;
|
||||||
|
s3 = t3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shift rows, sub bytes, add round key
|
||||||
|
var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
|
||||||
|
var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
|
||||||
|
var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
|
||||||
|
var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
|
||||||
|
|
||||||
|
// Set output
|
||||||
|
M[offset] = t0;
|
||||||
|
M[offset + 1] = t1;
|
||||||
|
M[offset + 2] = t2;
|
||||||
|
M[offset + 3] = t3;
|
||||||
|
},
|
||||||
|
|
||||||
|
keySize: 256/32
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.AES = BlockCipher._createHelper(AES);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var WordArray = C_lib.WordArray;
|
||||||
|
var BlockCipher = C_lib.BlockCipher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Permuted Choice 1 constants
|
||||||
|
var PC1 = [
|
||||||
|
57, 49, 41, 33, 25, 17, 9, 1,
|
||||||
|
58, 50, 42, 34, 26, 18, 10, 2,
|
||||||
|
59, 51, 43, 35, 27, 19, 11, 3,
|
||||||
|
60, 52, 44, 36, 63, 55, 47, 39,
|
||||||
|
31, 23, 15, 7, 62, 54, 46, 38,
|
||||||
|
30, 22, 14, 6, 61, 53, 45, 37,
|
||||||
|
29, 21, 13, 5, 28, 20, 12, 4
|
||||||
|
];
|
||||||
|
|
||||||
|
// Permuted Choice 2 constants
|
||||||
|
var PC2 = [
|
||||||
|
14, 17, 11, 24, 1, 5,
|
||||||
|
3, 28, 15, 6, 21, 10,
|
||||||
|
23, 19, 12, 4, 26, 8,
|
||||||
|
16, 7, 27, 20, 13, 2,
|
||||||
|
41, 52, 31, 37, 47, 55,
|
||||||
|
30, 40, 51, 45, 33, 48,
|
||||||
|
44, 49, 39, 56, 34, 53,
|
||||||
|
46, 42, 50, 36, 29, 32
|
||||||
|
];
|
||||||
|
|
||||||
|
// Cumulative bit shift constants
|
||||||
|
var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];
|
||||||
|
|
||||||
|
// SBOXes and round permutation constants
|
||||||
|
var SBOX_P = [
|
||||||
|
{
|
||||||
|
0x0: 0x808200,
|
||||||
|
0x10000000: 0x8000,
|
||||||
|
0x20000000: 0x808002,
|
||||||
|
0x30000000: 0x2,
|
||||||
|
0x40000000: 0x200,
|
||||||
|
0x50000000: 0x808202,
|
||||||
|
0x60000000: 0x800202,
|
||||||
|
0x70000000: 0x800000,
|
||||||
|
0x80000000: 0x202,
|
||||||
|
0x90000000: 0x800200,
|
||||||
|
0xa0000000: 0x8200,
|
||||||
|
0xb0000000: 0x808000,
|
||||||
|
0xc0000000: 0x8002,
|
||||||
|
0xd0000000: 0x800002,
|
||||||
|
0xe0000000: 0x0,
|
||||||
|
0xf0000000: 0x8202,
|
||||||
|
0x8000000: 0x0,
|
||||||
|
0x18000000: 0x808202,
|
||||||
|
0x28000000: 0x8202,
|
||||||
|
0x38000000: 0x8000,
|
||||||
|
0x48000000: 0x808200,
|
||||||
|
0x58000000: 0x200,
|
||||||
|
0x68000000: 0x808002,
|
||||||
|
0x78000000: 0x2,
|
||||||
|
0x88000000: 0x800200,
|
||||||
|
0x98000000: 0x8200,
|
||||||
|
0xa8000000: 0x808000,
|
||||||
|
0xb8000000: 0x800202,
|
||||||
|
0xc8000000: 0x800002,
|
||||||
|
0xd8000000: 0x8002,
|
||||||
|
0xe8000000: 0x202,
|
||||||
|
0xf8000000: 0x800000,
|
||||||
|
0x1: 0x8000,
|
||||||
|
0x10000001: 0x2,
|
||||||
|
0x20000001: 0x808200,
|
||||||
|
0x30000001: 0x800000,
|
||||||
|
0x40000001: 0x808002,
|
||||||
|
0x50000001: 0x8200,
|
||||||
|
0x60000001: 0x200,
|
||||||
|
0x70000001: 0x800202,
|
||||||
|
0x80000001: 0x808202,
|
||||||
|
0x90000001: 0x808000,
|
||||||
|
0xa0000001: 0x800002,
|
||||||
|
0xb0000001: 0x8202,
|
||||||
|
0xc0000001: 0x202,
|
||||||
|
0xd0000001: 0x800200,
|
||||||
|
0xe0000001: 0x8002,
|
||||||
|
0xf0000001: 0x0,
|
||||||
|
0x8000001: 0x808202,
|
||||||
|
0x18000001: 0x808000,
|
||||||
|
0x28000001: 0x800000,
|
||||||
|
0x38000001: 0x200,
|
||||||
|
0x48000001: 0x8000,
|
||||||
|
0x58000001: 0x800002,
|
||||||
|
0x68000001: 0x2,
|
||||||
|
0x78000001: 0x8202,
|
||||||
|
0x88000001: 0x8002,
|
||||||
|
0x98000001: 0x800202,
|
||||||
|
0xa8000001: 0x202,
|
||||||
|
0xb8000001: 0x808200,
|
||||||
|
0xc8000001: 0x800200,
|
||||||
|
0xd8000001: 0x0,
|
||||||
|
0xe8000001: 0x8200,
|
||||||
|
0xf8000001: 0x808002
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x40084010,
|
||||||
|
0x1000000: 0x4000,
|
||||||
|
0x2000000: 0x80000,
|
||||||
|
0x3000000: 0x40080010,
|
||||||
|
0x4000000: 0x40000010,
|
||||||
|
0x5000000: 0x40084000,
|
||||||
|
0x6000000: 0x40004000,
|
||||||
|
0x7000000: 0x10,
|
||||||
|
0x8000000: 0x84000,
|
||||||
|
0x9000000: 0x40004010,
|
||||||
|
0xa000000: 0x40000000,
|
||||||
|
0xb000000: 0x84010,
|
||||||
|
0xc000000: 0x80010,
|
||||||
|
0xd000000: 0x0,
|
||||||
|
0xe000000: 0x4010,
|
||||||
|
0xf000000: 0x40080000,
|
||||||
|
0x800000: 0x40004000,
|
||||||
|
0x1800000: 0x84010,
|
||||||
|
0x2800000: 0x10,
|
||||||
|
0x3800000: 0x40004010,
|
||||||
|
0x4800000: 0x40084010,
|
||||||
|
0x5800000: 0x40000000,
|
||||||
|
0x6800000: 0x80000,
|
||||||
|
0x7800000: 0x40080010,
|
||||||
|
0x8800000: 0x80010,
|
||||||
|
0x9800000: 0x0,
|
||||||
|
0xa800000: 0x4000,
|
||||||
|
0xb800000: 0x40080000,
|
||||||
|
0xc800000: 0x40000010,
|
||||||
|
0xd800000: 0x84000,
|
||||||
|
0xe800000: 0x40084000,
|
||||||
|
0xf800000: 0x4010,
|
||||||
|
0x10000000: 0x0,
|
||||||
|
0x11000000: 0x40080010,
|
||||||
|
0x12000000: 0x40004010,
|
||||||
|
0x13000000: 0x40084000,
|
||||||
|
0x14000000: 0x40080000,
|
||||||
|
0x15000000: 0x10,
|
||||||
|
0x16000000: 0x84010,
|
||||||
|
0x17000000: 0x4000,
|
||||||
|
0x18000000: 0x4010,
|
||||||
|
0x19000000: 0x80000,
|
||||||
|
0x1a000000: 0x80010,
|
||||||
|
0x1b000000: 0x40000010,
|
||||||
|
0x1c000000: 0x84000,
|
||||||
|
0x1d000000: 0x40004000,
|
||||||
|
0x1e000000: 0x40000000,
|
||||||
|
0x1f000000: 0x40084010,
|
||||||
|
0x10800000: 0x84010,
|
||||||
|
0x11800000: 0x80000,
|
||||||
|
0x12800000: 0x40080000,
|
||||||
|
0x13800000: 0x4000,
|
||||||
|
0x14800000: 0x40004000,
|
||||||
|
0x15800000: 0x40084010,
|
||||||
|
0x16800000: 0x10,
|
||||||
|
0x17800000: 0x40000000,
|
||||||
|
0x18800000: 0x40084000,
|
||||||
|
0x19800000: 0x40000010,
|
||||||
|
0x1a800000: 0x40004010,
|
||||||
|
0x1b800000: 0x80010,
|
||||||
|
0x1c800000: 0x0,
|
||||||
|
0x1d800000: 0x4010,
|
||||||
|
0x1e800000: 0x40080010,
|
||||||
|
0x1f800000: 0x84000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x104,
|
||||||
|
0x100000: 0x0,
|
||||||
|
0x200000: 0x4000100,
|
||||||
|
0x300000: 0x10104,
|
||||||
|
0x400000: 0x10004,
|
||||||
|
0x500000: 0x4000004,
|
||||||
|
0x600000: 0x4010104,
|
||||||
|
0x700000: 0x4010000,
|
||||||
|
0x800000: 0x4000000,
|
||||||
|
0x900000: 0x4010100,
|
||||||
|
0xa00000: 0x10100,
|
||||||
|
0xb00000: 0x4010004,
|
||||||
|
0xc00000: 0x4000104,
|
||||||
|
0xd00000: 0x10000,
|
||||||
|
0xe00000: 0x4,
|
||||||
|
0xf00000: 0x100,
|
||||||
|
0x80000: 0x4010100,
|
||||||
|
0x180000: 0x4010004,
|
||||||
|
0x280000: 0x0,
|
||||||
|
0x380000: 0x4000100,
|
||||||
|
0x480000: 0x4000004,
|
||||||
|
0x580000: 0x10000,
|
||||||
|
0x680000: 0x10004,
|
||||||
|
0x780000: 0x104,
|
||||||
|
0x880000: 0x4,
|
||||||
|
0x980000: 0x100,
|
||||||
|
0xa80000: 0x4010000,
|
||||||
|
0xb80000: 0x10104,
|
||||||
|
0xc80000: 0x10100,
|
||||||
|
0xd80000: 0x4000104,
|
||||||
|
0xe80000: 0x4010104,
|
||||||
|
0xf80000: 0x4000000,
|
||||||
|
0x1000000: 0x4010100,
|
||||||
|
0x1100000: 0x10004,
|
||||||
|
0x1200000: 0x10000,
|
||||||
|
0x1300000: 0x4000100,
|
||||||
|
0x1400000: 0x100,
|
||||||
|
0x1500000: 0x4010104,
|
||||||
|
0x1600000: 0x4000004,
|
||||||
|
0x1700000: 0x0,
|
||||||
|
0x1800000: 0x4000104,
|
||||||
|
0x1900000: 0x4000000,
|
||||||
|
0x1a00000: 0x4,
|
||||||
|
0x1b00000: 0x10100,
|
||||||
|
0x1c00000: 0x4010000,
|
||||||
|
0x1d00000: 0x104,
|
||||||
|
0x1e00000: 0x10104,
|
||||||
|
0x1f00000: 0x4010004,
|
||||||
|
0x1080000: 0x4000000,
|
||||||
|
0x1180000: 0x104,
|
||||||
|
0x1280000: 0x4010100,
|
||||||
|
0x1380000: 0x0,
|
||||||
|
0x1480000: 0x10004,
|
||||||
|
0x1580000: 0x4000100,
|
||||||
|
0x1680000: 0x100,
|
||||||
|
0x1780000: 0x4010004,
|
||||||
|
0x1880000: 0x10000,
|
||||||
|
0x1980000: 0x4010104,
|
||||||
|
0x1a80000: 0x10104,
|
||||||
|
0x1b80000: 0x4000004,
|
||||||
|
0x1c80000: 0x4000104,
|
||||||
|
0x1d80000: 0x4010000,
|
||||||
|
0x1e80000: 0x4,
|
||||||
|
0x1f80000: 0x10100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x80401000,
|
||||||
|
0x10000: 0x80001040,
|
||||||
|
0x20000: 0x401040,
|
||||||
|
0x30000: 0x80400000,
|
||||||
|
0x40000: 0x0,
|
||||||
|
0x50000: 0x401000,
|
||||||
|
0x60000: 0x80000040,
|
||||||
|
0x70000: 0x400040,
|
||||||
|
0x80000: 0x80000000,
|
||||||
|
0x90000: 0x400000,
|
||||||
|
0xa0000: 0x40,
|
||||||
|
0xb0000: 0x80001000,
|
||||||
|
0xc0000: 0x80400040,
|
||||||
|
0xd0000: 0x1040,
|
||||||
|
0xe0000: 0x1000,
|
||||||
|
0xf0000: 0x80401040,
|
||||||
|
0x8000: 0x80001040,
|
||||||
|
0x18000: 0x40,
|
||||||
|
0x28000: 0x80400040,
|
||||||
|
0x38000: 0x80001000,
|
||||||
|
0x48000: 0x401000,
|
||||||
|
0x58000: 0x80401040,
|
||||||
|
0x68000: 0x0,
|
||||||
|
0x78000: 0x80400000,
|
||||||
|
0x88000: 0x1000,
|
||||||
|
0x98000: 0x80401000,
|
||||||
|
0xa8000: 0x400000,
|
||||||
|
0xb8000: 0x1040,
|
||||||
|
0xc8000: 0x80000000,
|
||||||
|
0xd8000: 0x400040,
|
||||||
|
0xe8000: 0x401040,
|
||||||
|
0xf8000: 0x80000040,
|
||||||
|
0x100000: 0x400040,
|
||||||
|
0x110000: 0x401000,
|
||||||
|
0x120000: 0x80000040,
|
||||||
|
0x130000: 0x0,
|
||||||
|
0x140000: 0x1040,
|
||||||
|
0x150000: 0x80400040,
|
||||||
|
0x160000: 0x80401000,
|
||||||
|
0x170000: 0x80001040,
|
||||||
|
0x180000: 0x80401040,
|
||||||
|
0x190000: 0x80000000,
|
||||||
|
0x1a0000: 0x80400000,
|
||||||
|
0x1b0000: 0x401040,
|
||||||
|
0x1c0000: 0x80001000,
|
||||||
|
0x1d0000: 0x400000,
|
||||||
|
0x1e0000: 0x40,
|
||||||
|
0x1f0000: 0x1000,
|
||||||
|
0x108000: 0x80400000,
|
||||||
|
0x118000: 0x80401040,
|
||||||
|
0x128000: 0x0,
|
||||||
|
0x138000: 0x401000,
|
||||||
|
0x148000: 0x400040,
|
||||||
|
0x158000: 0x80000000,
|
||||||
|
0x168000: 0x80001040,
|
||||||
|
0x178000: 0x40,
|
||||||
|
0x188000: 0x80000040,
|
||||||
|
0x198000: 0x1000,
|
||||||
|
0x1a8000: 0x80001000,
|
||||||
|
0x1b8000: 0x80400040,
|
||||||
|
0x1c8000: 0x1040,
|
||||||
|
0x1d8000: 0x80401000,
|
||||||
|
0x1e8000: 0x400000,
|
||||||
|
0x1f8000: 0x401040
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x80,
|
||||||
|
0x1000: 0x1040000,
|
||||||
|
0x2000: 0x40000,
|
||||||
|
0x3000: 0x20000000,
|
||||||
|
0x4000: 0x20040080,
|
||||||
|
0x5000: 0x1000080,
|
||||||
|
0x6000: 0x21000080,
|
||||||
|
0x7000: 0x40080,
|
||||||
|
0x8000: 0x1000000,
|
||||||
|
0x9000: 0x20040000,
|
||||||
|
0xa000: 0x20000080,
|
||||||
|
0xb000: 0x21040080,
|
||||||
|
0xc000: 0x21040000,
|
||||||
|
0xd000: 0x0,
|
||||||
|
0xe000: 0x1040080,
|
||||||
|
0xf000: 0x21000000,
|
||||||
|
0x800: 0x1040080,
|
||||||
|
0x1800: 0x21000080,
|
||||||
|
0x2800: 0x80,
|
||||||
|
0x3800: 0x1040000,
|
||||||
|
0x4800: 0x40000,
|
||||||
|
0x5800: 0x20040080,
|
||||||
|
0x6800: 0x21040000,
|
||||||
|
0x7800: 0x20000000,
|
||||||
|
0x8800: 0x20040000,
|
||||||
|
0x9800: 0x0,
|
||||||
|
0xa800: 0x21040080,
|
||||||
|
0xb800: 0x1000080,
|
||||||
|
0xc800: 0x20000080,
|
||||||
|
0xd800: 0x21000000,
|
||||||
|
0xe800: 0x1000000,
|
||||||
|
0xf800: 0x40080,
|
||||||
|
0x10000: 0x40000,
|
||||||
|
0x11000: 0x80,
|
||||||
|
0x12000: 0x20000000,
|
||||||
|
0x13000: 0x21000080,
|
||||||
|
0x14000: 0x1000080,
|
||||||
|
0x15000: 0x21040000,
|
||||||
|
0x16000: 0x20040080,
|
||||||
|
0x17000: 0x1000000,
|
||||||
|
0x18000: 0x21040080,
|
||||||
|
0x19000: 0x21000000,
|
||||||
|
0x1a000: 0x1040000,
|
||||||
|
0x1b000: 0x20040000,
|
||||||
|
0x1c000: 0x40080,
|
||||||
|
0x1d000: 0x20000080,
|
||||||
|
0x1e000: 0x0,
|
||||||
|
0x1f000: 0x1040080,
|
||||||
|
0x10800: 0x21000080,
|
||||||
|
0x11800: 0x1000000,
|
||||||
|
0x12800: 0x1040000,
|
||||||
|
0x13800: 0x20040080,
|
||||||
|
0x14800: 0x20000000,
|
||||||
|
0x15800: 0x1040080,
|
||||||
|
0x16800: 0x80,
|
||||||
|
0x17800: 0x21040000,
|
||||||
|
0x18800: 0x40080,
|
||||||
|
0x19800: 0x21040080,
|
||||||
|
0x1a800: 0x0,
|
||||||
|
0x1b800: 0x21000000,
|
||||||
|
0x1c800: 0x1000080,
|
||||||
|
0x1d800: 0x40000,
|
||||||
|
0x1e800: 0x20040000,
|
||||||
|
0x1f800: 0x20000080
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x10000008,
|
||||||
|
0x100: 0x2000,
|
||||||
|
0x200: 0x10200000,
|
||||||
|
0x300: 0x10202008,
|
||||||
|
0x400: 0x10002000,
|
||||||
|
0x500: 0x200000,
|
||||||
|
0x600: 0x200008,
|
||||||
|
0x700: 0x10000000,
|
||||||
|
0x800: 0x0,
|
||||||
|
0x900: 0x10002008,
|
||||||
|
0xa00: 0x202000,
|
||||||
|
0xb00: 0x8,
|
||||||
|
0xc00: 0x10200008,
|
||||||
|
0xd00: 0x202008,
|
||||||
|
0xe00: 0x2008,
|
||||||
|
0xf00: 0x10202000,
|
||||||
|
0x80: 0x10200000,
|
||||||
|
0x180: 0x10202008,
|
||||||
|
0x280: 0x8,
|
||||||
|
0x380: 0x200000,
|
||||||
|
0x480: 0x202008,
|
||||||
|
0x580: 0x10000008,
|
||||||
|
0x680: 0x10002000,
|
||||||
|
0x780: 0x2008,
|
||||||
|
0x880: 0x200008,
|
||||||
|
0x980: 0x2000,
|
||||||
|
0xa80: 0x10002008,
|
||||||
|
0xb80: 0x10200008,
|
||||||
|
0xc80: 0x0,
|
||||||
|
0xd80: 0x10202000,
|
||||||
|
0xe80: 0x202000,
|
||||||
|
0xf80: 0x10000000,
|
||||||
|
0x1000: 0x10002000,
|
||||||
|
0x1100: 0x10200008,
|
||||||
|
0x1200: 0x10202008,
|
||||||
|
0x1300: 0x2008,
|
||||||
|
0x1400: 0x200000,
|
||||||
|
0x1500: 0x10000000,
|
||||||
|
0x1600: 0x10000008,
|
||||||
|
0x1700: 0x202000,
|
||||||
|
0x1800: 0x202008,
|
||||||
|
0x1900: 0x0,
|
||||||
|
0x1a00: 0x8,
|
||||||
|
0x1b00: 0x10200000,
|
||||||
|
0x1c00: 0x2000,
|
||||||
|
0x1d00: 0x10002008,
|
||||||
|
0x1e00: 0x10202000,
|
||||||
|
0x1f00: 0x200008,
|
||||||
|
0x1080: 0x8,
|
||||||
|
0x1180: 0x202000,
|
||||||
|
0x1280: 0x200000,
|
||||||
|
0x1380: 0x10000008,
|
||||||
|
0x1480: 0x10002000,
|
||||||
|
0x1580: 0x2008,
|
||||||
|
0x1680: 0x10202008,
|
||||||
|
0x1780: 0x10200000,
|
||||||
|
0x1880: 0x10202000,
|
||||||
|
0x1980: 0x10200008,
|
||||||
|
0x1a80: 0x2000,
|
||||||
|
0x1b80: 0x202008,
|
||||||
|
0x1c80: 0x200008,
|
||||||
|
0x1d80: 0x0,
|
||||||
|
0x1e80: 0x10000000,
|
||||||
|
0x1f80: 0x10002008
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x100000,
|
||||||
|
0x10: 0x2000401,
|
||||||
|
0x20: 0x400,
|
||||||
|
0x30: 0x100401,
|
||||||
|
0x40: 0x2100401,
|
||||||
|
0x50: 0x0,
|
||||||
|
0x60: 0x1,
|
||||||
|
0x70: 0x2100001,
|
||||||
|
0x80: 0x2000400,
|
||||||
|
0x90: 0x100001,
|
||||||
|
0xa0: 0x2000001,
|
||||||
|
0xb0: 0x2100400,
|
||||||
|
0xc0: 0x2100000,
|
||||||
|
0xd0: 0x401,
|
||||||
|
0xe0: 0x100400,
|
||||||
|
0xf0: 0x2000000,
|
||||||
|
0x8: 0x2100001,
|
||||||
|
0x18: 0x0,
|
||||||
|
0x28: 0x2000401,
|
||||||
|
0x38: 0x2100400,
|
||||||
|
0x48: 0x100000,
|
||||||
|
0x58: 0x2000001,
|
||||||
|
0x68: 0x2000000,
|
||||||
|
0x78: 0x401,
|
||||||
|
0x88: 0x100401,
|
||||||
|
0x98: 0x2000400,
|
||||||
|
0xa8: 0x2100000,
|
||||||
|
0xb8: 0x100001,
|
||||||
|
0xc8: 0x400,
|
||||||
|
0xd8: 0x2100401,
|
||||||
|
0xe8: 0x1,
|
||||||
|
0xf8: 0x100400,
|
||||||
|
0x100: 0x2000000,
|
||||||
|
0x110: 0x100000,
|
||||||
|
0x120: 0x2000401,
|
||||||
|
0x130: 0x2100001,
|
||||||
|
0x140: 0x100001,
|
||||||
|
0x150: 0x2000400,
|
||||||
|
0x160: 0x2100400,
|
||||||
|
0x170: 0x100401,
|
||||||
|
0x180: 0x401,
|
||||||
|
0x190: 0x2100401,
|
||||||
|
0x1a0: 0x100400,
|
||||||
|
0x1b0: 0x1,
|
||||||
|
0x1c0: 0x0,
|
||||||
|
0x1d0: 0x2100000,
|
||||||
|
0x1e0: 0x2000001,
|
||||||
|
0x1f0: 0x400,
|
||||||
|
0x108: 0x100400,
|
||||||
|
0x118: 0x2000401,
|
||||||
|
0x128: 0x2100001,
|
||||||
|
0x138: 0x1,
|
||||||
|
0x148: 0x2000000,
|
||||||
|
0x158: 0x100000,
|
||||||
|
0x168: 0x401,
|
||||||
|
0x178: 0x2100400,
|
||||||
|
0x188: 0x2000001,
|
||||||
|
0x198: 0x2100000,
|
||||||
|
0x1a8: 0x0,
|
||||||
|
0x1b8: 0x2100401,
|
||||||
|
0x1c8: 0x100401,
|
||||||
|
0x1d8: 0x400,
|
||||||
|
0x1e8: 0x2000400,
|
||||||
|
0x1f8: 0x100001
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x0: 0x8000820,
|
||||||
|
0x1: 0x20000,
|
||||||
|
0x2: 0x8000000,
|
||||||
|
0x3: 0x20,
|
||||||
|
0x4: 0x20020,
|
||||||
|
0x5: 0x8020820,
|
||||||
|
0x6: 0x8020800,
|
||||||
|
0x7: 0x800,
|
||||||
|
0x8: 0x8020000,
|
||||||
|
0x9: 0x8000800,
|
||||||
|
0xa: 0x20800,
|
||||||
|
0xb: 0x8020020,
|
||||||
|
0xc: 0x820,
|
||||||
|
0xd: 0x0,
|
||||||
|
0xe: 0x8000020,
|
||||||
|
0xf: 0x20820,
|
||||||
|
0x80000000: 0x800,
|
||||||
|
0x80000001: 0x8020820,
|
||||||
|
0x80000002: 0x8000820,
|
||||||
|
0x80000003: 0x8000000,
|
||||||
|
0x80000004: 0x8020000,
|
||||||
|
0x80000005: 0x20800,
|
||||||
|
0x80000006: 0x20820,
|
||||||
|
0x80000007: 0x20,
|
||||||
|
0x80000008: 0x8000020,
|
||||||
|
0x80000009: 0x820,
|
||||||
|
0x8000000a: 0x20020,
|
||||||
|
0x8000000b: 0x8020800,
|
||||||
|
0x8000000c: 0x0,
|
||||||
|
0x8000000d: 0x8020020,
|
||||||
|
0x8000000e: 0x8000800,
|
||||||
|
0x8000000f: 0x20000,
|
||||||
|
0x10: 0x20820,
|
||||||
|
0x11: 0x8020800,
|
||||||
|
0x12: 0x20,
|
||||||
|
0x13: 0x800,
|
||||||
|
0x14: 0x8000800,
|
||||||
|
0x15: 0x8000020,
|
||||||
|
0x16: 0x8020020,
|
||||||
|
0x17: 0x20000,
|
||||||
|
0x18: 0x0,
|
||||||
|
0x19: 0x20020,
|
||||||
|
0x1a: 0x8020000,
|
||||||
|
0x1b: 0x8000820,
|
||||||
|
0x1c: 0x8020820,
|
||||||
|
0x1d: 0x20800,
|
||||||
|
0x1e: 0x820,
|
||||||
|
0x1f: 0x8000000,
|
||||||
|
0x80000010: 0x20000,
|
||||||
|
0x80000011: 0x800,
|
||||||
|
0x80000012: 0x8020020,
|
||||||
|
0x80000013: 0x20820,
|
||||||
|
0x80000014: 0x20,
|
||||||
|
0x80000015: 0x8020000,
|
||||||
|
0x80000016: 0x8000000,
|
||||||
|
0x80000017: 0x8000820,
|
||||||
|
0x80000018: 0x8020820,
|
||||||
|
0x80000019: 0x8000020,
|
||||||
|
0x8000001a: 0x8000800,
|
||||||
|
0x8000001b: 0x0,
|
||||||
|
0x8000001c: 0x20800,
|
||||||
|
0x8000001d: 0x820,
|
||||||
|
0x8000001e: 0x20020,
|
||||||
|
0x8000001f: 0x8020800
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// Masks that select the SBOX input
|
||||||
|
var SBOX_MASK = [
|
||||||
|
0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,
|
||||||
|
0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DES block cipher algorithm.
|
||||||
|
*/
|
||||||
|
var DES = C_algo.DES = BlockCipher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var key = this._key;
|
||||||
|
var keyWords = key.words;
|
||||||
|
|
||||||
|
// Select 56 bits according to PC1
|
||||||
|
var keyBits = [];
|
||||||
|
for (var i = 0; i < 56; i++) {
|
||||||
|
var keyBitPos = PC1[i] - 1;
|
||||||
|
keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assemble 16 subkeys
|
||||||
|
var subKeys = this._subKeys = [];
|
||||||
|
for (var nSubKey = 0; nSubKey < 16; nSubKey++) {
|
||||||
|
// Create subkey
|
||||||
|
var subKey = subKeys[nSubKey] = [];
|
||||||
|
|
||||||
|
// Shortcut
|
||||||
|
var bitShift = BIT_SHIFTS[nSubKey];
|
||||||
|
|
||||||
|
// Select 48 bits according to PC2
|
||||||
|
for (var i = 0; i < 24; i++) {
|
||||||
|
// Select from the left 28 key bits
|
||||||
|
subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);
|
||||||
|
|
||||||
|
// Select from the right 28 key bits
|
||||||
|
subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since each subkey is applied to an expanded 32-bit input,
|
||||||
|
// the subkey can be broken into 8 values scaled to 32-bits,
|
||||||
|
// which allows the key to be used without expansion
|
||||||
|
subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);
|
||||||
|
for (var i = 1; i < 7; i++) {
|
||||||
|
subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);
|
||||||
|
}
|
||||||
|
subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute inverse subkeys
|
||||||
|
var invSubKeys = this._invSubKeys = [];
|
||||||
|
for (var i = 0; i < 16; i++) {
|
||||||
|
invSubKeys[i] = subKeys[15 - i];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
encryptBlock: function (M, offset) {
|
||||||
|
this._doCryptBlock(M, offset, this._subKeys);
|
||||||
|
},
|
||||||
|
|
||||||
|
decryptBlock: function (M, offset) {
|
||||||
|
this._doCryptBlock(M, offset, this._invSubKeys);
|
||||||
|
},
|
||||||
|
|
||||||
|
_doCryptBlock: function (M, offset, subKeys) {
|
||||||
|
// Get input
|
||||||
|
this._lBlock = M[offset];
|
||||||
|
this._rBlock = M[offset + 1];
|
||||||
|
|
||||||
|
// Initial permutation
|
||||||
|
exchangeLR.call(this, 4, 0x0f0f0f0f);
|
||||||
|
exchangeLR.call(this, 16, 0x0000ffff);
|
||||||
|
exchangeRL.call(this, 2, 0x33333333);
|
||||||
|
exchangeRL.call(this, 8, 0x00ff00ff);
|
||||||
|
exchangeLR.call(this, 1, 0x55555555);
|
||||||
|
|
||||||
|
// Rounds
|
||||||
|
for (var round = 0; round < 16; round++) {
|
||||||
|
// Shortcuts
|
||||||
|
var subKey = subKeys[round];
|
||||||
|
var lBlock = this._lBlock;
|
||||||
|
var rBlock = this._rBlock;
|
||||||
|
|
||||||
|
// Feistel function
|
||||||
|
var f = 0;
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];
|
||||||
|
}
|
||||||
|
this._lBlock = rBlock;
|
||||||
|
this._rBlock = lBlock ^ f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Undo swap from last round
|
||||||
|
var t = this._lBlock;
|
||||||
|
this._lBlock = this._rBlock;
|
||||||
|
this._rBlock = t;
|
||||||
|
|
||||||
|
// Final permutation
|
||||||
|
exchangeLR.call(this, 1, 0x55555555);
|
||||||
|
exchangeRL.call(this, 8, 0x00ff00ff);
|
||||||
|
exchangeRL.call(this, 2, 0x33333333);
|
||||||
|
exchangeLR.call(this, 16, 0x0000ffff);
|
||||||
|
exchangeLR.call(this, 4, 0x0f0f0f0f);
|
||||||
|
|
||||||
|
// Set output
|
||||||
|
M[offset] = this._lBlock;
|
||||||
|
M[offset + 1] = this._rBlock;
|
||||||
|
},
|
||||||
|
|
||||||
|
keySize: 64/32,
|
||||||
|
|
||||||
|
ivSize: 64/32,
|
||||||
|
|
||||||
|
blockSize: 64/32
|
||||||
|
});
|
||||||
|
|
||||||
|
// Swap bits across the left and right words
|
||||||
|
function exchangeLR(offset, mask) {
|
||||||
|
var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;
|
||||||
|
this._rBlock ^= t;
|
||||||
|
this._lBlock ^= t << offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
function exchangeRL(offset, mask) {
|
||||||
|
var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;
|
||||||
|
this._lBlock ^= t;
|
||||||
|
this._rBlock ^= t << offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.DES = BlockCipher._createHelper(DES);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Triple-DES block cipher algorithm.
|
||||||
|
*/
|
||||||
|
var TripleDES = C_algo.TripleDES = BlockCipher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var key = this._key;
|
||||||
|
var keyWords = key.words;
|
||||||
|
// Make sure the key length is valid (64, 128 or >= 192 bit)
|
||||||
|
if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {
|
||||||
|
throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extend the key according to the keying options defined in 3DES standard
|
||||||
|
var key1 = keyWords.slice(0, 2);
|
||||||
|
var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);
|
||||||
|
var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);
|
||||||
|
|
||||||
|
// Create DES instances
|
||||||
|
this._des1 = DES.createEncryptor(WordArray.create(key1));
|
||||||
|
this._des2 = DES.createEncryptor(WordArray.create(key2));
|
||||||
|
this._des3 = DES.createEncryptor(WordArray.create(key3));
|
||||||
|
},
|
||||||
|
|
||||||
|
encryptBlock: function (M, offset) {
|
||||||
|
this._des1.encryptBlock(M, offset);
|
||||||
|
this._des2.decryptBlock(M, offset);
|
||||||
|
this._des3.encryptBlock(M, offset);
|
||||||
|
},
|
||||||
|
|
||||||
|
decryptBlock: function (M, offset) {
|
||||||
|
this._des3.decryptBlock(M, offset);
|
||||||
|
this._des2.encryptBlock(M, offset);
|
||||||
|
this._des1.decryptBlock(M, offset);
|
||||||
|
},
|
||||||
|
|
||||||
|
keySize: 192/32,
|
||||||
|
|
||||||
|
ivSize: 64/32,
|
||||||
|
|
||||||
|
blockSize: 64/32
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.TripleDES = BlockCipher._createHelper(TripleDES);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var StreamCipher = C_lib.StreamCipher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RC4 stream cipher algorithm.
|
||||||
|
*/
|
||||||
|
var RC4 = C_algo.RC4 = StreamCipher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var key = this._key;
|
||||||
|
var keyWords = key.words;
|
||||||
|
var keySigBytes = key.sigBytes;
|
||||||
|
|
||||||
|
// Init sbox
|
||||||
|
var S = this._S = [];
|
||||||
|
for (var i = 0; i < 256; i++) {
|
||||||
|
S[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key setup
|
||||||
|
for (var i = 0, j = 0; i < 256; i++) {
|
||||||
|
var keyByteIndex = i % keySigBytes;
|
||||||
|
var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;
|
||||||
|
|
||||||
|
j = (j + S[i] + keyByte) % 256;
|
||||||
|
|
||||||
|
// Swap
|
||||||
|
var t = S[i];
|
||||||
|
S[i] = S[j];
|
||||||
|
S[j] = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Counters
|
||||||
|
this._i = this._j = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
M[offset] ^= generateKeystreamWord.call(this);
|
||||||
|
},
|
||||||
|
|
||||||
|
keySize: 256/32,
|
||||||
|
|
||||||
|
ivSize: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
function generateKeystreamWord() {
|
||||||
|
// Shortcuts
|
||||||
|
var S = this._S;
|
||||||
|
var i = this._i;
|
||||||
|
var j = this._j;
|
||||||
|
|
||||||
|
// Generate keystream word
|
||||||
|
var keystreamWord = 0;
|
||||||
|
for (var n = 0; n < 4; n++) {
|
||||||
|
i = (i + 1) % 256;
|
||||||
|
j = (j + S[i]) % 256;
|
||||||
|
|
||||||
|
// Swap
|
||||||
|
var t = S[i];
|
||||||
|
S[i] = S[j];
|
||||||
|
S[j] = t;
|
||||||
|
|
||||||
|
keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update counters
|
||||||
|
this._i = i;
|
||||||
|
this._j = j;
|
||||||
|
|
||||||
|
return keystreamWord;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.RC4 = StreamCipher._createHelper(RC4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modified RC4 stream cipher algorithm.
|
||||||
|
*/
|
||||||
|
var RC4Drop = C_algo.RC4Drop = RC4.extend({
|
||||||
|
/**
|
||||||
|
* Configuration options.
|
||||||
|
*
|
||||||
|
* @property {number} drop The number of keystream words to drop. Default 192
|
||||||
|
*/
|
||||||
|
cfg: RC4.cfg.extend({
|
||||||
|
drop: 192
|
||||||
|
}),
|
||||||
|
|
||||||
|
_doReset: function () {
|
||||||
|
RC4._doReset.call(this);
|
||||||
|
|
||||||
|
// Drop
|
||||||
|
for (var i = this.cfg.drop; i > 0; i--) {
|
||||||
|
generateKeystreamWord.call(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.RC4Drop = StreamCipher._createHelper(RC4Drop);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var StreamCipher = C_lib.StreamCipher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Reusable objects
|
||||||
|
var S = [];
|
||||||
|
var C_ = [];
|
||||||
|
var G = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rabbit stream cipher algorithm
|
||||||
|
*/
|
||||||
|
var Rabbit = C_algo.Rabbit = StreamCipher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var K = this._key.words;
|
||||||
|
var iv = this.cfg.iv;
|
||||||
|
|
||||||
|
// Swap endian
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate initial state values
|
||||||
|
var X = this._X = [
|
||||||
|
K[0], (K[3] << 16) | (K[2] >>> 16),
|
||||||
|
K[1], (K[0] << 16) | (K[3] >>> 16),
|
||||||
|
K[2], (K[1] << 16) | (K[0] >>> 16),
|
||||||
|
K[3], (K[2] << 16) | (K[1] >>> 16)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Generate initial counter values
|
||||||
|
var C = this._C = [
|
||||||
|
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
|
||||||
|
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
|
||||||
|
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
|
||||||
|
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Carry bit
|
||||||
|
this._b = 0;
|
||||||
|
|
||||||
|
// Iterate the system four times
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
nextState.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modify the counters
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
C[i] ^= X[(i + 4) & 7];
|
||||||
|
}
|
||||||
|
|
||||||
|
// IV setup
|
||||||
|
if (iv) {
|
||||||
|
// Shortcuts
|
||||||
|
var IV = iv.words;
|
||||||
|
var IV_0 = IV[0];
|
||||||
|
var IV_1 = IV[1];
|
||||||
|
|
||||||
|
// Generate four subvectors
|
||||||
|
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
|
||||||
|
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
|
||||||
|
var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
|
||||||
|
var i3 = (i2 << 16) | (i0 & 0x0000ffff);
|
||||||
|
|
||||||
|
// Modify counter values
|
||||||
|
C[0] ^= i0;
|
||||||
|
C[1] ^= i1;
|
||||||
|
C[2] ^= i2;
|
||||||
|
C[3] ^= i3;
|
||||||
|
C[4] ^= i0;
|
||||||
|
C[5] ^= i1;
|
||||||
|
C[6] ^= i2;
|
||||||
|
C[7] ^= i3;
|
||||||
|
|
||||||
|
// Iterate the system four times
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
nextState.call(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Shortcut
|
||||||
|
var X = this._X;
|
||||||
|
|
||||||
|
// Iterate the system
|
||||||
|
nextState.call(this);
|
||||||
|
|
||||||
|
// Generate four keystream words
|
||||||
|
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
|
||||||
|
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
|
||||||
|
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
|
||||||
|
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
|
||||||
|
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
// Swap endian
|
||||||
|
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
M[offset + i] ^= S[i];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
blockSize: 128/32,
|
||||||
|
|
||||||
|
ivSize: 64/32
|
||||||
|
});
|
||||||
|
|
||||||
|
function nextState() {
|
||||||
|
// Shortcuts
|
||||||
|
var X = this._X;
|
||||||
|
var C = this._C;
|
||||||
|
|
||||||
|
// Save old counter values
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
C_[i] = C[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate new counter values
|
||||||
|
C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
|
||||||
|
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
|
||||||
|
|
||||||
|
// Calculate the g-values
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
var gx = X[i] + C[i];
|
||||||
|
|
||||||
|
// Construct high and low argument for squaring
|
||||||
|
var ga = gx & 0xffff;
|
||||||
|
var gb = gx >>> 16;
|
||||||
|
|
||||||
|
// Calculate high and low result of squaring
|
||||||
|
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
|
||||||
|
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
|
||||||
|
|
||||||
|
// High XOR low
|
||||||
|
G[i] = gh ^ gl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate new state values
|
||||||
|
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
|
||||||
|
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
|
||||||
|
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
|
||||||
|
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
|
||||||
|
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
|
||||||
|
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
|
||||||
|
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
|
||||||
|
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.Rabbit = StreamCipher._createHelper(Rabbit);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// Shortcuts
|
||||||
|
var C = CryptoJS;
|
||||||
|
var C_lib = C.lib;
|
||||||
|
var StreamCipher = C_lib.StreamCipher;
|
||||||
|
var C_algo = C.algo;
|
||||||
|
|
||||||
|
// Reusable objects
|
||||||
|
var S = [];
|
||||||
|
var C_ = [];
|
||||||
|
var G = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rabbit stream cipher algorithm.
|
||||||
|
*
|
||||||
|
* This is a legacy version that neglected to convert the key to little-endian.
|
||||||
|
* This error doesn't affect the cipher's security,
|
||||||
|
* but it does affect its compatibility with other implementations.
|
||||||
|
*/
|
||||||
|
var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
|
||||||
|
_doReset: function () {
|
||||||
|
// Shortcuts
|
||||||
|
var K = this._key.words;
|
||||||
|
var iv = this.cfg.iv;
|
||||||
|
|
||||||
|
// Generate initial state values
|
||||||
|
var X = this._X = [
|
||||||
|
K[0], (K[3] << 16) | (K[2] >>> 16),
|
||||||
|
K[1], (K[0] << 16) | (K[3] >>> 16),
|
||||||
|
K[2], (K[1] << 16) | (K[0] >>> 16),
|
||||||
|
K[3], (K[2] << 16) | (K[1] >>> 16)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Generate initial counter values
|
||||||
|
var C = this._C = [
|
||||||
|
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
|
||||||
|
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
|
||||||
|
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
|
||||||
|
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Carry bit
|
||||||
|
this._b = 0;
|
||||||
|
|
||||||
|
// Iterate the system four times
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
nextState.call(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modify the counters
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
C[i] ^= X[(i + 4) & 7];
|
||||||
|
}
|
||||||
|
|
||||||
|
// IV setup
|
||||||
|
if (iv) {
|
||||||
|
// Shortcuts
|
||||||
|
var IV = iv.words;
|
||||||
|
var IV_0 = IV[0];
|
||||||
|
var IV_1 = IV[1];
|
||||||
|
|
||||||
|
// Generate four subvectors
|
||||||
|
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
|
||||||
|
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
|
||||||
|
var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
|
||||||
|
var i3 = (i2 << 16) | (i0 & 0x0000ffff);
|
||||||
|
|
||||||
|
// Modify counter values
|
||||||
|
C[0] ^= i0;
|
||||||
|
C[1] ^= i1;
|
||||||
|
C[2] ^= i2;
|
||||||
|
C[3] ^= i3;
|
||||||
|
C[4] ^= i0;
|
||||||
|
C[5] ^= i1;
|
||||||
|
C[6] ^= i2;
|
||||||
|
C[7] ^= i3;
|
||||||
|
|
||||||
|
// Iterate the system four times
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
nextState.call(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_doProcessBlock: function (M, offset) {
|
||||||
|
// Shortcut
|
||||||
|
var X = this._X;
|
||||||
|
|
||||||
|
// Iterate the system
|
||||||
|
nextState.call(this);
|
||||||
|
|
||||||
|
// Generate four keystream words
|
||||||
|
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
|
||||||
|
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
|
||||||
|
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
|
||||||
|
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
|
||||||
|
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
|
// Swap endian
|
||||||
|
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
|
||||||
|
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
|
||||||
|
|
||||||
|
// Encrypt
|
||||||
|
M[offset + i] ^= S[i];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
blockSize: 128/32,
|
||||||
|
|
||||||
|
ivSize: 64/32
|
||||||
|
});
|
||||||
|
|
||||||
|
function nextState() {
|
||||||
|
// Shortcuts
|
||||||
|
var X = this._X;
|
||||||
|
var C = this._C;
|
||||||
|
|
||||||
|
// Save old counter values
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
C_[i] = C[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate new counter values
|
||||||
|
C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
|
||||||
|
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
|
||||||
|
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
|
||||||
|
|
||||||
|
// Calculate the g-values
|
||||||
|
for (var i = 0; i < 8; i++) {
|
||||||
|
var gx = X[i] + C[i];
|
||||||
|
|
||||||
|
// Construct high and low argument for squaring
|
||||||
|
var ga = gx & 0xffff;
|
||||||
|
var gb = gx >>> 16;
|
||||||
|
|
||||||
|
// Calculate high and low result of squaring
|
||||||
|
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
|
||||||
|
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
|
||||||
|
|
||||||
|
// High XOR low
|
||||||
|
G[i] = gh ^ gl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate new state values
|
||||||
|
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
|
||||||
|
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
|
||||||
|
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
|
||||||
|
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
|
||||||
|
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
|
||||||
|
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
|
||||||
|
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
|
||||||
|
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shortcut functions to the cipher's object interface.
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
*
|
||||||
|
* var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
|
||||||
|
* var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
|
||||||
|
*/
|
||||||
|
C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
return CryptoJS;
|
||||||
|
|
||||||
|
}));
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
var rule={
|
||||||
|
title:'厂长资源',
|
||||||
|
// host:'https://czspp.com',
|
||||||
|
host:'https://www.czzy.site',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});HOST = jsp.pdfh(html,"h3&&a&&href")',
|
||||||
|
url:'/fyclassfyfilter',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}{{fl.class}}{{fl.area}}/page/fypage',
|
||||||
|
filter: {
|
||||||
|
"movie_bt":[
|
||||||
|
{"key":"area","name":"分类","value":[{"v":"","n":"全部"},{"v":"/movie_bt_series/zhanchangtuijian","n":"站长推荐"},{"v":"/movie_bt_series/dyy","n":"电影"},{"v":"/movie_bt_series/dianshiju","n":"电视剧"},{"v":"/movie_bt_series/dohua","n":"动画"},{"v":"/movie_bt_series/guochanju","n":"国产剧"},{"v":"/movie_bt_series/mj","n":"美剧"},{"v":"/movie_bt_series/rj","n":"日剧"},{"v":"/movie_bt_series/hj","n":"韩剧"},{"v":"/movie_bt_series/hwj","n":"海外剧(其他)"},{"v":"/movie_bt_series/huayudianying","n":"华语电影"},{"v":"/movie_bt_series/meiguodianying","n":"欧美电影"},{"v":"/movie_bt_series/ribendianying","n":"日本电影"},{"v":"/movie_bt_series/hanguodianying","n":"韩国电影"},{"v":"/movie_bt_series/yingguodianying","n":"英国电影"},{"v":"/movie_bt_series/faguodianying","n":"法国电影"},{"v":"/movie_bt_series/yindudianying","n":"印度电影"},{"v":"/movie_bt_series/eluosidianying","n":"俄罗斯电影"},{"v":"/movie_bt_series/jianadadianying","n":"加拿大电影"},{"v":"/movie_bt_series/huiyuanzhuanqu","n":"会员专区"}]},
|
||||||
|
{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"传记","v":"/movie_bt_tags/chuanji"},{"n":"儿童","v":"/movie_bt_tags/etet"},{"n":"冒险","v":"/movie_bt_tags/maoxian"},{"n":"剧情","v":"/movie_bt_tags/juqing"},{"n":"动作","v":"/movie_bt_tags/dozuo"},{"n":"动漫","v":"/movie_bt_tags/doman"},{"n":"动画","v":"/movie_bt_tags/dhh"},{"n":"历史","v":"/movie_bt_tags/lishi"},{"n":"古装","v":"/movie_bt_tags/guzhuang"},{"n":"同性","v":"/movie_bt_tags/tongxing"},{"n":"喜剧","v":"/movie_bt_tags/xiju"},{"n":"奇幻","v":"/movie_bt_tags/qihuan"},{"n":"家庭","v":"/movie_bt_tags/jiating"},{"n":"恐怖","v":"/movie_bt_tags/kubu"},{"n":"悬疑","v":"/movie_bt_tags/xuanyi"},{"n":"情色","v":"/movie_bt_tags/qingse"},{"n":"惊悚","v":"/movie_bt_tags/kingsong"},{"n":"战争","v":"/movie_bt_tags/zhanzhen"},{"n":"歌舞","v":"/movie_bt_tags/gw"},{"n":"武侠","v":"/movie_bt_tags/wuxia"},{"n":"灾难","v":"/movie_bt_tags/zainan"},{"n":"爱情","v":"/movie_bt_tags/aiqing"},{"n":"犯罪","v":"/movie_bt_tags/fanzui"},{"n":"短片","v":"/movie_bt_tags/dp"},{"n":"科幻","v":"/movie_bt_tags/kh"},{"n":"纪录片","v":"/movie_bt_tags/jlpp"},{"n":"西部","v":"/movie_bt_tags/xb"},{"n":"运动","v":"/movie_bt_tags/yd"},{"n":"音乐","v":"/movie_bt_tags/yy"}]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
searchUrl:'/page/fypage?s=**',
|
||||||
|
searchable:2,
|
||||||
|
filterable:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
'Cookie': 'esc_search_captcha=1'
|
||||||
|
},
|
||||||
|
class_name:'全部&豆瓣电影Top250&高分影视&最新电影&热映中&站长推荐&电影&电视剧&动画&国产剧&日剧&韩剧&美剧&海外剧&俄罗斯电影&加拿大电影&华语电影&印度电影&日本电影&欧美电影&法国电影&英国电影&韩国电影&纪录片',
|
||||||
|
class_url:'movie_bt&dbtop250&gaofenyingshi&zuixindianying&reyingzhong&/movie_bt_series/zhanchangtuijian&/movie_bt_series/dyy&/movie_bt_series/dianshiju&/movie_bt_series/dohua&/movie_bt_series/guochanju&/movie_bt_series/rj&/movie_bt_series/hj&/movie_bt_series/mj&/movie_bt_series/hwj&/movie_bt_series/eluosidianying&/movie_bt_series/jianadadianying&/movie_bt_series/huayudianying&/movie_bt_series/yindudianying&/movie_bt_series/ribendianying&/movie_bt_series/meiguodianying&/movie_bt_series/faguodianying&/movie_bt_series/yingguodianying&/movie_bt_series/hanguodianying&movie_bt//movie_bt_tags/jlpp',
|
||||||
|
play_parse:true,
|
||||||
|
|
||||||
|
// lazy代码:源于海阔香雅情大佬 / 小程序:香情影视 https://pastebin.com/L4tHdvFn
|
||||||
|
lazy:`js:
|
||||||
|
pdfh = jsp.pdfh;
|
||||||
|
var html = request(input);
|
||||||
|
var ohtml = pdfh(html, '.videoplay&&Html');
|
||||||
|
var url = pdfh(ohtml, "body&&iframe&&src");
|
||||||
|
if (/Cloud/.test(url)) {
|
||||||
|
var ifrwy = request(url);
|
||||||
|
let code = ifrwy.match(/var url = '(.*?)'/)[1].split('').reverse().join('');
|
||||||
|
let temp = '';
|
||||||
|
for (let i = 0x0; i < code.length; i = i + 0x2) {
|
||||||
|
temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10))
|
||||||
|
}
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7),
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/decrypted/.test(ohtml)) {
|
||||||
|
var phtml = pdfh(ohtml, "body&&script:not([src])&&Html");
|
||||||
|
eval(getCryptoJS());
|
||||||
|
var scrpt = phtml.match(/var.*?\\)\\);/g)[0];
|
||||||
|
var data = [];
|
||||||
|
eval(scrpt.replace(/md5/g, 'CryptoJS').replace('eval', 'data = '));
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: data.match(/url:.*?[\\'\\"](.*?)[\\'\\"]/)[1],
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
input
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
推荐:'.bt_img;ul&&li;*;*;*;*',
|
||||||
|
double:true,
|
||||||
|
一级:'.bt_img&&ul&&li;h3.dytit&&Text;img.lazy&&data-original;.jidi&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title": "h1&&Text;.moviedteail_list li&&a&&Text",
|
||||||
|
"img": "div.dyimg img&&src",
|
||||||
|
"desc": ".moviedteail_list li:eq(3) a&&Text;.moviedteail_list li:eq(2) a&&Text;.moviedteail_list li:eq(1) a&&Text;.moviedteail_list li:eq(7)&&Text;.moviedteail_list li:eq(5)&&Text",
|
||||||
|
"content": ".yp_context&&Text",
|
||||||
|
"tabs": ".mi_paly_box span",
|
||||||
|
"lists": ".paly_list_btn:eq(#id) a"
|
||||||
|
},
|
||||||
|
搜索:'.search_list&&ul&&li;*;*;*;*',
|
||||||
|
// 预处理:'rule_fetch_params.headers.Cookie="68148872828e9f4d64e7a296f6c6b6d7=5429da9a54375db451f7f9e4f16ce0ea;esc_search_captcha=1";let new_host="https://czspp.com";let new_html=request(new_host);if(/正在进行人机识别/.test(new_html)){let new_src=pd(new_html,"script&&src",new_host);log(new_src);let hhtml=request(new_src,{withHeaders:true});let json=JSON.parse(hhtml);let html=json.body;let key=html.match(new RegExp(\'var key="(.*?)"\'))[1];let avalue=html.match(new RegExp(\'value="(.*?)"\'))[1];let c="";for(let i=0;i<avalue.length;i++){let a=avalue[i];let b=a.charCodeAt();c+=b}let value=md5(c);log(value);let yz_url="https://czspp.com/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_ip.php?type=96c4e20a0e951f471d32dae103e83881&key="+key+"&value="+value;log(yz_url);hhtml=request(yz_url,{withHeaders:true});json=JSON.parse(hhtml);let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");let cookie=setCk?json[setCk].split(";")[0]:"";log("cookie:"+cookie);rule_fetch_params.headers.Cookie=cookie;setItem(RULE_CK,cookie)}',
|
||||||
|
}
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
var lists = `js:
|
||||||
|
log(TABS);
|
||||||
|
let d = [];
|
||||||
|
pdfh = jsp.pdfh;
|
||||||
|
pdfa = jsp.pdfa;
|
||||||
|
if (typeof play_url === "undefined") {
|
||||||
|
var play_url = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLists(html) {
|
||||||
|
let src = pdfh(html, ".wp-playlist-script&&Html");
|
||||||
|
src = JSON.parse(src).tracks;
|
||||||
|
let list1 = [];
|
||||||
|
let list2 = [];
|
||||||
|
let url1 = "";
|
||||||
|
let url2 = "";
|
||||||
|
src.forEach(function(it) {
|
||||||
|
let src0 = it.src0;
|
||||||
|
let src1 = it.src1;
|
||||||
|
let title = it.caption;
|
||||||
|
url1 = "https://v.ddys.pro" + src0;
|
||||||
|
url2 = "https://ddys.pro/getvddr2/video?id=" + src1 + "&type=mix";
|
||||||
|
let zm = "https://ddys.pro/subddr/" + it.subsrc;
|
||||||
|
list1.push({
|
||||||
|
title: title,
|
||||||
|
url: url1,
|
||||||
|
desc: zm
|
||||||
|
});
|
||||||
|
list2.push({
|
||||||
|
title: title,
|
||||||
|
url: url2,
|
||||||
|
desc: zm
|
||||||
|
})
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
list1: list1,
|
||||||
|
list2: list2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = getLists(html);
|
||||||
|
var list1 = data.list1;
|
||||||
|
var list2 = data.list2;
|
||||||
|
let nums = pdfa(html, "body&&.post-page-numbers");
|
||||||
|
nums.forEach(function(it) {
|
||||||
|
let num = pdfh(it, "body&&Text");
|
||||||
|
log(num);
|
||||||
|
let nurl = input + num + "/";
|
||||||
|
if (num == 1) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log(nurl);
|
||||||
|
let html = request(nurl);
|
||||||
|
let data = getLists(html);
|
||||||
|
list1 = list1.concat(data.list1);
|
||||||
|
list2 = list2.concat(data.list2)
|
||||||
|
});
|
||||||
|
list1 = list1.map(function(item) {
|
||||||
|
return item.title + "$" + play_url + urlencode(item.url + "|" + input + "|" + item.desc)
|
||||||
|
});
|
||||||
|
list2 = list2.map(function(item) {
|
||||||
|
return item.title + "$" + play_url + urlencode(item.url + "|" + input + "|" + item.desc)
|
||||||
|
});
|
||||||
|
LISTS = [list1, list2];
|
||||||
|
`;
|
||||||
|
|
||||||
|
var lazy = `js:
|
||||||
|
let purl = input.split("|")[0];
|
||||||
|
let referer = input.split("|")[1];
|
||||||
|
let zm = input.split("|")[2];
|
||||||
|
print("purl:" + purl);
|
||||||
|
print("referer:" + referer);
|
||||||
|
print("zm:" + zm);
|
||||||
|
if (/getvddr/.test(purl)) {
|
||||||
|
let html = request(purl, {
|
||||||
|
headers: {
|
||||||
|
Referer: HOST,
|
||||||
|
"User-Agent": MOBILE_UA
|
||||||
|
}
|
||||||
|
});
|
||||||
|
print(html);
|
||||||
|
try {
|
||||||
|
input = {jx:0,url:JSON.parse(html).url,parse:0} || {}
|
||||||
|
} catch (e) {
|
||||||
|
input = purl
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: purl,
|
||||||
|
parse: 0,
|
||||||
|
header: JSON.stringify({
|
||||||
|
'user-agent': MOBILE_UA,
|
||||||
|
'referer': HOST
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
// 网址发布页 https://ddys.site
|
||||||
|
// 网址发布页 https://ddys.wiki
|
||||||
|
var rule={
|
||||||
|
title:'ddys',
|
||||||
|
// host:'https://ddys.wiki',
|
||||||
|
// hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":MOBILE_UA}});HOST = jsp.pdfh(html,"a:eq(1)&&href")',
|
||||||
|
host:'https://ddys.pro',
|
||||||
|
// host:'https://ddys.mov',
|
||||||
|
url:'/fyclass/page/fypage/',
|
||||||
|
searchUrl:'/?s=**&post_type=post',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA',
|
||||||
|
},
|
||||||
|
class_parse:'#primary-menu li.menu-item;a&&Text;a&&href;\.pro/(.*)',
|
||||||
|
cate_exclude:'站长|^其他$|关于|^电影$|^剧集$|^类型$',
|
||||||
|
play_parse:true,
|
||||||
|
// lazy:'js:let purl=input.split("|")[0];let referer=input.split("|")[1];let zm=input.split("|")[2];print("purl:"+purl);print("referer:"+referer);print("zm:"+zm);let myua="okhttp/3.15";if(/ddrkey/.test(purl)){let ret=request(purl,{Referer:referer,withHeaders:true,"User-Agent":myua});log(ret);input=purl}else{let html=request(purl,{headers:{Referer:referer,"User-Agent":myua}});print(html);try{input=JSON.parse(html).url||{}}catch(e){input=purl}}',
|
||||||
|
lazy:lazy,
|
||||||
|
limit:6,
|
||||||
|
推荐:'*',
|
||||||
|
double:true, // 推荐内容是否双层定位
|
||||||
|
一级:'.post-box-list&&article;a:eq(-1)&&Text;.post-box-image&&style;a:eq(0)&&Text;a:eq(-1)&&href',
|
||||||
|
二级:{
|
||||||
|
"title":".post-title&&Text;.cat-links&&Text",
|
||||||
|
"img":".doulist-item&&img&&data-cfsrc",
|
||||||
|
"desc":".published&&Text",
|
||||||
|
"content":".abstract&&Text",
|
||||||
|
// "tabs":"js:TABS=['国内','海外(貌似不能播放)']",
|
||||||
|
"tabs":"js:TABS=['👑公众号:多多影音👑(Exo)','国内2']",
|
||||||
|
// "lists":"js:log(TABS);let d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;if(typeof play_url===\"undefined\"){var play_url=\"\"}function getLists(html){let src=pdfh(html,\".wp-playlist-script&&Html\");src=JSON.parse(src).tracks;let list1=[];let list2=[];src.forEach(function(it){let src0=it.src0;let src1=it.src1;let src2=it.src2;let title=it.caption;let url1=\"https://ddys.tv/getvddr/video?id=\"+src1+\"&dim=1080P+&type=mix\";let url2=\"https://w.ddys.tv\"+src0+\"?ddrkey=\"+src2;let zm=\"https://ddys.tv/subddr/\"+it.subsrc;list1.push({title:title,url:url1,desc:zm});list2.push({title:title,url:url2,desc:zm})});return{list1:list1,list2:list2}}var data=getLists(html);var list1=data.list1;var list2=data.list2;let nums=pdfa(html,\"body&&.post-page-numbers\");nums.forEach(function(it){let num=pdfh(it,\"body&&Text\");log(num);let nurl=input+num+\"/\";if(num==1){return}log(nurl);let html=request(nurl);let data=getLists(html);list1=list1.concat(data.list1);list2=list2.concat(data.list2)});list1=list1.map(function(item){return item.title+\"$\"+play_url+urlencode(item.url+\"|\"+input+\"|\"+item.desc)});list2=list2.map(function(item){return item.title+\"$\"+play_url+urlencode(item.url+\"|\"+input+\"|\"+item.desc)});LISTS=[list1,list2];",
|
||||||
|
// lists:'js:log(TABS);let d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;if(typeof play_url==="undefined"){var play_url=""}function getLists(html){let src=pdfh(html,".wp-playlist-script&&Html");src=JSON.parse(src).tracks;let list1=[];let list2=[];src.forEach(function(it){let src0=it.src0;let src1=it.src1;let src2=it.src2;let title=it.caption;let url1="https://ddys.pro/getvddr/video?id="+src1+"&dim=1080P+&type=mix";let url2="https://w.ddys.pro"+src0+"?ddrkey="+src2;let zm="https://ddys.pro/subddr/"+it.subsrc;list1.push({title:title,url:url1,desc:zm});list2.push({title:title,url:url2,desc:zm})});return{list1:list1,list2:list2}}var data=getLists(html);var list1=data.list1;var list2=data.list2;let nums=pdfa(html,"body&&.post-page-numbers");nums.forEach(function(it){let num=pdfh(it,"body&&Text");log(num);let nurl=input+num+"/";if(num==1){return}log(nurl);let html=request(nurl);let data=getLists(html);list1=list1.concat(data.list1);list2=list2.concat(data.list2)});list1=list1.map(function(item){return item.title+"$"+play_url+urlencode(item.url+"|"+input+"|"+item.desc)});list2=list2.map(function(item){return item.title+"$"+play_url+urlencode(item.url+"|"+input+"|"+item.desc)});LISTS=[list1,list2];',
|
||||||
|
"lists":lists
|
||||||
|
},
|
||||||
|
搜索:'#main&&article;.post-title&&Text;;.published&&Text;a&&href'
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'drpy',
|
||||||
|
host:'https://frodo.douban.com',
|
||||||
|
apidoc:'https://www.doubanapi.com',
|
||||||
|
homeUrl:'',
|
||||||
|
searchUrl:'',
|
||||||
|
searchable:1,
|
||||||
|
quickSearch:1,
|
||||||
|
filterable:1,
|
||||||
|
// 分类链接fypage参数支持1个()表达式
|
||||||
|
url:'/?pg=fypage&class=fyclass&douban=$douban',
|
||||||
|
filter_url:'fl={{fl}}',
|
||||||
|
图片来源:'@Referer=https://api.douban.com/@User-Agent=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/113.0.0.0%20Safari/537.36',
|
||||||
|
headers:{
|
||||||
|
"Host": "frodo.douban.com",
|
||||||
|
// "Host": "api.douban.com",
|
||||||
|
"Connection": "Keep-Alive",
|
||||||
|
"Referer": "https://servicewechat.com/wx2f9b06c1de1ccfca/84/page-frame.html",
|
||||||
|
// "content-type": "application/json",
|
||||||
|
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat"
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'热门电影&热播剧集&热播综艺&电影筛选&电视筛选&电影榜单&电视榜单',
|
||||||
|
class_url:'hot_gaia&tv_hot&show_hot&movie&tv&rank_list_movie&rank_list_tv',
|
||||||
|
filter:{'interests': [{'key': 'status', 'name': '状态', 'value': [{'n': '想看', 'v': 'mark'}, {'n': '在看', 'v': 'doing'}, {'n': '看过', 'v': 'done'}]}, {'key': 'subtype_tag', 'name': '形式', 'value': [{'n': '全部', 'v': ''}, {'n': '电影', 'v': 'movie'}, {'n': '电视', 'v': 'tv'}]}, {'key': 'year_tag', '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': '2010年代', 'v': '2010年代'}, {'n': '2000年代', 'v': '2000年代'}, {'n': '90年代', 'v': '90年代'}, {'n': '80年代', 'v': '80年代'}, {'n': '70年代', 'v': '70年代'}, {'n': '60年代', 'v': '60年代'}, {'n': '更早', 'v': '更早'}]}], 'hot_gaia': [{'key': 'sort', 'name': '排序', 'value': [{'n': '热度', 'v': 'recommend'}, {'n': '最新', 'v': 'time'}, {'n': '评分', 'v': 'rank'}]}, {'key': 'area', 'name': '地区', 'value': [{'n': '全部', 'v': '全部'}, {'n': '华语', 'v': '华语'}, {'n': '欧美', 'v': '欧美'}, {'n': '韩国', 'v': '韩国'}, {'n': '日本', 'v': '日本'}]}], 'tv_hot': [{'key': 'type', 'name': '分类', 'value': [{'n': '综合', 'v': 'tv_hot'}, {'n': '国产剧', 'v': 'tv_domestic'}, {'n': '欧美剧', 'v': 'tv_american'}, {'n': '日剧', 'v': 'tv_japanese'}, {'n': '韩剧', 'v': 'tv_korean'}, {'n': '动画', 'v': 'tv_animation'}]}], 'show_hot': [{'key': 'type', 'name': '分类', 'value': [{'n': '综合', 'v': 'show_hot'}, {'n': '国内', 'v': 'show_domestic'}, {'n': '国外', 'v': 'show_foreign'}]}], 'movie': [{'key': '类型', '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': '短片'}]}, {'key': '地区', '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': '丹麦'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '近期热度', 'v': 'T'}, {'n': '首映时间', 'v': 'R'}, {'n': '高分优先', 'v': 'S'}]}, {'key': '年代', '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': '2010年代', 'v': '2010年代'}, {'n': '2000年代', 'v': '2000年代'}, {'n': '90年代', 'v': '90年代'}, {'n': '80年代', 'v': '80年代'}, {'n': '70年代', 'v': '70年代'}, {'n': '60年代', 'v': '60年代'}, {'n': '更早', 'v': '更早'}]}], 'tv': [{'key': '类型', 'name': '类型', 'value': [{'n': '不限', 'v': ''}, {'n': '电视剧', 'v': '电视剧'}, {'n': '综艺', 'v': '综艺'}]}, {'key': '电视剧形式', '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': '音乐'}]}, {'key': '综艺形式', 'name': '综艺形式', 'value': [{'n': '不限', 'v': ''}, {'n': '真人秀', 'v': '真人秀'}, {'n': '脱口秀', 'v': '脱口秀'}, {'n': '音乐', 'v': '音乐'}, {'n': '歌舞', 'v': '歌舞'}]}, {'key': '地区', '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': '澳大利亚'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '近期热度', 'v': 'T'}, {'n': '首播时间', 'v': 'R'}, {'n': '高分优先', 'v': 'S'}]}, {'key': '年代', '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': '2010年代', 'v': '2010年代'}, {'n': '2000年代', 'v': '2000年代'}, {'n': '90年代', 'v': '90年代'}, {'n': '80年代', 'v': '80年代'}, {'n': '70年代', 'v': '70年代'}, {'n': '60年代', 'v': '60年代'}, {'n': '更早', 'v': '更早'}]}, {'key': '平台', 'name': '平台', 'value': [{'n': '全部', 'v': ''}, {'n': '腾讯视频', 'v': '腾讯视频'}, {'n': '爱奇艺', 'v': '爱奇艺'}, {'n': '优酷', 'v': '优酷'}, {'n': '湖南卫视', 'v': '湖南卫视'}, {'n': 'Netflix', 'v': 'Netflix'}, {'n': 'HBO', 'v': 'HBO'}, {'n': 'BBC', 'v': 'BBC'}, {'n': 'NHK', 'v': 'NHK'}, {'n': 'CBS', 'v': 'CBS'}, {'n': 'NBC', 'v': 'NBC'}, {'n': 'tvN', 'v': 'tvN'}]}], 'rank_list_movie': [{'key': '榜单', 'name': '榜单', 'value': [{'n': '实时热门电影', 'v': 'movie_real_time_hotest'}, {'n': '一周口碑电影榜', 'v': 'movie_weekly_best'}, {'n': '豆瓣电影Top250', 'v': 'movie_top250'}]}], 'rank_list_tv': [{'key': '榜单', 'name': '榜单', 'value': [{'n': '实时热门电视', 'v': 'tv_real_time_hotest'}, {'n': '华语口碑剧集榜', 'v': 'tv_chinese_best_weekly'}, {'n': '全球口碑剧集榜', 'v': 'tv_global_best_weekly'}, {'n': '国内口碑综艺榜', 'v': 'show_chinese_best_weekly'}, {'n': '国外口碑综艺榜', 'v': 'show_global_best_weekly'}]}]},
|
||||||
|
limit:20,
|
||||||
|
play_parse:false,
|
||||||
|
推荐:'',
|
||||||
|
推荐:'js:let d=[];let douban_api_host="http://api.douban.com/api/v2";let miniapp_apikey="0ac44ae016490db2204ce0a042db2916";const count=30;function miniapp_request(path,query){try{let url=douban_api_host+path;query.apikey=miniapp_apikey;fetch_params.headers=oheaders;url=buildUrl(url,query);let html=fetch(url,fetch_params);return JSON.parse(html)}catch(e){print("发生了错误:"+e.message);return{}}}function subject_real_time_hotest(){try{let res=miniapp_request("/subject_collection/subject_real_time_hotest/items",{});let lists=[];let arr=res.subject_collection_items||[];arr.forEach(function(item){if(item.type==="movie"||item.type==="tv"){let rating=item.rating?item.rating.value:"暂无评分";let honnor=(item.honor_infos||[]).map(function(it){return it.title}).join("|");lists.append({vod_id:"msearch:"+TYPE,vod_name:item.title||"",vod_pic:item.pic.normal,vod_remarks:rating+" "+honnor})}});return lists}catch(e){print("发生了错误:"+e.message);return[]}}VODS=subject_real_time_hotest();print(VODS);',
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
lazy:'',
|
||||||
|
// 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
一级:'',
|
||||||
|
一级:'js:let d=[];let douban=input.split("douban=")[1].split("&")[0];let douban_api_host="http://api.douban.com/api/v2";let miniapp_apikey="0ac44ae016490db2204ce0a042db2916";const count=30;function miniapp_request(path,query){try{let url=douban_api_host+path;query.apikey=miniapp_apikey;fetch_params.headers=oheaders;url=buildUrl(url,query);let html=fetch(url,fetch_params);if(/request_error/.test(html)){print(html)}return JSON.parse(html)}catch(e){print("发生了错误:"+e.message);return{}}}function cate_filter(d,douban){douban=douban||"";try{let res={};if(MY_CATE==="interests"){if(douban){let status=MY_FL.status||"mark";let subtype_tag=MY_FL.subtype_tag||"";let year_tag=MY_FL.year_tag||"全部";let path="/user/"+douban+"/interests";res=miniapp_request(path,{type:"movie",status:status,subtype_tag:subtype_tag,year_tag:year_tag,start:(MY_PAGE-1)*count,count:count})}else{return{}}}else if(MY_CATE==="hot_gaia"){let sort=MY_FL.sort||"recommend";let area=MY_FL.area||"全部";let path="/movie/"+MY_CATE;res=miniapp_request(path,{area:area,sort:sort,start:(MY_PAGE-1)*count,count:count})}else if(MY_CATE==="tv_hot"||MY_CATE==="show_hot"){let stype=MY_FL.type||MY_CATE;let path="/subject_collection/"+stype+"/items";res=miniapp_request(path,{start:(MY_PAGE-1)*count,count:count})}else if(MY_CATE.startsWith("rank_list")){let id=MY_CATE==="rank_list_movie"?"movie_real_time_hotest":"tv_real_time_hotest";id=MY_FL.榜单||id;let path="/subject_collection/"+id+"/items";res=miniapp_request(path,{start:(MY_PAGE-1)*count,count:count})}else{let path="/"+MY_CATE+"/recommend";let selected_categories;let tags;let sort;if(Object.keys(MY_FL).length>0){sort=MY_FL.sort||"T";tags=Object.values(MY_FL).join(",");if(MY_CATE==="movie"){selected_categories={"类型":MY_FL.类型||"","地区":MY_FL.地区||""}}else{selected_categories={"类型":MY_FL.类型||"","形式":MY_FL.类型?MY_FL.类型+"地区":"","地区":MY_FL.地区||""}}}else{sort="T";tags="";if(MY_CATE==="movie"){selected_categories={"类型":"","地区":""}}else{selected_categories={"类型":"","形式":"","地区":""}}}let params={tags:tags,sort:sort,refresh:0,selected_categories:stringify(selected_categories),start:(MY_PAGE-1)*count,count:count};res=miniapp_request(path,params)}let result={page:MY_PAGE,pagecount:Math.ceil(res.total/count),limit:count,total:res.total};let items=[];if(/^rank_list|tv_hot|show_hot/.test(MY_CATE)){items=res["subject_collection_items"]}else if(MY_CATE==="interests"){res["interests"].forEach(function(it){items.push(it.subject)})}else{items=res.items}let lists=[];items.forEach(function(item){if(item.type==="movie"||item.type==="tv"){let rating=item.rating?item.rating.value:"";let rat_str=rating||"暂无评分";let title=item.title;let honor=item.honor_infos||[];let honor_str=honor.map(function(it){return it.title}).join("|");let vod_obj={vod_name:title!=="未知电影"?title:"暂不支持展示",vod_pic:item.pic.normal,vod_remarks:rat_str+" "+honor_str};let vod_obj_d={url:item.type+"$"+item.id,title:title!=="未知电影"?title:"暂不支持展示",pic_url:item.pic.normal,desc:rat_str+" "+honor_str};lists.push(vod_obj);d.push(vod_obj_d)}});result.list=lists;return result}catch(e){print(e.message)}return{}}let res=cate_filter(d,douban);setResult2(res);',
|
||||||
|
二级:'',
|
||||||
|
搜索:'',
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,189 @@
|
|||||||
|
// drT.js
|
||||||
|
// 2022/09/30 write by hjdhnx
|
||||||
|
// Licensed under the MIT license.
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
var drT = {
|
||||||
|
name: "drT",
|
||||||
|
version: "1.0.0",
|
||||||
|
templateSettings: {
|
||||||
|
evaluate: /\{\{([\s\S]+?(\}?)+)\}\}/g,
|
||||||
|
interpolate: /\{\{([\s\S]+?)\}\}/g, // 变量渲染
|
||||||
|
encode: /\{\{@([\s\S]+?)\}\}/g, // 变量自动url编码
|
||||||
|
use: /\{\{#([\s\S]+?)\}\}/g,
|
||||||
|
useParams: /(^|[^\w$])def(?:\.|\[[\'\"])([\w$\.]+)(?:[\'\"]\])?\s*\:\s*([\w$\.]+|\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})/g,
|
||||||
|
define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
|
||||||
|
defineParams:/^\s*([\w$]+):([\s\S]+)/,
|
||||||
|
conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, // ? if ?? else if ?? else
|
||||||
|
iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
|
||||||
|
varname: "fl",
|
||||||
|
strip: true,
|
||||||
|
append: true,
|
||||||
|
selfcontained: false,
|
||||||
|
doNotSkipEncoded: false
|
||||||
|
},
|
||||||
|
template: undefined, //fn, compile template
|
||||||
|
compile: undefined, //fn, for express
|
||||||
|
log: true
|
||||||
|
}, _globals;
|
||||||
|
|
||||||
|
drT.encodeHTMLSource = function(doNotSkipEncoded) {
|
||||||
|
var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'", "/": "/" },
|
||||||
|
matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g;
|
||||||
|
return function(code) {
|
||||||
|
return code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
_globals = (function(){ return this || (0,eval)("this"); }());
|
||||||
|
|
||||||
|
/* istanbul ignore else */
|
||||||
|
if (typeof module !== "undefined" && module.exports) {
|
||||||
|
module.exports = drT;
|
||||||
|
} else if (typeof define === "function" && define.amd) {
|
||||||
|
define(function(){return drT;});
|
||||||
|
} else {
|
||||||
|
_globals.drT = drT;
|
||||||
|
}
|
||||||
|
|
||||||
|
var startend = {
|
||||||
|
append: { start: "'+(", end: ")+'", startencode: "'+encodeHTML(" },
|
||||||
|
split: { start: "';out+=(", end: ");out+='", startencode: "';out+=encodeHTML(" }
|
||||||
|
}, skip = /$^/;
|
||||||
|
|
||||||
|
function resolveDefs(c, block, def) {
|
||||||
|
return ((typeof block === "string") ? block : block.toString())
|
||||||
|
.replace(c.define || skip, function(m, code, assign, value) {
|
||||||
|
if (code.indexOf("def.") === 0) {
|
||||||
|
code = code.substring(4);
|
||||||
|
}
|
||||||
|
if (!(code in def)) {
|
||||||
|
if (assign === ":") {
|
||||||
|
if (c.defineParams) value.replace(c.defineParams, function(m, param, v) {
|
||||||
|
def[code] = {arg: param, text: v};
|
||||||
|
});
|
||||||
|
if (!(code in def)) def[code]= value;
|
||||||
|
} else {
|
||||||
|
new Function("def", "def['"+code+"']=" + value)(def);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
})
|
||||||
|
.replace(c.use || skip, function(m, code) {
|
||||||
|
if (c.useParams) code = code.replace(c.useParams, function(m, s, d, param) {
|
||||||
|
if (def[d] && def[d].arg && param) {
|
||||||
|
var rw = (d+":"+param).replace(/'|\\/g, "_");
|
||||||
|
def.__exp = def.__exp || {};
|
||||||
|
def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
|
||||||
|
return s + "def.__exp['"+rw+"']";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var v = new Function("def", "return " + code)(def);
|
||||||
|
return v ? resolveDefs(c, v, def) : v;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function unescape(code) {
|
||||||
|
return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " ");
|
||||||
|
}
|
||||||
|
|
||||||
|
drT.template = function(tmpl, c, def) {
|
||||||
|
c = c || drT.templateSettings;
|
||||||
|
var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, indv,
|
||||||
|
str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;
|
||||||
|
|
||||||
|
// console.log(str);
|
||||||
|
let beforeCode = '';
|
||||||
|
if(str.match(c.interpolate || skip)){
|
||||||
|
let inter_codes = str.match(c.interpolate || skip);
|
||||||
|
let inter_dict = {};
|
||||||
|
inter_codes.forEach(item=>{
|
||||||
|
item.replace(c.interpolate || skip,function (m,code) {
|
||||||
|
let varname = code.split('.')[0];
|
||||||
|
if(!inter_dict.hasOwnProperty(varname)){
|
||||||
|
let beginCode = `if(typeof(${varname})==='undefined'){${varname}={}}`;
|
||||||
|
inter_dict[varname] = beginCode;
|
||||||
|
}if(!inter_dict.hasOwnProperty(code)){
|
||||||
|
let beginCode = `if(typeof(${code})==='undefined'){${code}=''};`;
|
||||||
|
inter_dict[code] = beginCode;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
let beginCode = Object.values(inter_dict).join('\n');
|
||||||
|
// console.log(beginCode);
|
||||||
|
beforeCode += beginCode;
|
||||||
|
}
|
||||||
|
str = beforeCode+("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ")
|
||||||
|
.replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""): str)
|
||||||
|
.replace(/'|\\/g, "\\$&")
|
||||||
|
.replace(c.encode || skip, function(m, code) {
|
||||||
|
needhtmlencode = true;
|
||||||
|
return cse.startencode + unescape(code) + cse.end;
|
||||||
|
})
|
||||||
|
.replace(c.interpolate || skip, function(m, code) {
|
||||||
|
let varname = code.split('.')[0];
|
||||||
|
// console.log(varname === code);
|
||||||
|
// console.log(`varname:${varname},code:${code}`);
|
||||||
|
if(varname === code){
|
||||||
|
let res = cse.start + `JSON.stringify(${unescape(code)})` + cse.end;
|
||||||
|
// console.log(res);
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
return cse.start + unescape(code) + cse.end;
|
||||||
|
})
|
||||||
|
.replace(c.conditional || skip, function(m, elsecase, code) {
|
||||||
|
return elsecase ?
|
||||||
|
(code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='") :
|
||||||
|
(code ? "';if(" + unescape(code) + "){out+='" : "';}out+='");
|
||||||
|
})
|
||||||
|
.replace(c.iterate || skip, function(m, iterate, vname, iname) {
|
||||||
|
if (!iterate) return "';} } out+='";
|
||||||
|
sid+=1; indv=iname || "i"+sid; iterate=unescape(iterate);
|
||||||
|
return "';var arr"+sid+"="+iterate+";if(arr"+sid+"){var "+vname+","+indv+"=-1,l"+sid+"=arr"+sid+".length-1;while("+indv+"<l"+sid+"){"
|
||||||
|
+vname+"=arr"+sid+"["+indv+"+=1];out+='";
|
||||||
|
})
|
||||||
|
.replace(c.evaluate || skip, function(m, code) {
|
||||||
|
return "';" + unescape(code) + "out+='";
|
||||||
|
})
|
||||||
|
+ "';return out;")
|
||||||
|
.replace(/\n/g, "\\n").replace(/\t/g, '\\t').replace(/\r/g, "\\r")
|
||||||
|
.replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, "");
|
||||||
|
//.replace(/(\s|;|\}|^|\{)out\+=''\+/g,'$1out+=');
|
||||||
|
|
||||||
|
if (needhtmlencode) {
|
||||||
|
// console.log('需要编码');
|
||||||
|
// console.log(c.doNotSkipEncoded);
|
||||||
|
if (!c.selfcontained && _globals && !_globals._encodeHTML) _globals._encodeHTML = drT.encodeHTMLSource(c.doNotSkipEncoded);
|
||||||
|
str = "var encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : ("
|
||||||
|
+ drT.encodeHTMLSource.toString() + "(" + (c.doNotSkipEncoded || '') + "));"
|
||||||
|
+ str;
|
||||||
|
// console.log(str);
|
||||||
|
}else{
|
||||||
|
// console.log('不需要编码');
|
||||||
|
}
|
||||||
|
// console.log(c.varname);
|
||||||
|
// console.log(str);
|
||||||
|
try {
|
||||||
|
return new Function(c.varname, str);
|
||||||
|
} catch (e) {
|
||||||
|
/* istanbul ignore else */
|
||||||
|
// console.log(e.message);
|
||||||
|
if (typeof console !== "undefined") console.log("Could not create a template function: " + str);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
drT.compile = function(tmpl, def) {
|
||||||
|
return drT.template(tmpl, null, def);
|
||||||
|
};
|
||||||
|
drT.renderText = function (tmpl,dict,varname){
|
||||||
|
varname = varname||'';
|
||||||
|
if(varname){
|
||||||
|
drT.templateSettings.varname = varname;
|
||||||
|
}
|
||||||
|
dict = dict||{};
|
||||||
|
return drT.compile(tmpl)(dict);
|
||||||
|
};
|
||||||
|
}());
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import cheerio from"./cheerio.min.js";import"./crypto-js.js";import 模板 from"./模板.js";import{gbkTool}from"./gbk.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log("预处理执行失败:"+e.message)}}}let rule={};let vercode=typeof pdfl==="function"?"drpy2.1":"drpy2";const VERSION=vercode+" 3.9.48beta16 20231011";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_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 RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://drpy.nokia.press:8028/ocr/drpy/text";if(typeof MY_URL==="undefined"){var MY_URL}var HOST;var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SPECIAL_URL=/^(ftp|magnet|thunder|ws):/;const NOADD_INDEX=/:eq|:lt|:gt|:first|:last|^body$|^#/;const URLJOIN_ATTR=/(url|src|href|-original|-src|-play|-url|style)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target}}if(!String.prototype.includes){String.prototype.includes=function(search,start){if(typeof start!=="number"){start=0}if(start+search.length>this.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k<len){if(o[k]===searchElement){return true}k++}return false}})}if(typeof String.prototype.startsWith!="function"){String.prototype.startsWith=function(prefix){return this.slice(0,prefix.length)===prefix}}if(typeof String.prototype.endsWith!="function"){String.prototype.endsWith=function(suffix){return this.indexOf(suffix,this.length-suffix.length)!==-1}}Object.prototype.myValues=function(obj){if(obj==null){throw new TypeError("Cannot convert undefined or null to object")}var res=[];for(var k in obj){if(obj.hasOwnProperty(k)){res.push(obj[k])}}return res};if(typeof Object.prototype.values!="function"){Object.prototype.values=function(obj){if(obj==null){throw new TypeError("Cannot convert undefined or null to object")}var res=[];for(var k in obj){if(obj.hasOwnProperty(k)){res.push(obj[k])}}return res}}if(typeof Array.prototype.join!="function"){Array.prototype.join=function(emoji){emoji=emoji||"";let self=this;let str="";let i=0;if(!Array.isArray(self)){throw String(self)+"is not Array"}if(self.length===0){return""}if(self.length===1){return String(self[0])}i=1;str=this[0];for(;i<self.length;i++){str+=String(emoji)+String(self[i])}return str}}String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};Array.prototype.append=Array.prototype.push;String.prototype.strip=String.prototype.trim;function 是否正版(vipUrl){let flag=new RegExp("qq.com|iqiyi.com|youku.com|mgtv.com|bilibili.com|sohu.com|ixigua.com|pptv.com|miguvideo.com|le.com|1905.com|fun.tv");return flag.test(vipUrl)}function urlDeal(vipUrl){if(!vipUrl){return""}if(!是否正版(vipUrl)){return vipUrl}if(!/miguvideo/.test(vipUrl)){vipUrl=vipUrl.split("#")[0].split("?")[0]}return vipUrl}function setResult(d){if(!Array.isArray(d)){return[]}VODS=[];d.forEach(function(it){let obj={vod_id:it.url||"",vod_name:it.title||"",vod_remarks:it.desc||"",vod_content:it.content||"",vod_pic:it.pic_url||it.img||""};let keys=Object.keys(it);if(keys.includes("tname")){obj.type_name=it.tname||""}if(keys.includes("tid")){obj.type_id=it.tid||""}if(keys.includes("year")){obj.vod_year=it.year||""}if(keys.includes("actor")){obj.vod_actor=it.actor||""}if(keys.includes("director")){obj.vod_director=it.director||""}if(keys.includes("area")){obj.vod_area=it.area||""}VODS.push(obj)});return VODS}function setResult2(res){VODS=res.list||[];return VODS}function setHomeResult(res){if(!res||typeof res!=="object"){return[]}return setResult(res.list)}function rc(js){if(js==="maomi_aes.js"){var a=CryptoJS.enc.Utf8.parse("625222f9149e961d");var t=CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");return{De:function(word){word=CryptoJS.enc.Hex.parse(word);return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word),a,{iv:t,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)},En:function(word){var Encrypted=CryptoJS.AES.encrypt(word,a,{iv:t,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return Encrypted.ciphertext.toString()}}}return{}}function maoss(jxurl,ref,key){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));eval(getCryptoJS());try{var getVideoInfo=function(text){return CryptoJS.AES.decrypt(text,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)};var token_key=key==undefined?"dvyYRQlnPRCMdQSe":key;if(ref){var html=request(jxurl,{headers:{Referer:ref}})}else{var html=request(jxurl)}if(html.indexOf("&btwaf=")!=-1){html=request(jxurl+"&btwaf"+html.match(/&btwaf(.*?)"/)[1],{headers:{Referer:ref}})}var token_iv=html.split('_token = "')[1].split('"')[0];var key=CryptoJS.enc.Utf8.parse(token_key);var iv=CryptoJS.enc.Utf8.parse(token_iv);eval(html.match(/var config = {[\s\S]*?}/)[0]+"");if(!config.url.startsWith("http")){config.url=CryptoJS.AES.decrypt(config.url,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)}return config.url}catch(e){return""}}function urlencode(str){str=(str+"").toString();return encodeURIComponent(str).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A").replace(/%20/g,"+")}function base64Encode(text){return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))}function base64Decode(text){return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text))}function md5(text){return CryptoJS.MD5(text).toString()}function encodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.encode(input)}return input}function decodeStr(input,encoding){encoding=encoding||"gbk";if(encoding.startsWith("gb")){const strTool=gbkTool();input=strTool.decode(input)}return input}function getCryptoJS(){return'console.log("CryptoJS已装载");'}const RSA={encode:function(data,key,option){if(typeof rsaEncrypt==="function"){if(!option||typeof option!=="object"){return rsaEncrypt(data,key)}else{return rsaEncrypt(data,key,option)}}else{return false}},decode:function(data,key,option){if(typeof rsaDecrypt==="function"){if(!option||typeof option!=="object"){return rsaDecrypt(data,key)}else{return rsaDecrypt(data,key,option)}}else{return false}}};function getProxyUrl(){if(typeof getProxy==="function"){return getProxy(true)}else{return"http://127.0.0.1:9978/proxy?do=js"}}function forceOrder(lists,key,option){let start=Math.floor(lists.length/2);let end=Math.min(lists.length-1,start+1);if(start>=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd:pd};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1];result=result.replace(/^['|"](.*)['|"]$/,"$1")}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)&&!SPECIAL_URL.test(ret)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();let result=defaultParser.pdfh(html,parse);return result},pdfa(html,parse){if(!html||!parse||!parse.trim()){return[]}parse=parse.trim();let result=defaultParser.pdfa(html,parse);print(`pdfa解析${parse}=>${result.length}`);return result},pd(html,parse,base_url){if(!html||!parse||!parse.trim()){return""}parse=parse.trim();base_url=base_url||MY_URL;return defaultParser.pd(html,parse,base_url)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{log("通过drpy_ocr验证码接口过验证...");let html=request(OCR_API,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true);code=html||""}catch(e){log(`OCR识别验证码发生错误:${e.message}`)}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cnt<OCR_RETRY){try{let yzm_url=`${host}/index.php/verify/index.html`;console.log(`验证码链接:${yzm_url}`);let hhtml=request(yzm_url,{withHeaders:true,toBase64:true},true);let json=JSON.parse(hhtml);if(!cookie){let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj.method="POST";return request(url,obj)}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){log("历史无cookie,新增过验证后的cookie");obj.headers["Cookie"]=cookie}else if(obj.headers&&obj.headers.cookie&&obj.headers.cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有小写过期的cookie,更新过验证后的cookie")}else if(obj.headers&&obj.headers.Cookie&&obj.headers.Cookie!==cookie){obj.headers["Cookie"]=cookie;log("历史有大写过期的cookie,更新过验证后的cookie")}else if(!obj.headers){obj.headers={Cookie:cookie};log("历史无headers,更新过验证后的含cookie的headers")}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.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]})}}if(homeObj.class_parse){let p=homeObj.class_parse.split(";");let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;MY_URL=rule.url;if(p.length>=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表双层定位处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表单层定位处理发生错误:"+e.message)}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd);if(searchObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(searchObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",searchObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",searchObj.pg)}}MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);list.forEach(it=>{let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(detailObj.二级访问前){try{print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);eval(detailObj.二级访问前.trim().replace("js:",""))}catch(e){print(`二级访问前执行代码出现错误:${e.message}`)}}if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""))}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print("格式化LISTS发生错误:"+e.message)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print("js执行lists: 发生错误:"+e.message)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i<playFrom.length;i++){let tab_name=playFrom[i];let tab_ext=p.tabs.split(";").length>1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let new_vod_list=[];let tt1=(new Date).getTime();if(typeof pdfl==="function"){new_vod_list=pdfl(html,p1,list_text,list_url,MY_URL)}else{let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}for(let i=0;i<vodList.length;i++){let it=vodList[i];new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))}}if(new_vod_list.length>0){new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${new_vod_list.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id||vod_id.includes("$")&&vod.vod_id!==vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);vod=vodDeal(vod);return JSON.stringify({list:[vod]})}function get_tab_index(vod){let obj={};vod.vod_play_from.split("$$$").forEach((it,index)=>{obj[it]=index});return obj}function vodDeal(vod){let vod_play_from=vod.vod_play_from.split("$$$");let vod_play_url=vod.vod_play_url.split("$$$");let tab_removed_list=vod_play_from;let tab_ordered_list=vod_play_from;let tab_renamed_list=vod_play_from;let tab_list=vod_play_from;let play_ordered_list=vod_play_url;if(rule.tab_remove&&rule.tab_remove.length>0||rule.tab_order&&rule.tab_order.length>0){let tab_index_dict=get_tab_index(vod);if(rule.tab_remove&&rule.tab_remove.length>0){tab_removed_list=vod_play_from.filter(it=>!rule.tab_remove.includes(it));tab_list=tab_removed_list}if(rule.tab_order&&rule.tab_order.length>0){let tab_order=rule.tab_order;tab_ordered_list=tab_removed_list.sort((a,b)=>{return(tab_order.indexOf(a)===-1?9999:tab_order.indexOf(a))-(tab_order.indexOf(b)===-1?9999:tab_order.indexOf(b))});tab_list=tab_ordered_list}play_ordered_list=tab_list.map(it=>vod_play_url[tab_index_dict[it]])}if(rule.tab_rename&&typeof rule.tab_rename==="object"&Object.keys(rule.tab_rename).length>0){tab_renamed_list=tab_list.map(it=>rule.tab_rename[it]||it);tab_list=tab_renamed_list}vod.vod_play_from=tab_list.join("$$$");vod.vod_play_url=play_ordered_list.join("$$$");return vod}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function proxyParse(proxyObj){var input=proxyObj.params;if(proxyObj.proxy_rule){log("准备执行本地代理规则:\n"+proxyObj.proxy_rule);try{eval(proxyObj.proxy_rule);if(input&&input!==proxyObj.params&&Array.isArray(input)&&input.length===3){return input}else{return[404,"text/plain","Not Found"]}}catch(e){return[500,"text/plain","代理规则错误:"+e.message]}}else{return[404,"text/plain","Not Found"]}}function isVideoParse(isVideoObj){var input=isVideoObj.url;if(!isVideoObj.t){let re_matcher=new RegExp(isVideoObj.isVideo,"i");return re_matcher.test(input)}else{try{eval(isVideoObj.isVideo);if(typeof input==="boolean"){return input}else{return false}}catch(e){log("执行嗅探规则发生错误:"+e.message);return false}}}function init(ext){console.log("init");try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}else{eval(ext.replace("var rule","rule"))}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");HOST=rule.host;if(rule.hostJs){console.log(`检测到hostJs,准备执行...`);try{eval(rule.hostJs);rule.host=HOST.rstrip("/")}catch(e){console.log(`执行${rule.hostJs}获取host发生错误:`+e.message)}}rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;rule.二级访问前=rule.二级访问前||"";if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}if(rule.searchUrl.includes("[")&&rule.searchUrl.includes("]")){let u1=rule.searchUrl.split("[")[0];let u2=rule.searchUrl.split("[")[1].split("]")[0];rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.searchUrl}else{rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl}rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.search_encoding=rule.搜索编码||rule.search_encoding||"";rule.图片来源=rule.图片来源||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};rule.proxy_rule=rule.hasOwnProperty("proxy_rule")?rule.proxy_rule:"";rule.sniffer=rule.hasOwnProperty("sniffer")?rule.sniffer:"";rule.sniffer=!!(rule.sniffer&&rule.sniffer!=="0"&&rule.sniffer!=="false");rule.isVideo=rule.hasOwnProperty("isVideo")?rule.isVideo:"";rule.tab_remove=rule.hasOwnProperty("tab_remove")?rule.tab_remove:[];rule.tab_order=rule.hasOwnProperty("tab_order")?rule.tab_order:[];rule.tab_rename=rule.hasOwnProperty("tab_rename")?rule.tab_rename:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}else if(k.toLowerCase()==="cookie"){let v=rule.headers[k];if(v&&v.startsWith("http")){console.log(v);try{v=fetch(v);console.log(v);rule.headers[k]=v}catch(e){console.log(`从${v}获取cookie发生错误:`+e.message)}}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);pre();init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";log("orId:"+orId);if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,"二级访问前":rule.二级访问前,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick,pg){if(rule.search_encoding){if(rule.search_encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.search_encoding)}}else if(rule.encoding&&rule.encoding.toLowerCase()!=="utf-8"){wd=encodeStr(wd,rule.encoding)}let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:pg||1,quick:quick};return searchParse(searchObj)}function proxy(params){if(rule.proxy_rule&&rule.proxy_rule.trim()){rule.proxy_rule=rule.proxy_rule.trim()}if(rule.proxy_rule.startsWith("js:")){rule.proxy_rule=rule.proxy_rule.replace("js:","")}let proxyObj={params:params,proxy_rule:rule.proxy_rule};return proxyParse(proxyObj)}function sniffer(){let enable_sniffer=rule.sniffer||false;if(enable_sniffer){log("开始执行辅助嗅探代理规则...")}return enable_sniffer}function isVideo(url){let t=0;let is_video;if(rule.isVideo&&rule.isVideo.trim()){is_video=rule.isVideo.trim()}if(is_video.startsWith("js:")){is_video=is_video.replace("js:","");t=1}let isVideoObj={url:url,isVideo:is_video,t:t};let result=isVideoParse(isVideoObj);if(result){log("成功执行辅助嗅探规则并检测到视频地址:\n"+rule.isVideo)}return result}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,proxy:proxy,sniffer:sniffer,isVideo:isVideo,DRPY:DRPY};
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'电影港[磁]',
|
||||||
|
编码:'gb2312',
|
||||||
|
搜索编码:'gb2312',
|
||||||
|
host:'https://www.dygang.tv',
|
||||||
|
homeUrl:'/',
|
||||||
|
url: '/fyclass/index_fypage.htm?',
|
||||||
|
filter_url:'{{fl.class}}',
|
||||||
|
filter:{
|
||||||
|
},
|
||||||
|
searchUrl: '/e/search/index123.php#tempid=1&tbname=article&keyborad=**&show=title%2Csmalltext&Submit=%CB%D1%CB%F7;post',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
'Referer': 'https://www.dygang.tv/'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'最新电影&经典高清&国配电影&经典港片&国剧&日韩剧&美剧&综艺&动漫&纪录片&高清原盘&4K高清区&3D电影&电影专题',
|
||||||
|
class_url:'ys&bd&gy&gp&dsj&dsj1&yx&zy&dmq&jilupian&1080p&4K&3d&dyzt',
|
||||||
|
play_parse:true,
|
||||||
|
play_json:[{
|
||||||
|
re:'*',
|
||||||
|
json:{
|
||||||
|
parse:0,
|
||||||
|
jx:0
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:'div#tl tr:has(>td>table.border1>tbody>tr>td>a>img);table.border1 img&&alt;table.border1 img&&src;table:eq(2)&&Text;a&&href',
|
||||||
|
一级:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
let d = [];
|
||||||
|
let turl = (MY_PAGE === 1)? '/' : '/index_'+ MY_PAGE + '.htm';
|
||||||
|
input = rule.homeUrl + MY_CATE + turl;
|
||||||
|
let html = request(input);
|
||||||
|
let list = pdfa(html, 'tr:has(>td>table.border1)');
|
||||||
|
list.forEach(it => {
|
||||||
|
let title = pdfh(it, 'table.border1 img&&alt');
|
||||||
|
if (title!==""){
|
||||||
|
d.push({
|
||||||
|
title: title,
|
||||||
|
desc: pdfh(it, 'table:eq(1)&&Text'),
|
||||||
|
pic_url: pd(it, 'table.border1 img&&src', HOST),
|
||||||
|
url: pdfh(it, 'a&&href')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:{
|
||||||
|
title:"div.title a&&Text",
|
||||||
|
img:"#dede_content img&&src",
|
||||||
|
desc:"#dede_content&&Text",
|
||||||
|
content:"#dede_content&&Text",
|
||||||
|
tabs:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
TABS=[]
|
||||||
|
let d = pdfa(html, '#dede_content table tbody tr');
|
||||||
|
let tabsa = [];
|
||||||
|
let tabsq = [];
|
||||||
|
let tabsm = false;
|
||||||
|
let tabse = false;
|
||||||
|
let tabm3u8 = [];
|
||||||
|
d.forEach(function(it) {
|
||||||
|
let burl = pd(it, 'a&&href',HOST);
|
||||||
|
if (burl.startsWith("https://www.aliyundrive.com/s/")){
|
||||||
|
tabsa.push("阿里雲盤");
|
||||||
|
}else if (burl.startsWith("https://pan.quark.cn/s/")){
|
||||||
|
tabsq.push("夸克網盤");
|
||||||
|
}else if (burl.startsWith("magnet")){
|
||||||
|
tabsm = true;
|
||||||
|
}else if (burl.startsWith("ed2k")){
|
||||||
|
tabse = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (false){
|
||||||
|
d = pdfa(html, 'div:has(>div#post_content) div.widget:has(>h3)');
|
||||||
|
d.forEach(function(it) {
|
||||||
|
tabm3u8.push(pdfh(it, 'h3&&Text'));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (tabsm === true){
|
||||||
|
TABS.push("磁力");
|
||||||
|
}
|
||||||
|
if (tabse === true){
|
||||||
|
TABS.push("電驢");
|
||||||
|
}
|
||||||
|
if (false && tabsa.length + tabsq.length > 1){
|
||||||
|
TABS.push("選擇右側綫路");
|
||||||
|
}
|
||||||
|
let tmpIndex;
|
||||||
|
tmpIndex=1;
|
||||||
|
tabsa.forEach(function(it){
|
||||||
|
TABS.push(it + tmpIndex);
|
||||||
|
tmpIndex = tmpIndex + 1;
|
||||||
|
});
|
||||||
|
tmpIndex=1;
|
||||||
|
tabsq.forEach(function(it){
|
||||||
|
TABS.push(it + tmpIndex);
|
||||||
|
tmpIndex = tmpIndex + 1;
|
||||||
|
});
|
||||||
|
tabm3u8.forEach(function(it){
|
||||||
|
TABS.push(it);
|
||||||
|
});
|
||||||
|
log('dygang TABS >>>>>>>>>>>>>>>>>>' + TABS);
|
||||||
|
`,
|
||||||
|
lists:`js:
|
||||||
|
log(TABS);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
LISTS = [];
|
||||||
|
let d = pdfa(html, '#dede_content table tbody tr');
|
||||||
|
let lista = [];
|
||||||
|
let listq = [];
|
||||||
|
let listm = [];
|
||||||
|
let liste = [];
|
||||||
|
let listm3u8 = {};
|
||||||
|
d.forEach(function(it){
|
||||||
|
let burl = pd(it, 'a&&href',HOST);
|
||||||
|
let title = pdfh(it, 'a&&Text');
|
||||||
|
log('dygang title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
|
||||||
|
log('dygang burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
|
||||||
|
let loopresult = title + '$' + burl;
|
||||||
|
if (burl.startsWith("https://www.aliyundrive.com/s/")){
|
||||||
|
if (true){
|
||||||
|
if (TABS.length==1){
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=ali&type=push&confirm=0&url=" + encodeURIComponent(burl);
|
||||||
|
}else{
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=ali&type=push&url=" + encodeURIComponent(burl);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
burl = 'push://' + burl;
|
||||||
|
}
|
||||||
|
loopresult = title + '$' + burl;
|
||||||
|
lista.push(loopresult);
|
||||||
|
}else if (burl.startsWith("https://pan.quark.cn/s/")){
|
||||||
|
if (true){
|
||||||
|
if (TABS.length==1){
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&confirm=0&url=" + encodeURIComponent(burl);
|
||||||
|
}else{
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&url=" + encodeURIComponent(burl);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
burl = 'push://' + burl;
|
||||||
|
}
|
||||||
|
loopresult = title + '$' + burl;
|
||||||
|
listq.push(loopresult);
|
||||||
|
}else if (burl.startsWith("magnet")){
|
||||||
|
listm.push(loopresult);
|
||||||
|
}else if (burl.startsWith("ed2k")){
|
||||||
|
liste.push(loopresult);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (listm.length>0){
|
||||||
|
LISTS.push(listm);
|
||||||
|
}
|
||||||
|
if (liste.length>0){
|
||||||
|
LISTS.push(liste);
|
||||||
|
}
|
||||||
|
lista.forEach(function(it){
|
||||||
|
LISTS.push([it]);
|
||||||
|
});
|
||||||
|
listq.forEach(function(it){
|
||||||
|
LISTS.push([it]);
|
||||||
|
});
|
||||||
|
for ( const key in listm3u8 ){
|
||||||
|
if (listm3u8.hasOwnProperty(key)){
|
||||||
|
LISTS.push(listm3u8[key]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
`,
|
||||||
|
|
||||||
|
},
|
||||||
|
搜索:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
let params = 'tempid=1&tbname=article&keyboard=' + KEY + '&show=title%2Csmalltext&Submit=%CB%D1%CB%F7';
|
||||||
|
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||||
|
let postData = {
|
||||||
|
method: "POST",
|
||||||
|
body: params
|
||||||
|
};
|
||||||
|
delete(_fetch_params.headers['Content-Type']);
|
||||||
|
Object.assign(_fetch_params, postData);
|
||||||
|
log("dygang search postData>>>>>>>>>>>>>>>" + JSON.stringify(_fetch_params));
|
||||||
|
let search_html = request( HOST + '/e/search/index123.php', _fetch_params, true);
|
||||||
|
//log("dygang search result>>>>>>>>>>>>>>>" + search_html);
|
||||||
|
let d=[];
|
||||||
|
let dlist = pdfa(search_html, 'table.border1');
|
||||||
|
dlist.forEach(function(it){
|
||||||
|
let title = pdfh(it, 'img&&alt');
|
||||||
|
if (searchObj.quick === true){
|
||||||
|
if (false && title.includes(KEY)){
|
||||||
|
title = KEY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let img = pd(it, 'img&&src', HOST);
|
||||||
|
let content = pdfh(it, 'img&&alt');
|
||||||
|
let desc = pdfh(it, 'img&&alt');
|
||||||
|
let url = pd(it, 'a&&href', HOST);
|
||||||
|
d.push({
|
||||||
|
title:title,
|
||||||
|
img:img,
|
||||||
|
content:content,
|
||||||
|
desc:desc,
|
||||||
|
url:url
|
||||||
|
})
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
muban.首图2.二级.desc = '.data:eq(3)&&Text;;;.data:eq(1)&&Text;.data:eq(2)&&Text';
|
||||||
|
var rule = {
|
||||||
|
title:'饭团影视',
|
||||||
|
模板:'首图2',
|
||||||
|
host:'https://www.fantuanhd.com',
|
||||||
|
// url:'/show/id-fyclass/page/fypage.html',
|
||||||
|
url:'/type/fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.area}}{{fl.by}}{{fl.class}}{{fl.lang}}/page/fypage{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"犯罪","v":"/class/犯罪"},{"n":"灾难","v":"/class/灾难"},{"n":"奇幻","v":"/class/奇幻"},{"n":"悬疑","v":"/class/悬疑"},{"n":"惊悚","v":"/class/惊悚"},{"n":"冒险","v":"/class/冒险"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2008","v":"/year/2008"},{"n":"2000","v":"/year/2000"},{"n":"1997","v":"/year/1997"},{"n":"1980","v":"/year/1980"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"普通话","v":"/lang/普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"2":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"战争","v":"/class/战争"},{"n":"偶像","v":"/class/偶像"},{"n":"犯罪","v":"/class/犯罪"},{"n":"奇幻","v":"/class/奇幻"},{"n":"剧情","v":"/class/剧情"},{"n":"历史","v":"/class/历史"},{"n":"网剧","v":"/class/网剧"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2008","v":"/year/2008"},{"n":"2000","v":"/year/2000"},{"n":"1997","v":"/year/1997"},{"n":"1980","v":"/year/1980"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"普通话","v":"/lang/普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"3":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"相声","v":"/class/相声"},{"n":"真人秀","v":"/class/真人秀"},{"n":"脱口秀","v":"/class/脱口秀"},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"舞蹈","v":"/class/舞蹈"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"韩国","v":"/area/韩国"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2008","v":"/year/2008"},{"n":"2000","v":"/year/2000"},{"n":"1997","v":"/year/1997"},{"n":"1980","v":"/year/1980"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"普通话","v":"/lang/普通话"},{"n":"粤语","v":"/lang/粤语"},{"n":"英语","v":"/lang/英语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"4":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2008","v":"/year/2008"},{"n":"2000","v":"/year/2000"},{"n":"1997","v":"/year/1997"},{"n":"1980","v":"/year/1980"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"普通话","v":"/lang/普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||||
|
"5":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"历史","v":"/class/历史"},{"n":"传记","v":"/class/传记"},{"n":"生活","v":"/class/生活"},{"n":"人文","v":"/class/人文"},{"n":"地理","v":"/class/地理"},{"n":"舞台","v":"/class/舞台"},{"n":"专题","v":"/class/专题"},{"n":"时事","v":"/class/时事"},{"n":"宣传","v":"/class/宣传"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2008","v":"/year/2008"},{"n":"2000","v":"/year/2000"},{"n":"1997","v":"/year/1997"},{"n":"1980","v":"/year/1980"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"普通话","v":"/lang/普通话"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||||
|
},
|
||||||
|
class_parse: '.stui-header__menu li:gt(0):lt(6);a&&Text;a&&href;.*/(\\d+).html',
|
||||||
|
searchUrl:'/search/page/fypage/wd/**.html',
|
||||||
|
搜索:muban.首图2.搜索1,
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,32 @@
|
|||||||
|
var rule = {
|
||||||
|
title: 'i275听书',
|
||||||
|
host: 'https://m.ting275.com',
|
||||||
|
// url: '/category/fyclass/2.html?page=fypage',
|
||||||
|
url:'/category/fyclass/fyfilter/fypage.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.by}}',
|
||||||
|
filter:{"6":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"7":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"8":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"9":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"10":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"11":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"12":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"13":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"14":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"15":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"49":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"50":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}],"51":[{"key":"by","name":"排序","value":[{"n":"更新","v":"2"},{"n":"人气","v":"3"}]}]},
|
||||||
|
filter_def:{6:{by:'2'},7:{by:'2'},8:{by:'2'},9:{by:'2'},10:{by:'2'},11:{by:'2'},12:{by:'2'},13:{by:'2'},14:{by:'2'},15:{by:'2'},49:{by:'2'},50:{by:'2'},51:{by:'2'}},
|
||||||
|
searchUrl: '/pc/index/search.html?keyword=**&page=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
headers:{'User-Agent':'MOBILE_UA'},
|
||||||
|
class_name:'玄幻奇幻&都市言情&宫斗女频&官场商战&武侠仙侠&刑侦推理&探险科幻&重生穿越&恐怖惊悚&文学历史&两性情感&网游竞技&相声评书',
|
||||||
|
class_url:'6&7&8&9&10&11&12&13&14&15&49&50&51',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:'*',
|
||||||
|
// 一级:'.list-wrapper&&.item-link;h2--span&&Text;img&&data-cfsrc;.status&&Text;a&&href',
|
||||||
|
一级:'.list-wrapper&&.item-link;h2--span&&Text;img&&src;.status&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":".book-title&&Text;.text:eq(0)&&Text",
|
||||||
|
// "img":".img&&data-cfsrc",
|
||||||
|
"img":".img&&src",
|
||||||
|
"desc":".update-time&&Text;;;.text:eq(1)&&Text;.text:eq(2)&&Text",
|
||||||
|
"content":".book-intro&&Text",
|
||||||
|
"tabs":".operate-bar&&.total-num",
|
||||||
|
"lists":".book-list:eq(#id)&&.list-item"
|
||||||
|
},
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
// 地址发布页 https://aikanys.vip
|
||||||
|
// 搜索 数字验证
|
||||||
|
|
||||||
|
var rule = {
|
||||||
|
title: '爱看',
|
||||||
|
模板:'短视2',
|
||||||
|
// host:'https://akanhd.com',
|
||||||
|
host:'https://aikanys.vip',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,"li:eq(2)&&a&&href");print(src);HOST=src',
|
||||||
|
homeUrl:'/map/',
|
||||||
|
// url: '/index.php/api/vod#type=fyclass&page=fypage',
|
||||||
|
url:'/index.php/api/vod#type=fyfilter',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}&area={{fl.area}}&by={{fl.by or "time"}}&class={{fl.class}}&lang={{fl.lang}}&letter={{fl.letter}}&page=fypage&year={{fl.year}}',
|
||||||
|
filter:{
|
||||||
|
"1":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"灾难片","v":"24"}]},{"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":"儿童"},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"}]},{"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":"其他"}]},{"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":"其他"}]},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"15":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"韩语","v":"韩语"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"16":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"英语","v":"英语"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"14":[{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"20":[{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"},{"n":"0-9","v":"0-9"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
3:{cateId:'3'},
|
||||||
|
4:{cateId:'4'},
|
||||||
|
15:{cateId:'15'},
|
||||||
|
16:{cateId:'16'},
|
||||||
|
14:{cateId:'14'},
|
||||||
|
20:{cateId:'20'}
|
||||||
|
},
|
||||||
|
detailUrl:'/voddetail/fyid/',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---/',
|
||||||
|
class_name:'电影&连续剧&综艺&动漫&日韩剧&美剧&港台剧&纪录片',
|
||||||
|
class_url:'1&2&3&4&15&16&14&20',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
var from = html.from;
|
||||||
|
var next = html.link_next;
|
||||||
|
if (html.encrypt == '1') {
|
||||||
|
url = unescape(url)
|
||||||
|
} else if (html.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url))
|
||||||
|
} else if (html.encrypt == '3') {
|
||||||
|
url = url.substring(8, url.length);
|
||||||
|
url = base64Decode(url);
|
||||||
|
url = url.substring(8, (url.length) - 8)
|
||||||
|
}
|
||||||
|
if (/\\.m3u8|\\.mp4/.test(url)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: url,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var paurl = request(HOST + '/static/player/' + from + '.js').match(/ src="(.*?)'/)[1];
|
||||||
|
if (/https/.test(paurl)) {
|
||||||
|
var purl = paurl + url + '&next=' + next + '&title=';
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: purl,
|
||||||
|
parse: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
推荐:'.border-box&&.public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
|
||||||
|
double: false, // 推荐内容是否双层定位
|
||||||
|
一级:`js:
|
||||||
|
let body = input.split("#")[1];
|
||||||
|
let t = Math.round(new Date / 1e3).toString();
|
||||||
|
let key = md5("DS" + t + "DCC147D11943AF75");
|
||||||
|
let url = input.split("#")[0];
|
||||||
|
body = body + "&time=" + t + "&key=" + key;
|
||||||
|
print(body);
|
||||||
|
fetch_params.body = body;
|
||||||
|
let html = post(url, fetch_params);
|
||||||
|
let data = JSON.parse(html);
|
||||||
|
VODS = data.list.map(function(it) {
|
||||||
|
it.vod_pic = it.vod_pic.replace(/mac/, "https");
|
||||||
|
return it
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
搜索:'.row-right&&.search-box;.thumb-txt&&Text;.lazy&&data-original;.public-list-prb&&Text;a&&href',
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
var rule={title:'JRKAN直播',host:'http://www.jrkankan.com/?lan=1',url:'/fyclass',searchUrl:'',searchable:0,quickSearch:0,class_name:'全部',class_url:'/',headers:{'User-Agent':'MOBILE_UA'},timeout:5000,play_parse:true,lazy:"",limit:6,double:false,推荐:'*',一级:"js:var items=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;var html=request(input);var tabs=pdfa(html,'body&&.d-touch');tabs.forEach(function(it){var pz=pdfh(it,'.name:eq(1)&&Text');var ps=pdfh(it,'.name:eq(0)&&Text');var pk=pdfh(it,'.name:eq(2)&&Text');var img=pd(it,'img&&src');var timer=pdfh(it,'.lab_time&&Text');var url=pd(it,'a&&href');items.push({desc:timer+'🏆'+ps,title:pz+'🆚'+pk,pic_url:img,url:url})});setResult(items);",二级:{"title":".sub_list li:lt(2)&&Text;.sub_list li:eq(0)&&Text","img":"img&&src","desc":";;;.lab_team_home&&Text;.lab_team_away&&Text","content":".sub_list ul&&Text","tabs":"js:TABS=['JRKAN直播']","lists":"js:LISTS=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=request(input);let data=pdfa(html,'.sub_playlist&&a');TABS.forEach(function(tab){let d=data.map(function(it){let name=pdfh(it,'strong&&Text');let url=pd(it,'a&&data-play');return name+'$'+url});LISTS.push(d)});",},搜索:'',}
|
||||||
@@ -0,0 +1,188 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'酷吧[磁]',
|
||||||
|
host:'https://www.kuba222.com',
|
||||||
|
homeUrl: '/',
|
||||||
|
url: '/vodtypehtml/fyclass.html?',
|
||||||
|
filter_url:'{{fl.class}}',
|
||||||
|
filter:{
|
||||||
|
},
|
||||||
|
searchUrl: '/search/**-1.html',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'PC_UA',
|
||||||
|
'Referer': 'https://www.kuba222.com/'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name: '最新&4K&电影&动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&微电影&电视剧&动漫&纪录片',
|
||||||
|
class_url: 'new&4K&1&5&6&7&8&9&10&11&21&31&4&16',
|
||||||
|
play_parse:true,
|
||||||
|
play_json:[{
|
||||||
|
re:'*',
|
||||||
|
json:{
|
||||||
|
parse:0,
|
||||||
|
jx:0
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
let d = [];
|
||||||
|
let html = request(input);
|
||||||
|
let list = pdfa(html, 'ul.stui-vodlist li');
|
||||||
|
list.forEach(function (it){
|
||||||
|
d.push({
|
||||||
|
title: pdfh(it, 'a&&title'),
|
||||||
|
desc: pdfh(it, 'li&&div&&a&&span&&Text'),
|
||||||
|
pic_url: pd(it, 'a&&data-original', HOST),
|
||||||
|
url: pdfh(it, 'a&&href')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
一级:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
let d = [];
|
||||||
|
if (MY_CATE === '4K'){
|
||||||
|
let turl = (MY_PAGE === 1)? '' : '-' + MY_PAGE;
|
||||||
|
input = rule.homeUrl + 'vodtopichtml/' + '11' + turl + '.html';
|
||||||
|
}else if (MY_CATE === 'new'){
|
||||||
|
input = rule.homeUrl + MY_CATE + '.html';
|
||||||
|
}else{
|
||||||
|
let turl = (MY_PAGE === 1)? '' : '-' + MY_PAGE;
|
||||||
|
input = rule.homeUrl + 'vodtypehtml/' + MY_CATE + turl + '.html';
|
||||||
|
}
|
||||||
|
let html = request(input);
|
||||||
|
let list = pdfa(html, 'ul.stui-vodlist li');
|
||||||
|
list.forEach(function (it){
|
||||||
|
d.push({
|
||||||
|
title: pdfh(it, 'a&&title'),
|
||||||
|
desc: pdfh(it, 'li&&div&&a&&span&&Text'),
|
||||||
|
pic_url: pd(it, 'a&&data-original', HOST),
|
||||||
|
url: pdfh(it, 'a&&href')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:{
|
||||||
|
title:"div.stui-content h3&&Text",
|
||||||
|
img:"div.stui-content a.lazyload img&&src",
|
||||||
|
desc:'div.stui-content a span&&Text',
|
||||||
|
content:'div.stui-content p.data&&Text',
|
||||||
|
tabs:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
TABS=[]
|
||||||
|
let vodUrls=[];
|
||||||
|
try{
|
||||||
|
vodUrls.push(html.match(/var GvodUrls1 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls2 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls3 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls4 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls5 *= *"([^"]*)"/)[1]);
|
||||||
|
}catch(e){
|
||||||
|
}
|
||||||
|
let index=1;
|
||||||
|
vodUrls.forEach(function (it) {
|
||||||
|
TABS.push("磁力"+index);
|
||||||
|
index = index + 1;
|
||||||
|
});
|
||||||
|
log('kuba TABS >>>>>>>>>>>>>>>>>>' + TABS);
|
||||||
|
`,
|
||||||
|
lists:`js:
|
||||||
|
log(TABS);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
LISTS = [];
|
||||||
|
let vodUrls=[];
|
||||||
|
//log("kuba html>>>>>>>>>>>>>>>>>>>>>>" + html);
|
||||||
|
try{
|
||||||
|
vodUrls.push(html.match(/var GvodUrls1 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls2 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls3 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls4 *= *"([^"]*)"/)[1]);
|
||||||
|
vodUrls.push(html.match(/var GvodUrls5 *= *"([^"]*)"/)[1]);
|
||||||
|
}catch(e){
|
||||||
|
log('kuba tabs e>>>>>>>>>>>>>>>>>>..' + e);
|
||||||
|
}
|
||||||
|
vodUrls.forEach(function (it) {
|
||||||
|
let epos = it.split("###");
|
||||||
|
let d=[];
|
||||||
|
epos.forEach(function (it1){
|
||||||
|
if (it1.length>0){
|
||||||
|
d.push(it1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
LISTS.push(d.reverse());
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
|
||||||
|
},
|
||||||
|
搜索:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
let cookie="";
|
||||||
|
if (false){
|
||||||
|
let new_html=request(HOST, {withHeaders:true});
|
||||||
|
let json=JSON.parse(new_html);
|
||||||
|
let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");
|
||||||
|
if (typeof setCk !== "undefined"){
|
||||||
|
let d=[];
|
||||||
|
for(const key in json[setCk]){
|
||||||
|
if (typeof json[setCk][key] === "string"){
|
||||||
|
log("kuba header setCk key>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + json[setCk][key] + " " + (typeof json[setCk][key]));
|
||||||
|
d.push(json[setCk][key].split(";")[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cookie=d.join(";");
|
||||||
|
}
|
||||||
|
fetch_params.headers.Cookie=cookie;
|
||||||
|
rule_fetch_params.headers.Cookie=cookie;
|
||||||
|
}
|
||||||
|
log('kuba search cookie >>>>>>>>>>>>>>>>>>>>>' + cookie);
|
||||||
|
|
||||||
|
let params = 'wd='+ encodeURIComponent(KEY) + '&submit=';
|
||||||
|
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||||
|
let postData = {
|
||||||
|
body: params
|
||||||
|
};
|
||||||
|
Object.assign(_fetch_params, postData);
|
||||||
|
log("kuba search postData>>>>>>>>>>>>>>>" + JSON.stringify(_fetch_params));
|
||||||
|
let search_html = post( HOST + '/index.php?m=vod-search', _fetch_params)
|
||||||
|
search_html = search_html.replace(/<script>.*?<\\/script>/g,"");
|
||||||
|
//log("kuba search result>>>>>>>>>>>>>>>" + search_html.substring(4096));
|
||||||
|
let d=[];
|
||||||
|
let dlist = pdfa(search_html, 'li.activeclearfix');
|
||||||
|
log("kuba search dlist.length>>>>>>>>>>>>>" + dlist.length);
|
||||||
|
dlist.forEach(function(it){
|
||||||
|
let title = pdfh(it, 'a&&title');
|
||||||
|
let img = pd(it, 'a&&data-original', HOST);
|
||||||
|
let content = pdfh(it, 'a&&Text');
|
||||||
|
let desc = pdfh(it, 'div.detail&&Text');
|
||||||
|
let url = pd(it, 'a&&href', HOST);
|
||||||
|
d.push({
|
||||||
|
title:title,
|
||||||
|
img:img,
|
||||||
|
content:content,
|
||||||
|
desc:desc,
|
||||||
|
url:url
|
||||||
|
});
|
||||||
|
});
|
||||||
|
dlist = pdfa(search_html, 'li.active.clearfix');
|
||||||
|
log("kuba search dlist.length>>>>>>>>>>>>>" + dlist.length);
|
||||||
|
dlist.forEach(function(it){
|
||||||
|
let title = pdfh(it, 'a&&title');
|
||||||
|
let img = pd(it, 'a&&data-original', HOST);
|
||||||
|
let content = pdfh(it, 'a&&Text');
|
||||||
|
let desc = pdfh(it, 'div.detail&&Text');
|
||||||
|
let url = pd(it, 'a&&href', HOST);
|
||||||
|
d.push({
|
||||||
|
title:title,
|
||||||
|
img:img,
|
||||||
|
content:content,
|
||||||
|
desc:desc,
|
||||||
|
url:url
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import cheerio from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/cheerio.min.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-js.js";import"https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/drT.js";import 模板 from"https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js";function init_test(){console.log("init_test_start");console.log("当前版本号:"+VERSION);console.log(RKEY);console.log(JSON.stringify(rule));console.log("init_test_end")}function pre(){if(typeof rule.预处理==="string"&&rule.预处理&&rule.预处理.trim()){let code=rule.预处理.trim();console.log("执行预处理代码:"+code);if(code.startsWith("js:")){code=code.replace("js:","")}try{eval(code)}catch(e){console.log("预处理执行失败:"+e.message)}}}let rule={};const VERSION="drpy1 3.9.30 20221204";const MOBILE_UA="Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36";const PC_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";const UA="Mozilla/5.0";const UC_UA="Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36";const IOS_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 RULE_CK="cookie";const CATE_EXCLUDE="首页|留言|APP|下载|资讯|新闻|动态";const TAB_EXCLUDE="猜你|喜欢|APP|下载|剧情|热播";const OCR_RETRY=3;const OCR_API="http://cms.nokia.press:5706/parse/ocr";if(typeof MY_URL==="undefined"){var MY_URL}var RKEY;var fetch;var print;var log;var rule_fetch_params;var fetch_params;var oheaders;var _pdfh;var _pdfa;var _pd;const DOM_CHECK_ATTR=/(url|src|href|-original|-src|-play|-url)$/;const SELECT_REGEX=/:eq|:lt|:gt|#/g;const SELECT_REGEX_A=/:eq|:lt|:gt/g;if(typeof Object.assign!="function"){Object.assign=function(){var target=arguments[0];for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target}}if(!String.prototype.includes){String.prototype.includes=function(search,start){if(typeof start!=="number"){start=0}if(start+search.length>this.length){return false}else{return this.indexOf(search,start)!==-1}}}if(!Array.prototype.includes){Object.defineProperty(Array.prototype,"includes",{value:function(searchElement,fromIndex){if(this==null){throw new TypeError('"this" is null or not defined')}var o=Object(this);var len=o.length>>>0;if(len===0){return false}var n=fromIndex|0;var k=Math.max(n>=0?n:len-Math.abs(n),0);while(k<len){if(o[k]===searchElement){return true}k++}return false}})}if(typeof String.prototype.startsWith!="function"){String.prototype.startsWith=function(prefix){return this.slice(0,prefix.length)===prefix}}if(typeof String.prototype.endsWith!="function"){String.prototype.endsWith=function(suffix){return this.indexOf(suffix,this.length-suffix.length)!==-1}}Object.prototype.myValues=function(obj){if(obj==null){throw new TypeError("Cannot convert undefined or null to object")}var res=[];for(var k in obj){if(obj.hasOwnProperty(k)){res.push(obj[k])}}return res};if(typeof Object.prototype.values!="function"){Object.prototype.values=function(obj){if(obj==null){throw new TypeError("Cannot convert undefined or null to object")}var res=[];for(var k in obj){if(obj.hasOwnProperty(k)){res.push(obj[k])}}return res}}if(typeof Array.prototype.join!="function"){Array.prototype.join=function(emoji){emoji=emoji||"";let self=this;let str="";let i=0;if(!Array.isArray(self)){throw String(self)+"is not Array"}if(self.length===0){return""}if(self.length===1){return String(self[0])}i=1;str=this[0];for(;i<self.length;i++){str+=String(emoji)+String(self[i])}return str}}String.prototype.rstrip=function(chars){let regex=new RegExp(chars+"$");return this.replace(regex,"")};Array.prototype.append=Array.prototype.push;String.prototype.strip=String.prototype.trim;function 是否正版(vipUrl){let flag=new RegExp("qq.com|iqiyi.com|youku.com|mgtv.com|bilibili.com|sohu.com|ixigua.com|pptv.com|miguvideo.com|le.com|1905.com|fun.tv");return flag.test(vipUrl)}function urlDeal(vipUrl){if(!vipUrl){return""}if(!是否正版(vipUrl)){return vipUrl}if(!/miguvideo/.test(vipUrl)){vipUrl=vipUrl.split("#")[0].split("?")[0]}return vipUrl}function setResult(d){if(!Array.isArray(d)){return[]}VODS=[];d.forEach(function(it){let obj={vod_id:it.url||"",vod_name:it.title||"",vod_remarks:it.desc||"",vod_content:it.content||"",vod_pic:it.pic_url||it.img||""};let keys=Object.keys(it);if(keys.includes("tname")){obj.type_name=it.tname||""}if(keys.includes("tid")){obj.type_id=it.tid||""}if(keys.includes("year")){obj.vod_year=it.year||""}if(keys.includes("actor")){obj.vod_actor=it.actor||""}if(keys.includes("director")){obj.vod_director=it.director||""}if(keys.includes("area")){obj.vod_area=it.area||""}VODS.push(obj)});return VODS}function setResult2(res){VODS=res.list||[];return VODS}function setHomeResult(res){if(!res||typeof res!=="object"){return[]}return setResult(res.list)}function rc(js){if(js==="maomi_aes.js"){var a=CryptoJS.enc.Utf8.parse("625222f9149e961d");var t=CryptoJS.enc.Utf8.parse("5efdtf6060e2o330");return{De:function(word){word=CryptoJS.enc.Hex.parse(word);return CryptoJS.AES.decrypt(CryptoJS.enc.Base64.stringify(word),a,{iv:t,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)},En:function(word){var Encrypted=CryptoJS.AES.encrypt(word,a,{iv:t,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});return Encrypted.ciphertext.toString()}}}return{}}function maoss(jxurl,ref,key){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));eval(getCryptoJS());try{var getVideoInfo=function(text){return CryptoJS.AES.decrypt(text,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)};var token_key=key==undefined?"dvyYRQlnPRCMdQSe":key;if(ref){var html=request(jxurl,{headers:{Referer:ref}})}else{var html=request(jxurl)}if(html.indexOf("&btwaf=")!=-1){html=request(jxurl+"&btwaf"+html.match(/&btwaf(.*?)"/)[1],{headers:{Referer:ref}})}var token_iv=html.split('_token = "')[1].split('"')[0];var key=CryptoJS.enc.Utf8.parse(token_key);var iv=CryptoJS.enc.Utf8.parse(token_iv);eval(html.match(/var config = {[\s\S]*?}/)[0]+"");if(!config.url.startsWith("http")){config.url=CryptoJS.AES.decrypt(config.url,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)}return config.url}catch(e){return""}}function urlencode(str){str=(str+"").toString();return encodeURIComponent(str).replace(/!/g,"%21").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/\*/g,"%2A").replace(/%20/g,"+")}function base64Encode(text){return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text))}function base64Decode(text){return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text))}function md5(text){return CryptoJS.MD5(text).toString()}function getCryptoJS(){return'console.log("CryptoJS已装载");'}function forceOrder(lists,key,option){let start=Math.floor(lists.length/2);let end=Math.min(lists.length-1,start+1);if(start>=end){return lists}let first=lists[start];let second=lists[end];if(key){try{first=first[key];second=second[key]}catch(e){}}if(option&&typeof option==="function"){try{first=option(first);second=option(second)}catch(e){}}first+="";second+="";if(first.match(/(\d+)/)&&second.match(/(\d+)/)){let num1=Number(first.match(/(\d+)/)[1]);let num2=Number(second.match(/(\d+)/)[1]);if(num1>num2){lists.reverse()}}return lists}let VODS=[];let VOD={};let TABS=[];let LISTS=[];globalThis.encodeUrl=urlencode;globalThis.urlencode=urlencode;function urljoin(fromPath,nowPath){fromPath=fromPath||"";nowPath=nowPath||"";return joinUrl(fromPath,nowPath)}var urljoin2=urljoin;const defaultParser={pdfh:pdfh,pdfa:pdfa,pd(html,parse,uri){let ret=this.pdfh(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}};function pdfh2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}let result=defaultParser.pdfh(html2,parse);let option=parse.includes("&&")?parse.split("&&").slice(-1)[0]:parse.split(" ").slice(-1)[0];if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1]}catch(e){}}return result}function pdfa2(html,parse){let html2=html;try{if(typeof html!=="string"){html2=html.rr(html.ele).toString()}}catch(e){print("html对象转文本发生了错误:"+e.message)}return defaultParser.pdfa(html2,parse)}function pd2(html,parse,uri){let ret=pdfh2(html,parse);if(typeof uri==="undefined"||!uri){uri=""}if(DOM_CHECK_ATTR.test(parse)){if(/http/.test(ret)){ret=ret.substr(ret.indexOf("http"))}else{ret=urljoin(MY_URL,ret)}}return ret}const parseTags={jsp:{pdfh:pdfh2,pdfa:pdfa2,pd:pd2},json:{pdfh(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}parse=parse.split("||");for(let ps of parse){let ret=cheerio.jp(ps,html);if(Array.isArray(ret)){ret=ret[0]||""}else{ret=ret||""}if(ret&&typeof ret!=="string"){ret=ret.toString()}if(ret){return ret}}return""},pdfa(html,parse){if(!parse||!parse.trim()){return""}if(typeof html==="string"){html=JSON.parse(html)}parse=parse.trim();if(!parse.startsWith("$.")){parse="$."+parse}let ret=cheerio.jp(parse,html);if(Array.isArray(ret)&&Array.isArray(ret[0])&&ret.length===1){return ret[0]||[]}return ret||[]},pd(html,parse){let ret=parseTags.json.pdfh(html,parse);if(ret){return urljoin(MY_URL,ret)}return ret}},jq:{pdfh(html,parse,base_url){if(!parse||!parse.trim()){return""}let eleFind=typeof html==="object";let option=undefined;if(eleFind&&parse.startsWith("body&&")){parse=parse.substr(6);if(parse.indexOf("&&")<0){option=parse.trim();parse="*=*"}}if(parse.indexOf("&&")>-1){let sp=parse.split("&&");option=sp[sp.length-1];sp.splice(sp.length-1);if(sp.length>1){for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX.test(sp[i])){sp[i]=sp[i]+":eq(0)"}}}}else{if(!SELECT_REGEX.test(sp[0])){sp[0]=sp[0]+":eq(0)"}}parse=sp.join(" ")}let result="";const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?parse==="*=*"||$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);if(option){if(option==="Text"){result=$(ret).text()}else if(option==="Html"){result=$(ret).html()}else{result=$(ret).attr(option);if(/style/.test(option.toLowerCase())&&/url\(/.test(result)){try{result=result.match(/url\((.*?)\)/)[1]}catch(e){}}}if(result&&base_url&&DOM_CHECK_ATTR.test(option)){if(/http/.test(result)){result=result.substr(result.indexOf("http"))}else{result=urljoin(base_url,result)}}}else{result=$(ret).toString()}return result},pdfa(html,parse){if(!parse||!parse.trim()){print("!parse");return[]}let eleFind=typeof html==="object";if(parse.indexOf("&&")>-1){let sp=parse.split("&&");for(let i in sp){if(sp.hasOwnProperty(i)){if(!SELECT_REGEX_A.test(sp[i])&&i<sp.length-1){if(sp[i]!=="body"){sp[i]=sp[i]+":first"}}}}parse=sp.join(" ")}const $=eleFind?html.rr:cheerio.load(html);let ret=eleFind?$(html.ele).is(parse)?html.ele:$(html.ele).find(parse):$(parse);let result=[];if(ret){ret.each(function(idx,ele){result.push({rr:$,ele:ele})})}return result},pd(html,parse,uri){return parseTags.jq.pdfh(html,parse,MY_URL)}},getParse(p0){if(p0.startsWith("jsp:")){return this.jsp}else if(p0.startsWith("json:")){return this.json}else if(p0.startsWith("jq:")){return this.jq}else{return this.jq}}};const stringify=JSON.stringify;const jsp=parseTags.jsp;const jq=parseTags.jq;function readFile(filePath){filePath=filePath||"./uri.min.js";var fd=os.open(filePath);var buffer=new ArrayBuffer(1024);var len=os.read(fd,buffer,0,1024);console.log(len);let text=String.fromCharCode.apply(null,new Uint8Array(buffer));console.log(text);return text}function dealJson(html){try{html=html.trim();if(!(html.startsWith("{")&&html.endsWith("}")||html.startsWith("[")&&html.endsWith("]"))){html="{"+html.match(/.*?\{(.*)\}/m)[1]+"}"}}catch(e){}try{html=JSON.parse(html)}catch(e){}return html}var OcrApi={api:OCR_API,classification:function(img){let code="";try{let html=request(this.api,{data:{img:img},headers:{"User-Agent":PC_UA},method:"POST"},true);html=JSON.parse(html);code=html.url||""}catch(e){}return code}};function verifyCode(url){let cnt=0;let host=getHome(url);let cookie="";while(cnt<OCR_RETRY){try{let yzm_url=`${host}/index.php/verify/index.html`;console.log(`验证码链接:${yzm_url}`);let hhtml=request(yzm_url,{withHeaders:true,toBase64:true},true);let json=JSON.parse(hhtml);if(!cookie){let setCk=Object.keys(json).find(it=>it.toLowerCase()==="set-cookie");cookie=setCk?json[setCk].split(";")[0]:""}console.log("cookie:"+cookie);let img=json.body;let code=OcrApi.classification(img);console.log(`第${cnt+1}次验证码识别结果:${code}`);let submit_url=`${host}/index.php/ajax/verify_check?type=search&verify=${code}`;console.log(submit_url);let html=request(submit_url,{headers:{Cookie:cookie,"User-Agent":MOBILE_UA},method:"POST"});html=JSON.parse(html);if(html.msg==="ok"){console.log(`第${cnt+1}次验证码提交成功`);return cookie}else if(html.msg!=="ok"&&cnt+1>=OCR_RETRY){cookie=""}}catch(e){console.log(`第${cnt+1}次验证码提交失败:${e.message}`);if(cnt+1>=OCR_RETRY){cookie=""}}cnt+=1}return cookie}function setItem(k,v){local.set(RKEY,k,v);console.log(`规则${RKEY}设置${k} => ${v}`)}function getItem(k,v){return local.get(RKEY,k)||v}function clearItem(k){local.delete(RKEY,k)}function getHome(url){if(!url){return""}let tmp=url.split("//");url=tmp[0]+"//"+tmp[1].split("/")[0];try{url=decodeURIComponent(url)}catch(e){}return url}function buildUrl(url,obj){obj=obj||{};if(url.indexOf("?")<0){url+="?"}let param_list=[];let keys=Object.keys(obj);keys.forEach(it=>{param_list.push(it+"="+obj[it])});let prs=param_list.join("&");if(keys.length>0&&!url.endsWith("?")){url+="&"}url+=prs;return url}function require(url){eval(request(url))}function request(url,obj,ocr_flag){ocr_flag=ocr_flag||false;if(typeof obj==="undefined"||!obj||obj==={}){if(!fetch_params||!fetch_params.headers){let headers={"User-Agent":MOBILE_UA};if(rule.headers){Object.assign(headers,rule.headers)}if(!fetch_params){fetch_params={}}fetch_params.headers=headers}if(!fetch_params.headers.Referer){fetch_params.headers.Referer=getHome(url)}obj=fetch_params}else{let headers=obj.headers||{};let keys=Object.keys(headers).map(it=>it.toLowerCase());if(!keys.includes("user-agent")){headers["User-Agent"]=MOBILE_UA}if(!keys.includes("referer")){headers["Referer"]=getHome(url)}obj.headers=headers}if(rule.encoding&&rule.encoding!=="utf-8"&&!ocr_flag){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="text/html; charset="+rule.encoding}}if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="string"){if(!obj.headers.hasOwnProperty("Content-Type")&&!obj.headers.hasOwnProperty("content-type")){obj.headers["Content-Type"]="application/x-www-form-urlencoded; charset="+rule.encoding}}else if(typeof obj.body!="undefined"&&obj.body&&typeof obj.body==="object"){obj.data=obj.body;delete obj.body}if(!url){return obj.withHeaders?"{}":""}if(obj.toBase64){obj.buffer=2;delete obj.toBase64}console.log(JSON.stringify(obj.headers));console.log("request:"+url+`|method:${obj.method||"GET"}|body:${obj.body||""}`);let res=req(url,obj);let html=res.content||"";if(obj.withHeaders){let htmlWithHeaders=res.headers;htmlWithHeaders.body=html;return JSON.stringify(htmlWithHeaders)}else{return html}}function post(url,obj){obj.method="POST";return request(url,obj)}fetch=request;print=function(data){data=data||"";if(typeof data=="object"&&Object.keys(data).length>0){try{data=JSON.stringify(data);console.log(data)}catch(e){console.log(typeof data+":"+data.length);return}}else if(typeof data=="object"&&Object.keys(data).length<1){console.log("null object")}else{console.log(data)}};log=print;function checkHtml(html,url,obj){if(/\?btwaf=/.test(html)){let btwaf=html.match(/btwaf(.*?)"/)[1];url=url.split("#")[0]+"?btwaf"+btwaf;print("宝塔验证访问链接:"+url);html=request(url,obj)}return html}function getCode(url,obj){let html=request(url,obj);html=checkHtml(html,url,obj);return html}function getHtml(url){let obj={};if(rule.headers){obj.headers=rule.headers}let cookie=getItem(RULE_CK,"");if(cookie){if(obj.headers&&!Object.keys(obj.headers).map(it=>it.toLowerCase()).includes("cookie")){obj.headers["Cookie"]=cookie}else if(!obj.headers){obj.headers={Cookie:cookie}}}let html=getCode(url,obj);return html}function homeParse(homeObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let classes=[];if(homeObj.class_name&&homeObj.class_url){let names=homeObj.class_name.split("&");let urls=homeObj.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]})}}if(homeObj.class_parse){let p=homeObj.class_parse.split(";");let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;MY_URL=rule.url;if(p.length>=3){try{let html=getHtml(homeObj.MY_URL);if(html){homeHtmlCache=html;let list=_pdfa(html,p[0]);if(list&&list.length>0){list.forEach((it,idex)=>{try{let name=_pdfh(it,p[1]);if(homeObj.cate_exclude&&new RegExp(homeObj.cate_exclude).test(name)){return}let url=_pd(it,p[2]);if(p.length>3&&p[3]){let exp=new RegExp(p[3]);url=url.match(exp)[1]}classes.push({type_id:url.trim(),type_name:name.trim()})}catch(e){console.log(`分类列表定位第${idex}个元素正常报错:${e.message}`)}})}}}catch(e){console.log(e.message)}}}classes=classes.filter(it=>!homeObj.cate_exclude||!new RegExp(homeObj.cate_exclude).test(it.type_name));let resp={class:classes};if(homeObj.filter){resp.filters=homeObj.filter}console.log(JSON.stringify(resp));return JSON.stringify(resp)}function getPP(p,pn,pp,ppn){try{let ps=p[pn]==="*"&&pp.length>ppn?pp[ppn]:p[pn];return ps}catch(e){return""}}function homeVodParse(homeVodObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];MY_URL=homeVodObj.homeUrl;console.log(MY_URL);let t1=(new Date).getTime();let p=homeVodObj.推荐;print("p:"+p);if(p==="*"&&rule.一级){p=rule.一级;homeVodObj.double=false}if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");if(p.startsWith("js:")){const TYPE="home";var input=MY_URL;const HOST=rule.host;eval(p.replace("js:",""));d=VODS}else{p=p.split(";");if(!homeVodObj.double&&p.length<5){return"{}"}else if(homeVodObj.double&&p.length<6){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");let html=homeHtmlCache||getHtml(MY_URL);homeHtmlCache=undefined;if(is_json){html=dealJson(html)}try{console.log("double:"+homeVodObj.double);if(homeVodObj.double){let items=_pdfa(html,p0);let p1=getPP(p,1,pp,0);let p2=getPP(p,2,pp,1);let p3=getPP(p,3,pp,2);let p4=getPP(p,4,pp,3);let p5=getPP(p,5,pp,4);let p6=getPP(p,6,pp,5);for(let item of items){let items2=_pdfa(item,p1);for(let item2 of items2){try{let title=_pdfh(item2,p2);let img="";try{img=_pd(item2,p3)}catch(e){}let desc="";try{desc=_pdfh(item2,p4)}catch(e){}let links=[];for(let _p5 of p5.split("+")){let link=!homeVodObj.detailUrl?_pd(item2,_p5,MY_URL):_pdfh(item2,_p5);links.push(link)}let content;if(p.length>6&&p[6]){content=_pdfh(item2,p6)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){console.log("首页列表处理发生错误:"+e.message)}}}}else{let items=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);for(let item of items){try{let title=_pdfh(item,p1);let img="";try{img=_pd(item,p2,MY_URL)}catch(e){}let desc="";try{desc=_pdfh(item,p3)}catch(e){}let links=[];for(let _p5 of p4.split("+")){let link=!homeVodObj.detailUrl?_pd(item,_p5,MY_URL):_pdfh(item,_p5);links.push(link)}let content;if(p.length>5&&p[5]){content=_pdfh(item,p5)}else{content=""}let vid=links.join("$");if(rule.二级==="*"){vid=vid+"@@"+title+"@@"+img}let vod={vod_name:title,vod_pic:img,vod_remarks:desc,vod_content:content,vod_id:vid};d.push(vod)}catch(e){}}}}catch(e){}}let t2=(new Date).getTime();console.log("加载首页推荐耗时:"+(t2-t1)+"毫秒");if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}return JSON.stringify({list:d})}function categoryParse(cateObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let p=cateObj.一级;if(!p||typeof p!=="string"){return"{}"}let d=[];let url=cateObj.url.replaceAll("fyclass",cateObj.tid);if(rule.filter_url){if(!/fyfilter/.test(url)){if(!url.endsWith("&")&&!rule.filter_url.startsWith("&")){url+="&"}url+=rule.filter_url}else{url=url.replace("fyfilter",rule.filter_url)}let fl=cateObj.filter?cateObj.extend:{};if(rule.filter_def&&typeof rule.filter_def==="object"){try{if(Object.keys(rule.filter_def).length>0&&rule.filter_def.hasOwnProperty(cateObj.tid)){let self_fl_def=rule.filter_def[cateObj.tid];if(self_fl_def&&typeof self_fl_def==="object"){let fl_def=JSON.parse(JSON.stringify(self_fl_def));fl=Object.assign(fl_def,fl)}}}catch(e){print("合并不同分类对应的默认筛选出错:"+e.message)}}let new_url;new_url=cheerio.jinja2(url,{fl:fl});if(/object Object/.test(new_url)){new_url=drT.renderText(url,fl)}url=new_url}if(/fypage/.test(url)){if(url.includes("(")&&url.includes(")")){let url_rep=url.match(/.*?\((.*)\)/)[1];let cnt_page=url_rep.replaceAll("fypage",cateObj.pg);let cnt_pg=eval(cnt_page);url=url.replaceAll(url_rep,cnt_pg).replaceAll("(","").replaceAll(")","")}else{url=url.replaceAll("fypage",cateObj.pg)}}if(cateObj.pg===1&&url.includes("[")&&url.includes("]")){url=url.split("[")[1].split("]")[0]}else if(cateObj.pg>1&&url.includes("[")&&url.includes("]")){url=url.split("[")[0]}MY_URL=url;console.log(MY_URL);p=p.trim();const MY_CATE=cateObj.tid;if(p.startsWith("js:")){var MY_FL=cateObj.extend;const TYPE="cate";var input=MY_URL;const MY_PAGE=cateObj.pg;var desc="";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let _ps=parseTags.getParse(p[0]);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p[0].startsWith("json:");p[0]=p[0].replace(/^(jsp:|json:|jq:)/,"");try{let html=getHtml(MY_URL);if(html){if(is_json){html=dealJson(html)}let list=_pdfa(html,p[0]);list.forEach(it=>{let links=p[4].split("+").map(p4=>{return!rule.detailUrl?_pd(it,p4,MY_URL):_pdfh(it,p4)});let link=links.join("$");let vod_id=rule.detailUrl?MY_CATE+"$"+link:link;let vod_name=_pdfh(it,p[1]).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p[2],MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}d.push({vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p[3]).replace(/\n|\t/g,"").trim()})})}}catch(e){console.log(e.message)}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}if(d.length>0){print(d.slice(0,2))}let pagecount=0;if(rule.pagecount&&typeof rule.pagecount==="object"&&rule.pagecount.hasOwnProperty(MY_CATE)){print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);pagecount=parseInt(rule.pagecount[MY_CATE])}let nodata={list:[{vod_name:"无数据,防无限请求",vod_id:"no_data",vod_remarks:"不要点,会崩的",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}],total:1,pagecount:1,page:1,limit:1};let vod=d.length<1?JSON.stringify(nodata):JSON.stringify({page:parseInt(cateObj.pg),pagecount:pagecount||999,limit:20,total:999,list:d});return vod}function searchParse(searchObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let d=[];if(!searchObj.searchUrl){return"{}"}let p=searchObj.搜索==="*"&&rule.一级?rule.一级:searchObj.搜索;if(!p||typeof p!=="string"){return"{}"}p=p.trim();let pp=rule.一级.split(";");let url=searchObj.searchUrl.replaceAll("**",searchObj.wd).replaceAll("fypage",searchObj.pg);MY_URL=url;console.log(MY_URL);if(p.startsWith("js:")){const TYPE="search";const MY_PAGE=searchObj.pg;const KEY=searchObj.wd;var input=MY_URL;var detailUrl=rule.detailUrl||"";eval(p.trim().replace("js:",""));d=VODS}else{p=p.split(";");if(p.length<5){return"{}"}let p0=getPP(p,0,pp,0);let _ps=parseTags.getParse(p0);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;let is_json=p0.startsWith("json:");p0=p0.replace(/^(jsp:|json:|jq:)/,"");try{let req_method=MY_URL.split(";").length>1?MY_URL.split(";")[1].toLowerCase():"get";let html;if(req_method==="post"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`post=》rurl:${rurl},params:${params}`);let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else if(req_method==="postjson"){let rurls=MY_URL.split(";")[0].split("#");let rurl=rurls[0];let params=rurls.length>1?rurls[1]:"";print(`postjson-》rurl:${rurl},params:${params}`);try{params=JSON.parse(params)}catch(e){params="{}"}let _fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let postData={body:params};Object.assign(_fetch_params,postData);html=post(rurl,_fetch_params)}else{html=getHtml(MY_URL)}if(html){if(/系统安全验证|输入验证码/.test(html)){let cookie=verifyCode(MY_URL);if(cookie){console.log(`本次成功过验证,cookie:${cookie}`);setItem(RULE_CK,cookie)}else{console.log(`本次自动过搜索验证失败,cookie:${cookie}`)}html=getHtml(MY_URL)}if(!html.includes(searchObj.wd)){console.log("搜索结果源码未包含关键字,疑似搜索失败,正为您打印结果源码");console.log(html)}if(is_json){html=dealJson(html)}let list=_pdfa(html,p0);let p1=getPP(p,1,pp,1);let p2=getPP(p,2,pp,2);let p3=getPP(p,3,pp,3);let p4=getPP(p,4,pp,4);let p5=getPP(p,5,pp,5);list.forEach(it=>{let links=p4.split("+").map(_p4=>{return!rule.detailUrl?_pd(it,_p4,MY_URL):_pdfh(it,_p4)});let link=links.join("$");let content;if(p.length>5&&p[5]){content=_pdfh(it,p5)}else{content=""}let vod_id=link;let vod_name=_pdfh(it,p1).replace(/\n|\t/g,"").trim();let vod_pic=_pd(it,p2,MY_URL);if(rule.二级==="*"){vod_id=vod_id+"@@"+vod_name+"@@"+vod_pic}let ob={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,vod_remarks:_pdfh(it,p3).replace(/\n|\t/g,"").trim(),vod_content:content.replace(/\n|\t/g,"").trim()};d.push(ob)})}}catch(e){print("搜索发生错误:"+e.message);return"{}"}}if(rule.图片来源){d.forEach(it=>{if(it.vod_pic&&it.vod_pic.startsWith("http")){it.vod_pic=it.vod_pic+rule.图片来源}})}return JSON.stringify({page:parseInt(searchObj.pg),pagecount:10,limit:20,total:100,list:d})}function detailParse(detailObj){let t1=(new Date).getTime();fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));let orId=detailObj.orId;let vod_name="片名";let vod_pic="";let vod_id=orId;if(rule.二级==="*"){let extra=orId.split("@@");vod_name=extra.length>1?extra[1]:vod_name;vod_pic=extra.length>2?extra[2]:vod_pic}let vod={vod_id:vod_id,vod_name:vod_name,vod_pic:vod_pic,type_name:"类型",vod_year:"年份",vod_area:"地区",vod_remarks:"更新信息",vod_actor:"主演",vod_director:"导演",vod_content:"简介"};let p=detailObj.二级;let url=detailObj.url;let detailUrl=detailObj.detailUrl;let fyclass=detailObj.fyclass;let tab_exclude=detailObj.tab_exclude;let html=detailObj.html||"";MY_URL=url;if(p==="*"){vod.vod_play_from="道长在线";vod.vod_remarks=detailUrl;vod.vod_actor="没有二级,只有一级链接直接嗅探播放";vod.vod_content=MY_URL;vod.vod_play_url="嗅探播放$"+MY_URL.split("@@")[0]}else if(typeof p==="string"&&p.trim().startsWith("js:")){const TYPE="detail";var input=MY_URL;var play_url="";eval(p.trim().replace("js:",""));vod=VOD;console.log(JSON.stringify(vod))}else if(p&&typeof p==="object"){let tt1=(new Date).getTime();if(!html){html=getHtml(MY_URL)}print(`二级${MY_URL}仅获取源码耗时:${(new Date).getTime()-tt1}毫秒`);let _impJQP=false;let _ps;if(p.is_json){print("二级是json");_ps=parseTags.json;html=dealJson(html)}else if(p.is_jsp){print("二级是jsp");_ps=parseTags.jsp}else if(p.is_jq){print("二级是jq");_ps=parseTags.jq}else{print("二级默认jq");_ps=parseTags.jq}if(_ps===parseTags.jq){_impJQP=true}if(_impJQP){let ttt1=(new Date).getTime();let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]};print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date).getTime()-ttt1}毫秒`)}let tt2=(new Date).getTime();print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);_pdfa=_ps.pdfa;_pdfh=_ps.pdfh;_pd=_ps.pd;if(p.title){let p1=p.title.split(";");vod.vod_name=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();let type_name=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").replace(/ /g,"").trim():"";vod.type_name=type_name||vod.type_name}if(p.desc){try{let p1=p.desc.split(";");vod.vod_remarks=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim();vod.vod_year=p1.length>1?_pdfh(html,p1[1]).replace(/\n|\t/g,"").trim():"";vod.vod_area=p1.length>2?_pdfh(html,p1[2]).replace(/\n|\t/g,"").trim():"";vod.vod_actor=p1.length>3?_pdfh(html,p1[3]).replace(/\n|\t/g,"").trim():"";vod.vod_director=p1.length>4?_pdfh(html,p1[4]).replace(/\n|\t/g,"").trim():""}catch(e){}}if(p.content){try{let p1=p.content.split(";");vod.vod_content=_pdfh(html,p1[0]).replace(/\n|\t/g,"").trim()}catch(e){}}if(p.img){try{let p1=p.img.split(";");vod.vod_pic=_pd(html,p1[0],MY_URL)}catch(e){}}let vod_play_from="$$$";let playFrom=[];if(p.重定向&&p.重定向.startsWith("js:")){print("开始执行重定向代码:"+p.重定向);html=eval(p.重定向.replace("js:",""));if(_impJQP){let c$=cheerio.load(html);html={rr:c$,ele:c$("html")[0]}}}if(p.tabs){if(p.tabs.startsWith("js:")){print("开始执行tabs代码:"+p.tabs);if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}var input=MY_URL;eval(p.tabs.replace("js:",""));playFrom=TABS}else{let p_tab=p.tabs.split(";")[0];let vHeader=_pdfa(html,p_tab);console.log(vHeader.length);let tab_text=p.tab_text||"body&&Text";let new_map={};for(let v of vHeader){let v_title=_pdfh(v,tab_text).trim();console.log(v_title);if(tab_exclude&&new RegExp(tab_exclude).test(v_title)){continue}if(!new_map.hasOwnProperty(v_title)){new_map[v_title]=1}else{new_map[v_title]+=1}if(new_map[v_title]>1){v_title+=Number(new_map[v_title]-1)}playFrom.push(v_title)}}console.log(JSON.stringify(playFrom))}else{playFrom=["道长在线"]}vod.vod_play_from=playFrom.join(vod_play_from);let vod_play_url="$$$";let vod_tab_list=[];if(p.lists){if(p.lists.startsWith("js:")){print("开始执行lists代码:"+p.lists);try{if(html&&_impJQP&&typeof html!=="string"){try{html=html.rr(html.ele).toString()}catch(e){}}var input=MY_URL;var play_url="";eval(p.lists.replace("js:",""));for(let i in LISTS){if(LISTS.hasOwnProperty(i)){try{LISTS[i]=LISTS[i].map(it=>it.split("$").slice(0,2).join("$"))}catch(e){print("格式化LISTS发生错误:"+e.message)}}}vod_play_url=LISTS.map(it=>it.join("#")).join(vod_play_url)}catch(e){print("js执行lists: 发生错误:"+e.message)}}else{let list_text=p.list_text||"body&&Text";let list_url=p.list_url||"a&&href";let is_tab_js=p.tabs.trim().startsWith("js:");for(let i=0;i<playFrom.length;i++){let tab_name=playFrom[i];let tab_ext=p.tabs.split(";").length>1&&!is_tab_js?p.tabs.split(";")[1]:"";let p1=p.lists.replaceAll("#idv",tab_name).replaceAll("#id",i);tab_ext=tab_ext.replaceAll("#idv",tab_name).replaceAll("#id",i);let vodList=[];try{vodList=_pdfa(html,p1);console.log("len(vodList):"+vodList.length)}catch(e){}let new_vod_list=[];let tabName=tab_ext?_pdfh(html,tab_ext):tab_name;console.log(tabName);let tt1=(new Date).getTime();if(vodList.length>0){for(let i=0;i<vodList.length;i++){let it=vodList[i];new_vod_list.push(_pdfh(it,list_text).trim()+"$"+_pd(it,list_url,MY_URL))}new_vod_list=forceOrder(new_vod_list,"",x=>x.split("$")[0]);console.log(`drpy影响性能代码共计列表数循环次数:${vodList.length},耗时:${(new Date).getTime()-tt1}毫秒`)}let vlist=new_vod_list.join("#");vod_tab_list.push(vlist)}vod_play_url=vod_tab_list.join(vod_play_url)}}vod.vod_play_url=vod_play_url}if(rule.图片来源&&vod.vod_pic&&vod.vod_pic.startsWith("http")){vod.vod_pic=vod.vod_pic+rule.图片来源}if(!vod.vod_id){vod.vod_id=vod_id}let t2=(new Date).getTime();console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);return JSON.stringify({list:[vod]})}function tellIsJx(url){try{let is_vip=!/\.(m3u8|mp4|m4a)$/.test(url.split("?")[0])&&是否正版(url);return is_vip?1:0}catch(e){return 1}}function playParse(playObj){fetch_params=JSON.parse(JSON.stringify(rule_fetch_params));MY_URL=playObj.url;if(!/http/.test(MY_URL)){try{MY_URL=base64Decode(MY_URL)}catch(e){}}MY_URL=decodeURIComponent(MY_URL);var input=MY_URL;let common_play={parse:1,url:input,jx:tellIsJx(input)};let lazy_play;if(!rule.play_parse||!rule.lazy){lazy_play=common_play}else if(rule.play_parse&&rule.lazy&&typeof rule.lazy==="string"){try{let lazy_code=rule.lazy.replace("js:","").trim();print("开始执行js免嗅=>"+lazy_code);eval(lazy_code);lazy_play=typeof input==="object"?input:{parse:1,jx:tellIsJx(input),url:input}}catch(e){print("js免嗅错误:"+e.message);lazy_play=common_play}}else{lazy_play=common_play}if(Array.isArray(rule.play_json)&&rule.play_json.length>0){let web_url=lazy_play.url;for(let pjson of rule.play_json){if(pjson.re&&(pjson.re==="*"||web_url.match(new RegExp(pjson.re)))){if(pjson.json&&typeof pjson.json==="object"){let base_json=pjson.json;lazy_play=Object.assign(lazy_play,base_json);break}}}}else if(rule.play_json&&!Array.isArray(rule.play_json)){let base_json={jx:1,parse:1};lazy_play=Object.assign(lazy_play,base_json)}else if(!rule.play_json){let base_json={jx:0,parse:1};lazy_play=Object.assign(lazy_play,base_json)}console.log(JSON.stringify(lazy_play));return JSON.stringify(lazy_play)}function init(ext){console.log("init");try{let muban=模板.getMubans();if(typeof ext=="object"){rule=ext}else if(typeof ext=="string"){if(ext.startsWith("http")){let js=request(ext,{method:"GET"});if(js){eval(js.replace("var rule","rule"))}}else{eval(ext.replace("var rule","rule"))}}if(rule.模板&&muban.hasOwnProperty(rule.模板)){print("继承模板:"+rule.模板);rule=Object.assign(muban[rule.模板],rule)}let rule_cate_excludes=(rule.cate_exclude||"").split("|").filter(it=>it.trim());let rule_tab_excludes=(rule.tab_exclude||"").split("|").filter(it=>it.trim());rule_cate_excludes=rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it=>it.trim()));rule_tab_excludes=rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it=>it.trim()));rule.cate_exclude=rule_cate_excludes.join("|");rule.tab_exclude=rule_tab_excludes.join("|");rule.host=(rule.host||"").rstrip("/");rule.url=rule.url||"";rule.double=rule.double||false;rule.homeUrl=rule.homeUrl||"";rule.detailUrl=rule.detailUrl||"";rule.searchUrl=rule.searchUrl||"";rule.homeUrl=rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):rule.homeUrl||rule.host;rule.detailUrl=rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;if(rule.url.includes("[")&&rule.url.includes("]")){let u1=rule.url.split("[")[0];let u2=rule.url.split("[")[1].split("]")[0];rule.url=rule.host&&rule.url?urljoin(rule.host,u1)+"["+urljoin(rule.host,u2)+"]":rule.url}else{rule.url=rule.host&&rule.url?urljoin(rule.host,rule.url):rule.url}rule.searchUrl=rule.host&&rule.searchUrl?urljoin(rule.host,rule.searchUrl):rule.searchUrl;rule.timeout=rule.timeout||5e3;rule.encoding=rule.编码||rule.encoding||"utf-8";rule.图片来源=rule.图片来源||"";rule.play_json=rule.hasOwnProperty("play_json")?rule.play_json:[];rule.pagecount=rule.hasOwnProperty("pagecount")?rule.pagecount:{};if(rule.headers&&typeof rule.headers==="object"){try{let header_keys=Object.keys(rule.headers);for(let k of header_keys){if(k.toLowerCase()==="user-agent"){let v=rule.headers[k];console.log(v);if(["MOBILE_UA","PC_UA","UC_UA","IOS_UA","UA"].includes(v)){rule.headers[k]=eval(v)}}}}catch(e){console.log("处理headers发生错误:"+e.message)}}rule_fetch_params={headers:rule.headers||false,timeout:rule.timeout,encoding:rule.encoding};oheaders=rule.headers||{};RKEY=typeof key!=="undefined"&&key?key:"drpy_"+(rule.title||rule.host);pre();init_test()}catch(e){console.log("init_test发生错误:"+e.message)}}let homeHtmlCache=undefined;function home(filter){console.log("home");let homeObj={filter:rule.filter||false,MY_URL:rule.homeUrl,class_name:rule.class_name||"",class_url:rule.class_url||"",class_parse:rule.class_parse||"",cate_exclude:rule.cate_exclude};return homeParse(homeObj)}function homeVod(params){console.log("homeVod");let homeVodObj={"推荐":rule.推荐,double:rule.double,homeUrl:rule.homeUrl,detailUrl:rule.detailUrl};return homeVodParse(homeVodObj)}function category(tid,pg,filter,extend){let cateObj={url:rule.url,"一级":rule.一级,tid:tid,pg:parseInt(pg),filter:filter,extend:extend};return categoryParse(cateObj)}function detail(vod_url){let orId=vod_url;let fyclass="";if(vod_url.indexOf("$")>-1){let tmp=vod_url.split("$");fyclass=tmp[0];vod_url=tmp[1]}let detailUrl=vod_url.split("@@")[0];let url;if(!detailUrl.startsWith("http")&&!detailUrl.includes("/")){url=rule.detailUrl.replaceAll("fyid",detailUrl).replaceAll("fyclass",fyclass)}else if(detailUrl.includes("/")){url=urljoin(rule.homeUrl,detailUrl)}else{url=detailUrl}let detailObj={orId:orId,url:url,"二级":rule.二级,detailUrl:detailUrl,fyclass:fyclass,tab_exclude:rule.tab_exclude};return detailParse(detailObj)}function play(flag,id,flags){let playObj={url:id,flag:flag,flags:flags};return playParse(playObj)}function search(wd,quick){let searchObj={searchUrl:rule.searchUrl,"搜索":rule.搜索,wd:wd,pg:1,quick:quick};return searchParse(searchObj)}function DRPY(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export default{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search,DRPY:DRPY};
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
// 永久网址:https://libvio.app
|
||||||
|
muban.首图2.二级.title = 'h1&&Text;.data:eq(0)&&Text'
|
||||||
|
muban.首图2.二级.desc = '.data.hidden-xs&&Text;;;.data:eq(1)&&Text;.data:eq(4)&&Text'
|
||||||
|
muban.首图2.二级.content = '.detail-content&&Text'
|
||||||
|
var rule = {
|
||||||
|
title:'LIBVIO',
|
||||||
|
模板:'首图2',
|
||||||
|
host:'https://www.libvio.me',
|
||||||
|
// host:'https://libvio.app',
|
||||||
|
// hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,"li:eq(0)&&a:eq(0)&&href");print(src);HOST=src',
|
||||||
|
// url:'/type/fyclass-fypage.html',
|
||||||
|
url:'/show/fyclassfyfilter.html',
|
||||||
|
// url:'/show_fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}--{{fl.lang}}----fypage---{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"area","name":"地区","value":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"27":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"15":[{"key":"area","name":"地区","value":[{"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"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"16":[{"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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
// 'User-Agent':'MOBILE_UA'
|
||||||
|
'User-Agent':'Mozilla/5.0 (Linux; Android 9; ASUS_Z01QD Build/PQ3B.190801.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Safari/537.36'
|
||||||
|
},
|
||||||
|
class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
||||||
|
// class_parse:'.stui-header__menu li;a&&Text;a&&href;/.*_(\\d+).html',
|
||||||
|
tab_exclude:'夸克网盘|百度云盘',
|
||||||
|
pagecount:{"27":1},
|
||||||
|
lazy:`js: var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
var from = html.from;
|
||||||
|
var next = html.link_next;
|
||||||
|
var id = html.id;
|
||||||
|
var nid = html.nid;
|
||||||
|
// var paurl = request("https://libvio.cc/static/player/" + from + ".js").match(/ src="(.*?)'/)[1];
|
||||||
|
var paurl = request(HOST + "/static/player/" + from + ".js").match(/ src="(.*?)'/)[1];
|
||||||
|
if (/https/.test(paurl)) {
|
||||||
|
var purl = paurl + url + "&next=" + next + "&id=" + id + "&nid=" + nid;
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: request(purl).match(/var .* = '(.*?)'/)[1],
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
detailUrl:'/detail/fyid.html', //非必填,二级详情拼接链接
|
||||||
|
// detailUrl:'/detail_fyid.html', //非必填,二级详情拼接链接
|
||||||
|
// searchUrl:'/search/**----------fypage---.html',
|
||||||
|
搜索:'json:list;name;pic;;id',
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '小蚂蚁[V2]', // csp_AppYsV2
|
||||||
|
host: 'http://guan.yy365.vip',
|
||||||
|
homeUrl:'/api.php/app/index_video',
|
||||||
|
// url: '/api.php/app/video?tid=fyclass&class=&area=&lang=&year=&limit=20&pg=fypage',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"儿童"},{"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":"其他"}]},{"key":"lang","name":"语言","value":[{"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":"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"其它","v":"其它"}]},{"key":"lang","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":"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":"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"5":[{"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"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电视剧&电影&动漫&少儿&综艺', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url:'2&1&4&5&3',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:if(/m3u8|mp4/.test(input)){input}else if(/NBY/.test(input)){let purl=request("http://103.146.230.202:6688/api/?key=wzFFqn51SZGkEnm6cG&url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}',
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list[0].vlist;*;*;*;*',
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
|
||||||
|
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from=("⚡️应用边界⚡️$$$⚡️多多影音⚡️$$$⚡️多多APP⚡️");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)}',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
const peq = new Uint32Array(0x10000);
|
||||||
|
const myers_32 = (a, b) => {
|
||||||
|
const n = a.length;
|
||||||
|
const m = b.length;
|
||||||
|
const lst = 1 << (n - 1);
|
||||||
|
let pv = -1;
|
||||||
|
let mv = 0;
|
||||||
|
let sc = n;
|
||||||
|
let i = n;
|
||||||
|
while (i--) {
|
||||||
|
peq[a.charCodeAt(i)] |= 1 << i;
|
||||||
|
}
|
||||||
|
for (i = 0; i < m; i++) {
|
||||||
|
let eq = peq[b.charCodeAt(i)];
|
||||||
|
const xv = eq | mv;
|
||||||
|
eq |= ((eq & pv) + pv) ^ pv;
|
||||||
|
mv |= ~(eq | pv);
|
||||||
|
pv &= eq;
|
||||||
|
if (mv & lst) {
|
||||||
|
sc++;
|
||||||
|
}
|
||||||
|
if (pv & lst) {
|
||||||
|
sc--;
|
||||||
|
}
|
||||||
|
mv = (mv << 1) | 1;
|
||||||
|
pv = (pv << 1) | ~(xv | mv);
|
||||||
|
mv &= xv;
|
||||||
|
}
|
||||||
|
i = n;
|
||||||
|
while (i--) {
|
||||||
|
peq[a.charCodeAt(i)] = 0;
|
||||||
|
}
|
||||||
|
return sc;
|
||||||
|
};
|
||||||
|
const myers_x = (b, a) => {
|
||||||
|
const n = a.length;
|
||||||
|
const m = b.length;
|
||||||
|
const mhc = [];
|
||||||
|
const phc = [];
|
||||||
|
const hsize = Math.ceil(n / 32);
|
||||||
|
const vsize = Math.ceil(m / 32);
|
||||||
|
for (let i = 0; i < hsize; i++) {
|
||||||
|
phc[i] = -1;
|
||||||
|
mhc[i] = 0;
|
||||||
|
}
|
||||||
|
let j = 0;
|
||||||
|
for (; j < vsize - 1; j++) {
|
||||||
|
let mv = 0;
|
||||||
|
let pv = -1;
|
||||||
|
const start = j * 32;
|
||||||
|
const vlen = Math.min(32, m) + start;
|
||||||
|
for (let k = start; k < vlen; k++) {
|
||||||
|
peq[b.charCodeAt(k)] |= 1 << k;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < n; i++) {
|
||||||
|
const eq = peq[a.charCodeAt(i)];
|
||||||
|
const pb = (phc[(i / 32) | 0] >>> i) & 1;
|
||||||
|
const mb = (mhc[(i / 32) | 0] >>> i) & 1;
|
||||||
|
const xv = eq | mv;
|
||||||
|
const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
|
||||||
|
let ph = mv | ~(xh | pv);
|
||||||
|
let mh = pv & xh;
|
||||||
|
if ((ph >>> 31) ^ pb) {
|
||||||
|
phc[(i / 32) | 0] ^= 1 << i;
|
||||||
|
}
|
||||||
|
if ((mh >>> 31) ^ mb) {
|
||||||
|
mhc[(i / 32) | 0] ^= 1 << i;
|
||||||
|
}
|
||||||
|
ph = (ph << 1) | pb;
|
||||||
|
mh = (mh << 1) | mb;
|
||||||
|
pv = mh | ~(xv | ph);
|
||||||
|
mv = ph & xv;
|
||||||
|
}
|
||||||
|
for (let k = start; k < vlen; k++) {
|
||||||
|
peq[b.charCodeAt(k)] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mv = 0;
|
||||||
|
let pv = -1;
|
||||||
|
const start = j * 32;
|
||||||
|
const vlen = Math.min(32, m - start) + start;
|
||||||
|
for (let k = start; k < vlen; k++) {
|
||||||
|
peq[b.charCodeAt(k)] |= 1 << k;
|
||||||
|
}
|
||||||
|
let score = m;
|
||||||
|
for (let i = 0; i < n; i++) {
|
||||||
|
const eq = peq[a.charCodeAt(i)];
|
||||||
|
const pb = (phc[(i / 32) | 0] >>> i) & 1;
|
||||||
|
const mb = (mhc[(i / 32) | 0] >>> i) & 1;
|
||||||
|
const xv = eq | mv;
|
||||||
|
const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
|
||||||
|
let ph = mv | ~(xh | pv);
|
||||||
|
let mh = pv & xh;
|
||||||
|
score += (ph >>> (m - 1)) & 1;
|
||||||
|
score -= (mh >>> (m - 1)) & 1;
|
||||||
|
if ((ph >>> 31) ^ pb) {
|
||||||
|
phc[(i / 32) | 0] ^= 1 << i;
|
||||||
|
}
|
||||||
|
if ((mh >>> 31) ^ mb) {
|
||||||
|
mhc[(i / 32) | 0] ^= 1 << i;
|
||||||
|
}
|
||||||
|
ph = (ph << 1) | pb;
|
||||||
|
mh = (mh << 1) | mb;
|
||||||
|
pv = mh | ~(xv | ph);
|
||||||
|
mv = ph & xv;
|
||||||
|
}
|
||||||
|
for (let k = start; k < vlen; k++) {
|
||||||
|
peq[b.charCodeAt(k)] = 0;
|
||||||
|
}
|
||||||
|
return score;
|
||||||
|
};
|
||||||
|
const distance = (a, b) => {
|
||||||
|
if (a.length < b.length) {
|
||||||
|
const tmp = b;
|
||||||
|
b = a;
|
||||||
|
a = tmp;
|
||||||
|
}
|
||||||
|
if (b.length === 0) {
|
||||||
|
return a.length;
|
||||||
|
}
|
||||||
|
if (a.length <= 32) {
|
||||||
|
return myers_32(a, b);
|
||||||
|
}
|
||||||
|
return myers_x(a, b);
|
||||||
|
};
|
||||||
|
const closest = (str, arr) => {
|
||||||
|
let min_distance = Infinity;
|
||||||
|
let min_index = 0;
|
||||||
|
for (let i = 0; i < arr.length; i++) {
|
||||||
|
const dist = distance(str, arr[i]);
|
||||||
|
if (dist < min_distance) {
|
||||||
|
min_distance = dist;
|
||||||
|
min_index = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr[min_index];
|
||||||
|
};
|
||||||
|
export { closest, distance };
|
||||||
@@ -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);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
// 发布页 https://www.nmdvd.com/
|
||||||
|
var rule={
|
||||||
|
title:'农民影视',
|
||||||
|
|
||||||
|
//host:'https://www.nmddd.com',
|
||||||
|
//host:'https://v.xiangdao.me',
|
||||||
|
// host:'https://v.emsdn.cn',
|
||||||
|
host:'https://www.nmdvd.com/',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":MOBILE_UA}});let src = jsp.pdfh(html,"body&&a:eq(1)&&href");print(src);HOST=src',
|
||||||
|
url:'/vod-list-id-fyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}-pg-fypage-order--by-{{fl.by}}-class-0-year-{{fl.year}}-letter--area-{{fl.area}}-lang-',
|
||||||
|
filter: {"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"5"},{"n":"喜剧片","v":"6"},{"n":"爱情片","v":"7"},{"n":"科幻片","v":"8"},{"n":"恐怖片","v":"9"},{"n":"剧情片","v":"10"},{"n":"战争片","v":"11"},{"n":"惊悚片","v":"16"},{"n":"奇幻片","v":"17"}]},{"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":"俄罗斯"},{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"12"},{"n":"港台泰","v":"13"},{"n":"日韩剧","v":"14"},{"n":"欧美剧","v":"15"}]},{"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":"俄罗斯"},{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"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":"俄罗斯"},{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"4"},{"n":"动漫剧","v":"18"},{"n":"动漫片","v":"19"}]},{"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":"俄罗斯"},{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
3:{cateId:'3'},
|
||||||
|
4:{cateId:'4'}
|
||||||
|
},
|
||||||
|
searchUrl:'/index.php?m=vod-search&wd=**',
|
||||||
|
searchable:2,//是否启用全局搜索,
|
||||||
|
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
class_parse: '#topnav li:lt(4);a&&Text;a&&href;/.*-(\\d+)-.*.html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:'.globalPicList .resize_list;*;img&&data-src;*;*',
|
||||||
|
一级:'.globalPicList li;.sTit&&Text;img&&src;.sBottom--em&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":".title&&Text;.type-title&&Text",
|
||||||
|
"img":".page-hd&&img&&src",
|
||||||
|
"desc":".desc_item:eq(3)&&Text;.desc_item:eq(4)--span&&Text;;.desc_item:eq(1)--span&&Text;.desc_item:eq(2)--span&&Text",
|
||||||
|
"content":".detail-con p&&Text",
|
||||||
|
"tabs":".hd li",
|
||||||
|
"lists":".numList:eq(#id) li"
|
||||||
|
},
|
||||||
|
搜索:'.ulPicTxt.clearfix li;*;img&&data-src;.sDes:eq(1)&&Text;*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'腾云驾雾',
|
||||||
|
host:'https://v.%71%71.com',
|
||||||
|
// homeUrl:'/channel/choice?listpage=1&channel=choice&sort=18&_all=1',
|
||||||
|
homeUrl:'/x/bu/pagesheet/list?_all=1&append=1&channel=choice&listpage=1&offset=0&pagesize=21&iarea=-1&sort=18',
|
||||||
|
detailUrl:'https://node.video.%71%71.com/x/api/float_vinfo2?cid=fyid',
|
||||||
|
// searchUrl:'https://node.video.%71%71.com/x/api/msearch?keyWord=**',
|
||||||
|
searchUrl:'/x/search/?q=**&stag=fypage',
|
||||||
|
// searchUrl:'http://s.video.qq.com/smartbox?plat=2&ver=0&num=29&otype=json&query=**',
|
||||||
|
searchable:2,
|
||||||
|
filterable:1,
|
||||||
|
multi:1,
|
||||||
|
// url:'/channel/fyclass?listpage=fypage&channel=fyclass&sort=18&_all=1',
|
||||||
|
url:'/x/bu/pagesheet/list?_all=1&append=1&channel=fyclass&listpage=1&offset=((fypage-1)*21)&pagesize=21&iarea=-1',
|
||||||
|
filter_url:'sort={{fl.sort or 18}}&year={{fl.year}}&pay={{fl.pay}}',
|
||||||
|
filter:{'choice': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}], 'tv': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}], 'movie': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}], 'variety': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}], 'cartoon': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}], 'child': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}], 'doco': [{'key': 'sort', 'name': '排序', 'value': [{'n': '最热', 'v': '18'}, {'n': '最新', 'v': '19'}, {'n': '好评', 'v': '16'}, {'n': '高分好评', 'v': '21'}]}, {'key': 'pay', 'name': '资费', 'value': [{'n': '全部', 'v': '-1'}, {'n': '免费', 'v': '867'}, {'n': '会员', 'v': '6'}]}, {'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '-1'}, {'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'}]}]},
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
// class_parse:'.site_channel a;a&&Text;a&&href;channel/(.*)',
|
||||||
|
cate_exclude:'会员|游戏|全部',
|
||||||
|
class_name:'精选&电视剧&电影&综艺&动漫&少儿&纪录片',
|
||||||
|
class_url:'choice&tv&movie&variety&cartoon&child&doco',
|
||||||
|
limit:20,
|
||||||
|
// play_parse:true,
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input',
|
||||||
|
推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
一级:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
// 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"},
|
||||||
|
// 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites","lists":"data.playlinksdetail.#idv.default_url"},
|
||||||
|
二级:'',
|
||||||
|
二级:'js:VOD={};let d=[];let video_list=[];let video_lists=[];let list=[];let QZOutputJson;let html=fetch(input,fetch_params);let sourceId=/get_playsource/.test(input)?input.match(/id=(\\d*?)&/)[1]:input.split("cid=")[1];let cid=sourceId;let detailUrl="https://v.%71%71.com/detail/m/"+cid+".html";log("详情页:"+detailUrl);var pdfh=jsp.pdfh;var pd=jsp.pd;try{let json=JSON.parse(html);VOD={vod_url:input,vod_name:json.c.title,type_name:json.typ.join(","),vod_actor:json.nam.join(","),vod_year:json.c.year,vod_content:json.c.description,vod_remarks:json.rec,vod_pic:urljoin2(input,json.c.pic)}}catch(e){log("解析片名海报等基础信息发生错误:"+e.message)}if(/get_playsource/.test(input)){eval(html);let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+sourceId+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else{let json=JSON.parse(html);video_lists=json.c.video_ids;let url="https://v.qq.com/x/cover/"+sourceId+".html";if(video_lists.length===1){let vid=video_lists[0];url="https://v.qq.com/x/cover/"+cid+"/"+vid+".html";d.push({title:"在线播放",url:url})}else if(video_lists.length>1){for(let i=0;i<video_lists.length;i+=30){video_list.push(video_lists.slice(i,i+30))}video_list.forEach(function(it,idex){let o_url="https://union.video.qq.com/fcgi-bin/data?otype=json&tid=682&appid=20001238&appkey=6c03bbe9658448a4&union_platform=1&idlist="+it.join(",");let o_html=fetch(o_url,fetch_params);eval(o_html);QZOutputJson.results.forEach(function(it1){it1=it1.fields;let url="https://v.qq.com/x/cover/"+cid+"/"+it1.vid+".html";d.push({title:it1.title,pic_url:it1.pic160x90.replace("/160",""),desc:it1.video_checkup_time,url:url,type:it1.category_map&&it1.category_map.length>1?it1.category_map[1]:""})})})}}let yg=d.filter(function(it){return it.type&&it.type!=="正片"});let zp=d.filter(function(it){return!(it.type&&it.type!=="正片")});VOD.vod_play_from=yg.length<1?"qq":"qq$$$qq 预告及花絮";VOD.vod_play_url=yg.length<1?d.map(function(it){return it.title+"$"+it.url}).join("#"):[zp,yg].map(function(it){return it.map(function(its){return its.title+"$"+its.url}).join("#")}).join("$$$");',
|
||||||
|
// 二级:'js:VOD={};let d=[];let video_list=[];let video_lists=[];let list=[];let QZOutputJson;let html=fetch(input,fetch_params);let sourceId=/get_playsource/.test(input)?input.match(/id=(\\d*?)&/)[1]:input.split("cid=")[1];let cid=sourceId;let detailUrl="https://v.%71%71.com/detail/m/"+cid+".html";log("详情页:"+detailUrl);var pdfh=jsp.pdfh;var pd=jsp.pd;try{let json=JSON.parse(html);VOD={vod_url:input,vod_name:json.c.title,type_name:json.typ.join(","),vod_actor:json.nam.join(","),vod_year:json.c.year,vod_content:json.c.description,vod_remarks:json.rec,vod_pic:urljoin2(input,json.c.pic)}}catch(e){log("解析片名海报等基础信息发生错误:"+e.message)}if(/get_playsource/.test(input)){eval(html);let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+sourceId+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else{let json=JSON.parse(html);video_lists=json.c.video_ids;let url="https://v.qq.com/x/cover/"+sourceId+".html";if(json.c.type===10){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=2&data_type=3&video_type=8&plname=qq&otype=json";let o_html=fetch(dataUrl,fetch_params);eval(o_html);video_lists=[];let indexList=QZOutputJson.PlaylistItem.indexList;indexList.forEach(function(it){let dataUrl="https://s.video.qq.com/get_playsource?id="+json.c.column_id+"&plat=2&type=4&data_type=3&range="+it+"&video_type=10&plname=qq&otype=json";eval(fetch(dataUrl,fetch_params));let vdata=QZOutputJson.PlaylistItem.videoPlayList;vdata.forEach(function(item){d.push({title:item.title,pic_url:item.pic,desc:item.episode_number+"\\t\\t\\t播放量:"+item.thirdLine,url:item.playUrl})});video_lists=video_lists.concat(vdata)})}else if(video_lists.length===1){d.push({title:"在线播放",url:url})}else if(video_lists.length>1){for(let i=0;i<video_lists.length;i+=30){video_list.push(video_lists.slice(i,i+30))}video_list.forEach(function(it,idex){let o_url="https://union.video.qq.com/fcgi-bin/data?otype=json&tid=682&appid=20001238&appkey=6c03bbe9658448a4&union_platform=1&idlist="+it.join(",");let o_html=fetch(o_url,fetch_params);eval(o_html);QZOutputJson.results.forEach(function(it1){it1=it1.fields;let url="https://v.qq.com/x/cover/"+cid+"/"+it1.vid+".html";d.push({title:it1.title,pic_url:it1.pic160x90.replace("/160",""),desc:it1.video_checkup_time,url:url,type:it1.category_map&&it1.category_map.length>1?it1.category_map[1]:""})})})}}let yg=d.filter(function(it){return it.type&&it.type!=="正片"});let zp=d.filter(function(it){return!(it.type&&it.type!=="正片")});VOD.vod_play_from=yg.length<1?"qq":"qq$$$qq 预告及花絮";VOD.vod_play_url=yg.length<1?d.map(function(it){return it.title+"$"+it.url}).join("#"):[zp,yg].map(function(it){return it.map(function(its){return its.title+"$"+its.url}).join("#")}).join("$$$");',
|
||||||
|
// 搜索:'json:uiData;data[0].title;data[0].posterPic;.titleMarkLabelList[1].primeText;data[0].id;data[0].publishDate',
|
||||||
|
搜索:'js:let d=[];pdfa=jsp.pdfa;pdfh=jsp.pdfh;pd=jsp.pd;let html=request(input);let baseList=pdfa(html,"body&&.result_item_v");baseList.forEach(function(it){let longText=pdfh(it,".result_title&&Text");let shortText=pdfh(it,".sub&&Text");let fromTag=pdfh(it,".result_source&&Text");let score=pdfh(it,".result_score&&Text");let content=pdfh(it,".desc_text&&Text");let url=pdfh(it,".result_title&&a&&href");let img=pd(it,".figure_pic&&src");url="https://node.video.qq.com/x/api/float_vinfo2?cid="+url.match(/.*\\/(.*?)\\.html/)[1];log(shortText+"|"+url);if(fromTag.match(/腾讯/)){d.push({title:longText.split(shortText)[0],img:img,url:url,content:content,desc:"⭐"+longText.split(shortText)[1]+"-"+shortText+" "+score})}});setResult(d);',
|
||||||
|
// 搜索:'json:item;word;dc;class;id;sn',
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'奇珍异兽',
|
||||||
|
host:'https://www.iqiyi.com',
|
||||||
|
homeUrl:'',
|
||||||
|
// detailUrl:'https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid=fyid&size=2000&page=1',
|
||||||
|
detailUrl:'https://pcw-api.iqiyi.com/video/video/videoinfowithuser/fyid?agent_type=1&authcookie=&subkey=fyid&subscribe=1',
|
||||||
|
searchUrl:'https://search.video.iqiyi.com/o?if=html5&key=**&pageNum=fypage&pos=1&pageSize=24&site=iqiyi',
|
||||||
|
searchable:2,
|
||||||
|
multi:1,
|
||||||
|
filterable:1,
|
||||||
|
filter:{'1': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '华语', 'v': 1}, {'n': '香港地区', 'v': 28997}, {'n': '美国', 'v': 2}, {'n': '欧洲', 'v': 3}, {'n': '韩国', 'v': 4}, {'n': '日本', 'v': 308}, {'n': '泰国', 'v': 1115}, {'n': '印度', 'v': 28999}, {'n': '其它', 'v': 5}]}, {'key': '18001', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 8}, {'n': '爱情', 'v': 6}, {'n': '动作', 'v': 11}, {'n': '枪战', 'v': 131}, {'n': '犯罪', 'v': 291}, {'n': '惊悚', 'v': 128}, {'n': '恐怖', 'v': 10}, {'n': '悬疑', 'v': 289}, {'n': '动画', 'v': 12}, {'n': '家庭', 'v': 27356}, {'n': '奇幻', 'v': 1284}, {'n': '魔幻', 'v': 129}, {'n': '科幻', 'v': 9}, {'n': '战争', 'v': 7}, {'n': '青春', 'v': 130}]}, {'key': '27396', 'name': '规格', 'value': [{'n': '全部', 'v': ''}, {'n': '巨制', 'v': 27397}, {'n': '院线', 'v': 27815}, {'n': '独播', 'v': 30149}, {'n': '网络电影', 'v': 27401}]}], '2': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 15}, {'n': '港剧', 'v': 16}, {'n': '韩剧', 'v': 17}, {'n': '美剧', 'v': 18}, {'n': '日剧', 'v': 309}, {'n': '泰剧', 'v': 1114}, {'n': '台湾地区', 'v': 1117}, {'n': '英剧', 'v': 28916}, {'n': '其它', 'v': 19}]}, {'key': '18003', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '自制', 'v': 11992}, {'n': '古装', 'v': 24}, {'n': '言情', 'v': 20}, {'n': '武侠', 'v': 23}, {'n': '偶像', 'v': 30}, {'n': '家庭', 'v': 1654}, {'n': '青春', 'v': 1653}, {'n': '都市', 'v': 24064}, {'n': '喜剧', 'v': 135}, {'n': '战争', 'v': 27916}, {'n': '军旅', 'v': 1655}, {'n': '谍战', 'v': 290}, {'n': '悬疑', 'v': 32}, {'n': '罪案', 'v': 149}, {'n': '穿越', 'v': 148}, {'n': '宫廷', 'v': 139}, {'n': '历史', 'v': 21}, {'n': '神话', 'v': 145}, {'n': '科幻', 'v': 34}, {'n': '年代', 'v': 27}, {'n': '农村', 'v': 29}, {'n': '商战', 'v': 140}, {'n': '剧情', 'v': 24063}, {'n': '奇幻', 'v': 27881}, {'n': '网剧', 'v': 24065}, {'n': '竖短片', 'v': 32839}]}], '3': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '国内', 'v': 20323}, {'n': '国外', 'v': 20324}]}, {'key': '18004', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '人文', 'v': 70}, {'n': '美食', 'v': 33908}, {'n': '医疗', 'v': 33924}, {'n': '自然', 'v': 33933}, {'n': '萌宠', 'v': 33945}, {'n': '财经', 'v': 33953}, {'n': '罪案', 'v': 33960}, {'n': '竞技', 'v': 33967}, {'n': '灾难', 'v': 33974}, {'n': '军事', 'v': 72}, {'n': '历史', 'v': 74}, {'n': '探险', 'v': 73}, {'n': '社会', 'v': 71}, {'n': '科技', 'v': 28119}, {'n': '旅游', 'v': 310}]}, {'key': '28467', 'name': '出品方', 'value': [{'n': '全部', 'v': ''}, {'n': 'BBC', 'v': 28468}, {'n': '美国历史频道', 'v': 28470}, {'n': '探索频道', 'v': 28471}, {'n': '央视记录', 'v': 28472}, {'n': '北京纪实频道', 'v': 28473}, {'n': '上海纪实频道', 'v': 28474}, {'n': '朗思文化', 'v': 28476}, {'n': 'CNEX', 'v': 28477}, {'n': '五星传奇', 'v': 28478}, {'n': 'IMG', 'v': 28479}, {'n': 'NHK', 'v': 28480}, {'n': '爱奇艺出品', 'v': 31283}, {'n': 'Netflix', 'v': 31286}]}, {'key': '29076', 'name': '片种', 'value': [{'n': '全部', 'v': ''}, {'n': '纪录电影', 'v': 29077}, {'n': '系列纪录片', 'v': 29078}, {'n': '网络纪录片', 'v': 29082}, {'n': '纪实栏目', 'v': 29083}]}, {'key': '31294', 'name': '时长', 'value': [{'n': '全部', 'v': ''}, {'n': '微纪录', 'v': 29079}, {'n': '长纪录', 'v': 29080}, {'n': '短纪录', 'v': 29081}]}], '4': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '中国大陆', 'v': 37}, {'n': '日本', 'v': 38}, {'n': '韩国', 'v': 1106}, {'n': '欧美', 'v': 30218}, {'n': '其它', 'v': 40}]}, {'key': '30219', 'name': '版本', 'value': [{'n': '全部', 'v': ''}, {'n': '动画', 'v': 30220}, {'n': '特摄', 'v': 30223}, {'n': '布袋戏', 'v': 30224}, {'n': '特别篇', 'v': 32782}, {'n': '动态漫画', 'v': 32783}, {'n': '动画电影', 'v': 32784}, {'n': '竖版视频', 'v': 32785}, {'n': '轻动画', 'v': 33482}, {'n': '短剧', 'v': 33483}]}, {'key': '30225', 'name': '风格', 'value': [{'n': '全部', 'v': ''}, {'n': '搞笑', 'v': 30230}, {'n': '热血', 'v': 30232}, {'n': '催泪', 'v': 30233}, {'n': '治愈', 'v': 30234}, {'n': '励志', 'v': 30237}, {'n': '机战', 'v': 30241}, {'n': '恋爱', 'v': 30243}, {'n': '科幻', 'v': 30245}, {'n': '奇幻', 'v': 30247}, {'n': '推理', 'v': 30248}, {'n': '校园', 'v': 30249}, {'n': '日常', 'v': 30252}, {'n': '历史', 'v': 30254}, {'n': '美食', 'v': 30255}, {'n': '职场', 'v': 30256}, {'n': '偶像', 'v': 30258}, {'n': '泡面', 'v': 30265}, {'n': '冒险', 'v': 30267}, {'n': '竞技', 'v': 30268}, {'n': '合家欢', 'v': 30270}, {'n': '武侠', 'v': 32792}, {'n': '玄幻', 'v': 32793}]}, {'key': '32795', 'name': '新类型', 'value': [{'n': '全部', 'v': ''}, {'n': '轻小说改编', 'v': 32796}, {'n': '漫画改编', 'v': 32797}, {'n': '游戏改编', 'v': 32798}, {'n': '原创', 'v': 32799}]}], '6': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 151}, {'n': '港台', 'v': 152}, {'n': '韩国', 'v': 33306}, {'n': '欧美', 'v': 154}, {'n': '其它', 'v': 1113}]}, {'key': '18014', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '播报', 'v': 155}, {'n': '访谈', 'v': 156}, {'n': '游戏', 'v': 158}, {'n': '晚会', 'v': 292}, {'n': '曲艺', 'v': 293}, {'n': '脱口秀', 'v': 2118}, {'n': '真人秀', 'v': 2224}, {'n': '竞技', 'v': 30278}, {'n': '爱奇艺出品', 'v': 30279}, {'n': '竞演', 'v': 33860}]}, {'key': '33162', 'name': '题材', 'value': [{'n': '全部', 'v': ''}, {'n': '音乐', 'v': 33163}, {'n': '舞蹈', 'v': 33172}, {'n': '文化', 'v': 33173}, {'n': '美食', 'v': 33182}, {'n': '伦理', 'v': 33184}, {'n': '相亲', 'v': 33193}, {'n': '纪实', 'v': 33195}, {'n': '生活', 'v': 33196}, {'n': '亲子', 'v': 33197}, {'n': '少儿', 'v': 33198}, {'n': '财经', 'v': 33199}, {'n': '健康', 'v': 33200}, {'n': '时尚', 'v': 33203}, {'n': '旅游', 'v': 33205}, {'n': '教育', 'v': 33206}, {'n': '其它', 'v': 33220}, {'n': '爱情', 'v': 33316}, {'n': '搞笑', 'v': 33317}, {'n': '益智', 'v': 33318}, {'n': '职场', 'v': 33319}, {'n': '语言', 'v': 33530}, {'n': '辩论', 'v': 33531}, {'n': '演讲', 'v': 33843}]}], '5': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': 'three_category_id', 'name': '地区', 'value': [{'n': '全部', 'v': ''}, {'n': '内地', 'v': 221}, {'n': '港台', 'v': 220}, {'n': '欧美', 'v': 219}, {'n': '日韩', 'v': 218}, {'n': '拉美', 'v': 217}, {'n': '亚洲地区', 'v': 216}, {'n': '非洲', 'v': 215}]}, {'key': '18009', 'name': '语种', 'value': [{'n': '全部', 'v': ''}, {'n': '普通话', 'v': 91}, {'n': '粤语', 'v': 92}, {'n': '闽南语', 'v': 93}, {'n': '英语', 'v': 94}, {'n': '日语', 'v': 95}, {'n': '韩语', 'v': 96}, {'n': '其它', 'v': 97}]}, {'key': '23554', 'name': '音乐类型', 'value': [{'n': '全部', 'v': ''}, {'n': '单曲MV', 'v': 23556}, {'n': '单曲现场', 'v': 23557}, {'n': '演唱会', 'v': 23558}, {'n': '新闻', 'v': 23559}, {'n': '访谈', 'v': 23560}, {'n': '音乐记录', 'v': 23561}, {'n': '音乐周边', 'v': 23562}, {'n': '音乐节目', 'v': 23563}, {'n': '影视原声', 'v': 23564}, {'n': '音乐短片', 'v': 23565}, {'n': '其他', 'v': 23566}]}], '16': [{'key': 'mode', 'name': '综合排序', 'value': [{'n': '全部', 'v': ''}, {'n': '热播榜', 'v': 11}, {'n': '好评榜', 'v': 8}, {'n': '新上线', 'v': 4}]}, {'key': 'year', 'name': '全部年份', 'value': [{'n': '全部', 'v': ''}, {'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-2011', 'v': '2011_2016'}, {'n': '2010-2000', 'v': '2000_2010'}, {'n': '90年代', 'v': '1990_1999'}, {'n': '80年代', 'v': '1980_1989'}, {'n': '更早', 'v': '1964_1979'}]}, {'key': 'is_purchase', 'name': '全部资费', 'value': [{'n': '全部', 'v': ''}, {'n': '免费', 'v': 0}, {'n': '会员', 'v': 1}, {'n': '付费', 'v': 2}]}, {'key': '18061', 'name': '类型', 'value': [{'n': '全部', 'v': ''}, {'n': '喜剧', 'v': 1296}, {'n': '爱情', 'v': 1297}, {'n': '动作', 'v': 1298}, {'n': '奇幻', 'v': 1299}, {'n': '惊悚', 'v': 1300}, {'n': '悬疑', 'v': 1301}, {'n': '青春', 'v': 1302}]}]},
|
||||||
|
// url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&is_purchase=&mode=24&page_id=fypage&ret_num=48&three_category_id=',
|
||||||
|
url:'https://pcw-api.iqiyi.com/search/recommend/list?channel_id=fyclass&data_type=1&page_id=fypage&ret_num=48',
|
||||||
|
filter_url:'is_purchase={{fl.is_purchase}}&mode={{fl.mode}}&three_category_id={{fl.three_category_id}}&market_release_date_level={{fl.year}}',
|
||||||
|
// url:'https://pcw-api.iqiyi.com/search/video/videolists?channel_id=fyclass&pageNum=fypage&pageSize=24&data_type=1&site=iqiyi',
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电影&电视剧&纪录片&动漫&综艺&音乐&网络电影',
|
||||||
|
class_url:'1&2&3&4&6&5&16',
|
||||||
|
limit:20,
|
||||||
|
// play_parse:true,
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
// lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input',
|
||||||
|
// 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
// 一级:'json:.data.list;.name;.imageUrl;.latestOrder;.albumId',
|
||||||
|
推荐:'',
|
||||||
|
// 推荐:'js:let d=[];fetch_params.headers["user-agent"]=PC_UA;pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;let html=fetch(HOST,fetch_params);let lists=pdfa(html,".qy-mod-li");lists.forEach(function(it){try{let title=pdfh(it,"p.sub&&title");let desc=pdfh(it,".qy-mod-label&&Text");let pic_url=pd(it,"img&&src");d.push({title:title,desc:desc,img:pic_url})}catch(e){}});res=setResult(d);',
|
||||||
|
一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=request(input);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);',
|
||||||
|
// 一级:'js:let d=[];if(MY_CATE==="16"){input=input.replace("channel_id=16","channel_id=1").split("three_category_id")[0];input+="three_category_id=27401"}else if(MY_CATE==="5"){input=input.replace("data_type=1","data_type=2")}let html=fetch(input,fetch_params);let json=JSON.parse(html);if(json.code==="A00003"){fetch_params.headers["user-agent"]=PC_UA;json=JSON.parse(fetch(input,fetch_params))}json.data.list.forEach(function(data){if(data.channelId===1){desc=data.hasOwnProperty("score")?data.score+"分\\t":""}else if(data.channelId===2||data.channelId===4){if(data.latestOrder===data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"集全"}else{if(data.videoCount){desc=(data.hasOwnProperty("score")?data.score+"分\\t":"")+data.latestOrder+"/"+data.videoCount+"集"}else{desc="更新至 "+data.latestOrder+"集"}}}else if(data.channelId===6){desc=data.period+"期"}else if(data.channelId===5){desc=data.focus}else{if(data.latestOrder){desc="更新至 第"+data.latestOrder+"期"}else if(data.period){desc=data.period}else{desc=data.focus}}url=MY_CATE+"$"+data.albumId;d.push({url:url,title:data.name,desc:desc,pic_url:data.imageUrl.replace(".jpg","_390_520.jpg?caplist=jpg,webp")})});setResult(d);',
|
||||||
|
// 一级:'json:.data.list;.name;.imageUrl;.playUrl;.latestOrder',
|
||||||
|
// 二级:{is_json:1,"title":"data.title;data.moviecategory[0]+data.moviecategory[1]","img":"data.cdncover","desc":"data.area[0];data.director[0]","content":"data.description","tabs":"data.playlink_sites;data.playlinksdetail.#idv.quality","lists":"data.playlinksdetail.#idv.default_url"},
|
||||||
|
// 二级:{is_json:1,"title":"data.name+data.subtitle;data.latestOrder","img":"data.imageUrl","desc":"data.categories;data.areas","content":"data.description","tabs":"data.name","lists":"data.playlinksdetail.#idv.default_url"},
|
||||||
|
二级:'',
|
||||||
|
二级:'js:let d=[];let html=request(input);let json=JSON.parse(html).data;VOD={vod_id:"",vod_url:input,vod_name:"",type_name:"",vod_actor:"",vod_year:"",vod_director:"",vod_area:"",vod_content:"",vod_remarks:"",vod_pic:""};VOD.vod_name=json.name;try{if(json.latestOrder){VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+"\\n更新至:第"+json.latestOrder+"集(期)/共"+json.videoCount+"集(期)"}else{VOD.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+json.period}}catch(e){VOD.vod_remarks=json.subtitle}VOD.vod_area=(json.focus||"")+"\\n资费:"+(json.payMark===1?"VIP":"免费")+"\\n地区:"+(json.areas||"");let vsize="579_772";try{vsize=json.imageSize[12]}catch(e){}VOD.vod_pic=json.imageUrl.replace(".jpg","_"+vsize+".jpg?caplist=jpg,webp");VOD.type_name=json.categories.map(function(it){return it.name}).join(",");if(json.people.main_charactor){let vod_actors=[];json.people.main_charactor.forEach(function(it){vod_actors.push(it.name)});VOD.vod_actor=vod_actors.join(",")}VOD.vod_content=json.description;let playlists=[];if(json.channelId===1||json.channelId===5){playlists=[{playUrl:json.playUrl,imageUrl:json.imageUrl,shortTitle:json.shortTitle,focus:json.focus,period:json.period}]}else{if(json.channelId===6){let qs=json.period.split("-")[0];let listUrl="https://pcw-api.iqiyi.com/album/source/svlistinfo?cid=6&sourceid="+json.albumId+"&timelist="+qs;let playData=JSON.parse(request(listUrl)).data[qs];playData.forEach(function(it){playlists.push({playUrl:it.playUrl,imageUrl:it.imageUrl,shortTitle:it.shortTitle,focus:it.focus,period:it.period})})}else{let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page=1";let data=JSON.parse(request(listUrl)).data;let total=data.total;playlists=data.epsodelist;if(total>200){for(let i=2;i<total/200+1;i++){let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page="+i;let data=JSON.parse(request(listUrl)).data;playlists=playlists.concat(data.epsodelist)}}}}playlists.forEach(function(it){d.push({title:it.shortTitle||"第"+it.order+"集",desc:it.subtitle||it.focus||it.period,img:it.imageUrl.replace(".jpg","_480_270.jpg?caplist=jpg,webp"),url:it.playUrl})});VOD.vod_play_from="qiyi";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");',
|
||||||
|
// 二级:'js:let d=[];let html=request(input);let json=JSON.parse(html).data;vod={vod_id:"",vod_url:input,vod_name:"",type_name:"",vod_actor:"",vod_year:"",vod_director:"",vod_area:"",vod_content:"",vod_remarks:"",vod_pic:""};vod.vod_name=json.name;try{if(json.latestOrder){vod.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+"\\n更新至:第"+json.latestOrder+"集(期)/共"+json.videoCount+"集(期)"}else{vod.vod_remarks="类型: "+(json.categories[0].name||"")+"\\t"+(json.categories[1].name||"")+"\\t"+(json.categories[2].name||"")+"\\t"+"评分:"+(json.score||"")+json.period}}catch(e){vod.vod_remarks=json.subtitle}vod.vod_area=(json.focus||"")+"\\n资费:"+(json.payMark===1?"VIP":"免费")+"\\n地区:"+(json.areas||"");let vsize="579_772";try{vsize=json.imageSize[12]}catch(e){}vod.vod_pic=json.imageUrl.replace(".jpg","_"+vsize+".jpg?caplist=jpg,webp");vod.type_name=json.categories.map(function(it){return it.name}).join(",");if(json.people.main_charactor){vod_actors=[];json.people.main_charactor.forEach(function(it){vod_actors.push(it.name)});vod.vod_actor=vod_actors.join(",")}vod.vod_content=json.description;let playlists=[];if(json.channelId===1||json.channelId===5){playlists=[{playUrl:json.playUrl,imageUrl:json.imageUrl,shortTitle:json.shortTitle,focus:json.focus,period:json.period}]}else{if(json.channelId===6){let qs=json.period.split("-")[0];let listUrl="https://pcw-api.iqiyi.com/album/source/svlistinfo?cid=6&sourceid="+json.albumId+"&timelist="+qs;let playData=JSON.parse(request(listUrl)).data[qs];playData.forEach(function(it){playlists.push({playUrl:it.playUrl,imageUrl:it.imageUrl,shortTitle:it.shortTitle,focus:it.focus,period:it.period})})}else{let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page=1";let data=JSON.parse(request(listUrl)).data;let total=data.total;playlists=data.epsodelist;if(total>200){for(let i=2;i<total/200+1;i++){let listUrl="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+json.albumId+"&size=200&page="+i;let data=JSON.parse(request(listUrl)).data;playlists=playlists.concat(data.epsodelist)}}}}playlists.forEach(function(it){d.push({title:it.shortTitle||"第"+it.order+"集",desc:it.subtitle||it.focus||it.period,img:it.imageUrl.replace(".jpg","_480_270.jpg?caplist=jpg,webp"),url:it.playUrl})});vod.vod_play_from="qiyi";vod.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");',
|
||||||
|
搜索:'json:.data.docinfos;.albumDocInfo.albumTitle;.albumDocInfo.albumVImage;.albumDocInfo.channel;.albumDocInfo.albumId;.albumDocInfo.tvFocus',
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
// 搜索验证 -> drpy_ocr自动过搜索验证失败
|
||||||
|
var rule={
|
||||||
|
title:'骚火电影',
|
||||||
|
// host:'https://shdy3.com',
|
||||||
|
host:'http://shapp.us',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,"a:eq(2)&&href");print(src);HOST=src',
|
||||||
|
// url:'/list/fyclass-fypage.html',
|
||||||
|
url:'/list/fyfilter-fypage.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"key":"cateId","name":"类型","value":[{"v":"1","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","n":"奇幻"},{"v":"15","n":"剧情"},{"v":"16","n":"冒险"},{"v":"17","n":"悬疑"},{"v":"18","n":"惊悚"},{"v":"19","n":"其它"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","value":[{"v":"2","n":"全部"},{"v":"20","n":"大陆"},{"v":"21","n":"TVB"},{"v":"22","n":"韩剧"},{"v":"23","n":"美剧"},{"v":"24","n":"日剧"},{"v":"25","n":"英剧"},{"v":"26","n":"台剧"},{"v":"27","n":"其它"}]}],
|
||||||
|
"4":[{"key":"cateId","name":"类型","value":[{"v":"4","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":"LOLI"},{"v":"51","n":"其它"}]}],
|
||||||
|
// "28":[{"key":"cateId","name":"综艺","value":[{"v":"28","n":"脱口秀"},{"v":"29","n":"真人秀"},{"v":"30","n":"选秀"},{"v":"31","n":"美食"},{"v":"32","n":"旅游"},{"v":"33","n":"汽车"},{"v":"34","n":"访谈"},{"v":"35","n":"纪实"},{"v":"36","n":"搞笑"},{"v":"37","n":"其它"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
4:{cateId:'4'}
|
||||||
|
// 28:{cateId:'28'}
|
||||||
|
},
|
||||||
|
searchUrl:'/search.php?page=fypage&searchword=**&searchtype=',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
headers:{'User-Agent':'MOBILE_UA', },
|
||||||
|
timeout:5000,//网站的全局请求超时,默认是3000毫秒
|
||||||
|
class_name:'电影&电视剧&动漫',
|
||||||
|
class_url:'1&2&4',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
pdfh = jsp.pdfh;
|
||||||
|
pdfa = jsp.pdfa;
|
||||||
|
pd = jsp.pd;
|
||||||
|
var html = pd(request(input), 'iframe&&src');
|
||||||
|
var apiurl = '';
|
||||||
|
if (/api\\.hhplayer/.test(html)) {
|
||||||
|
apiurl = 'https://api.hhplayer.com/api.php';
|
||||||
|
} else if (/hkjx\\.hhplayer/.test(html)) {
|
||||||
|
apiurl = 'https://hkjx.hhplayer.com/api.php';
|
||||||
|
} else if (/play\\.hhplayer/.test(html)) {
|
||||||
|
apiurl = 'https://play.hhplayer.com/hhjx/api.php';
|
||||||
|
}
|
||||||
|
var url = '';
|
||||||
|
var t = '';
|
||||||
|
var key = '';
|
||||||
|
eval(pdfh(request(html), 'body&&script,0&&Html').split('var act')[0].replaceAll('var ', ''));
|
||||||
|
var purl = JSON.parse(request(apiurl, {
|
||||||
|
headers: {
|
||||||
|
'Referer': html
|
||||||
|
},
|
||||||
|
body: 'url=' + url + '&t=' + t + '&key=' + key + '&act=0&play=1',
|
||||||
|
method: 'POST'
|
||||||
|
})).url;
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: /http/.test(purl) ? purl: 'https://api.hhplayer.com' + purl,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
推荐:'.v_list,0&&li;*;*;*;*',
|
||||||
|
一级:'.v_list li;a&&title;.lazyload&&data-original;.v_note&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":"h1&&Text;",
|
||||||
|
"img":".m_background&&style",
|
||||||
|
"desc":";;;.v_info_box&&p&&Text",
|
||||||
|
"content":".p_txt.show_part&&Text",
|
||||||
|
"tabs":".from_list&&li",
|
||||||
|
"lists":"#play_link&&li:eq(#id)&&a"
|
||||||
|
},
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'海洋听书',
|
||||||
|
编码:'gb18030',
|
||||||
|
host:'http://m.ychy.cc',
|
||||||
|
homeUrl:'/best.html',
|
||||||
|
url:'/list/fyclass_fypage.html',
|
||||||
|
searchUrl:'/search.asp?page=fypage&searchword=**&searchtype=-1',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA'
|
||||||
|
},
|
||||||
|
class_name:'网络玄幻&恐怖悬疑&评书下载&儿童读物&相声戏曲&传统武侠&都市言情&历史军事&人物传记&广播剧&百家讲坛&有声文学&探险盗墓&职场商战',
|
||||||
|
class_url:'52&17&3&4&7&12&13&15&16&18&32&41&45&81',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
double:true,
|
||||||
|
推荐:'*',
|
||||||
|
一级:'.list-ul li;.tit&&Text;img&&src;p span:eq(0)&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
title:'h2&&Text;.info div:eq(4)&&Text',
|
||||||
|
img:'.bookimg img&&src',
|
||||||
|
desc:'.info div:eq(3)&&Text;;;.info div:eq(2)&&Text;.info div:eq(1)&&Text',
|
||||||
|
content:'.book_intro&&Text',
|
||||||
|
tabs:'.sub_tit',
|
||||||
|
lists:'#playlist li',
|
||||||
|
},
|
||||||
|
搜索:"js:let d=[];pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;log(input);let html=request(input);var list=pdfa(html,'.book_slist&&.bookbox');list.forEach(function(it){d.push({title:pdfh(it,'h4&&Text'),desc:pdfh(it,'.update&&Text'),pic_url:pd(it,'img&&orgsrc'),url:'http://m.ychy.com/book/'+pdfh(it,'.bookbox&&bookid')+'.html'})});setResult(d);",
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'爱上你听书网',
|
||||||
|
host:'https://www.230ts.net',
|
||||||
|
url:'/sort/fyclass/fypage.html',
|
||||||
|
searchUrl:'/search.html?searchtype=name&searchword=**&page=fypage',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_parse: '.nav-ol&&li:gt(0):lt(6);a&&Text;a&&href;.*/(\\w+).html',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:input=input.replace("www","wap")',
|
||||||
|
limit:6,
|
||||||
|
推荐:'#myTab_Content1&&li;.tab-book-title&&Text;*;.tab-book-author&&Text;*',
|
||||||
|
一级:'ul.list-works&&li;.list-book-dt--span&&Text;.lazy&&data-original;.book-author:eq(2)&&a&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
title:'.book-cover&&alt;.book-info&&dd--span:eq(1)&&Text',
|
||||||
|
img:'.book-cover&&src',
|
||||||
|
desc:'.book-info&&dd:eq(4)&&Text;;;.book-info&&dd--span:eq(3)&&Text;.book-info&&dd--span:eq(2)&&Text',
|
||||||
|
content:'.book-des&&Text',
|
||||||
|
tabs:'.playlist-top&&h2',
|
||||||
|
lists:'#playlist:eq(#id)&&li',
|
||||||
|
},
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
var strChineseFirstPY = "YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGKGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY";
|
||||||
|
//此处收录了375个多音字
|
||||||
|
var oMultiDiff = { "19969": "DZ", "19975": "WM", "19988": "QJ", "20048": "YL", "20056": "SC", "20060": "NM", "20094": "QG", "20127": "QJ", "20167": "QC", "20193": "YG", "20250": "KH", "20256": "ZC", "20282": "SC", "20285": "QJG", "20291": "TD", "20314": "YD", "20340": "NE", "20375": "TD", "20389": "YJ", "20391": "CZ", "20415": "PB", "20446": "YS", "20447": "SQ", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20504": "TC", "20608": "KG", "20854": "QJ", "20857": "ZC", "20911": "PF", "20985": "AW", "21032": "PB", "21048": "XQ", "21049": "SC", "21089": "YS", "21119": "JC", "21242": "SB", "21273": "SC", "21305": "YP", "21306": "QO", "21330": "ZC", "21333": "SDC", "21345": "QK", "21378": "CA", "21397": "SC", "21414": "XS", "21442": "SC", "21477": "JG", "21480": "TD", "21484": "ZS", "21494": "YX", "21505": "YX", "21512": "HG", "21523": "XH", "21537": "PB", "21542": "PF", "21549": "KH", "21571": "E", "21574": "DA", "21588": "TD", "21589": "O", "21618": "ZC", "21621": "KHA", "21632": "ZJ", "21654": "KG", "21679": "LKG", "21683": "KH", "21710": "A", "21719": "YH", "21734": "WOE", "21769": "A", "21780": "WN", "21804": "XH", "21834": "A", "21899": "ZD", "21903": "RN", "21908": "WO", "21939": "ZC", "21956": "SA", "21964": "YA", "21970": "TD", "22003": "A", "22031": "JG", "22040": "XS", "22060": "ZC", "22066": "ZC", "22079": "MH", "22129": "XJ", "22179": "XA", "22237": "NJ", "22244": "TD", "22280": "JQ", "22300": "YH", "22313": "XW", "22331": "YQ", "22343": "YJ", "22351": "PH", "22395": "DC", "22412": "TD", "22484": "PB", "22500": "PB", "22534": "ZD", "22549": "DH", "22561": "PB", "22612": "TD", "22771": "KQ", "22831": "HB", "22841": "JG", "22855": "QJ", "22865": "XQ", "23013": "ML", "23081": "WM", "23487": "SX", "23558": "QJ", "23561": "YW", "23586": "YW", "23614": "YW", "23615": "SN", "23631": "PB", "23646": "ZS", "23663": "ZT", "23673": "YG", "23762": "TD", "23769": "ZS", "23780": "QJ", "23884": "QK", "24055": "XH", "24113": "DC", "24162": "ZC", "24191": "GA", "24273": "QJ", "24324": "NL", "24377": "TD", "24378": "QJ", "24439": "PF", "24554": "ZS", "24683": "TD", "24694": "WE", "24733": "LK", "24925": "TN", "25094": "ZG", "25100": "XQ", "25103": "XH", "25153": "PB", "25170": "PB", "25179": "KG", "25203": "PB", "25240": "ZS", "25282": "FB", "25303": "NA", "25324": "KG", "25341": "ZY", "25373": "WZ", "25375": "XJ", "25384": "A", "25457": "A", "25528": "SD", "25530": "SC", "25552": "TD", "25774": "ZC", "25874": "ZC", "26044": "YW", "26080": "WM", "26292": "PB", "26333": "PB", "26355": "ZY", "26366": "CZ", "26397": "ZC", "26399": "QJ", "26415": "ZS", "26451": "SB", "26526": "ZC", "26552": "JG", "26561": "TD", "26588": "JG", "26597": "CZ", "26629": "ZS", "26638": "YL", "26646": "XQ", "26653": "KG", "26657": "XJ", "26727": "HG", "26894": "ZC", "26937": "ZS", "26946": "ZC", "26999": "KJ", "27099": "KJ", "27449": "YQ", "27481": "XS", "27542": "ZS", "27663": "ZS", "27748": "TS", "27784": "SC", "27788": "ZD", "27795": "TD", "27812": "O", "27850": "PB", "27852": "MB", "27895": "SL", "27898": "PL", "27973": "QJ", "27981": "KH", "27986": "HX", "27994": "XJ", "28044": "YC", "28065": "WG", "28177": "SM", "28267": "QJ", "28291": "KH", "28337": "ZQ", "28463": "TL", "28548": "DC", "28601": "TD", "28689": "PB", "28805": "JG", "28820": "QG", "28846": "PB", "28952": "TD", "28975": "ZC", "29100": "A", "29325": "QJ", "29575": "SL", "29602": "FB", "30010": "TD", "30044": "CX", "30058": "PF", "30091": "YSP", "30111": "YN", "30229": "XJ", "30427": "SC", "30465": "SX", "30631": "YQ", "30655": "QJ", "30684": "QJG", "30707": "SD", "30729": "XH", "30796": "LG", "30917": "PB", "31074": "NM", "31085": "JZ", "31109": "SC", "31181": "ZC", "31192": "MLB", "31293": "JQ", "31400": "YX", "31584": "YJ", "31896": "ZN", "31909": "ZY", "31995": "XJ", "32321": "PF", "32327": "ZY", "32418": "HG", "32420": "XQ", "32421": "HG", "32438": "LG", "32473": "GJ", "32488": "TD", "32521": "QJ", "32527": "PB", "32562": "ZSQ", "32564": "JZ", "32735": "ZD", "32793": "PB", "33071": "PF", "33098": "XL", "33100": "YA", "33152": "PB", "33261": "CX", "33324": "BP", "33333": "TD", "33406": "YA", "33426": "WM", "33432": "PB", "33445": "JG", "33486": "ZN", "33493": "TS", "33507": "QJ", "33540": "QJ", "33544": "ZC", "33564": "XQ", "33617": "YT", "33632": "QJ", "33636": "XH", "33637": "YX", "33694": "WG", "33705": "PF", "33728": "YW", "33882": "SR", "34067": "WM", "34074": "YW", "34121": "QJ", "34255": "ZC", "34259": "XL", "34425": "JH", "34430": "XH", "34485": "KH", "34503": "YS", "34532": "HG", "34552": "XS", "34558": "YE", "34593": "ZL", "34660": "YQ", "34892": "XH", "34928": "SC", "34999": "QJ", "35048": "PB", "35059": "SC", "35098": "ZC", "35203": "TQ", "35265": "JX", "35299": "JX", "35782": "SZ", "35828": "YS", "35830": "E", "35843": "TD", "35895": "YG", "35977": "MH", "36158": "JG", "36228": "QJ", "36426": "XQ", "36466": "DC", "36710": "JC", "36711": "ZYG", "36767": "PB", "36866": "SK", "36951": "YW", "37034": "YX", "37063": "XH", "37218": "ZC", "37325": "ZC", "38063": "PB", "38079": "TD", "38085": "QY", "38107": "DC", "38116": "TD", "38123": "YD", "38224": "HG", "38241": "XTC", "38271": "ZC", "38415": "YE", "38426": "KH", "38461": "YD", "38463": "AE", "38466": "PB", "38477": "XJ", "38518": "YT", "38551": "WK", "38585": "ZC", "38704": "XS", "38739": "LJ", "38761": "GJ", "38808": "SQ", "39048": "JG", "39049": "XJ", "39052": "HG", "39076": "CZ", "39271": "XT", "39534": "TD", "39552": "TD", "39584": "PB", "39647": "SB", "39730": "LG", "39748": "TPB", "40109": "ZQ", "40479": "ND", "40516": "HG", "40536": "HG", "40583": "QJ", "40765": "YQ", "40784": "QJ", "40840": "YK", "40863": "QJG" };
|
||||||
|
|
||||||
|
|
||||||
|
function checkCh(ch) {
|
||||||
|
var uni = ch.charCodeAt(0);
|
||||||
|
//如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数
|
||||||
|
if (uni > 40869 || uni < 19968)
|
||||||
|
return ch; //dealWithOthers(ch);
|
||||||
|
//检查是否是多音字,是按多音字处理,不是就直接在strChineseFirstPY字符串中找对应的首字母
|
||||||
|
return (oMultiDiff[uni] ? oMultiDiff[uni] : (strChineseFirstPY.charAt(uni - 19968)));
|
||||||
|
}
|
||||||
|
|
||||||
|
function mkRslt(arr) {
|
||||||
|
var arrRslt = [""];
|
||||||
|
for (var i = 0, len = arr.length; i < len; i++) {
|
||||||
|
var str = arr[i];
|
||||||
|
var strlen = str.length;
|
||||||
|
if (strlen == 1) {
|
||||||
|
for (var k = 0; k < arrRslt.length; k++) {
|
||||||
|
arrRslt[k] += str;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var tmpArr = arrRslt.slice(0);
|
||||||
|
arrRslt = [];
|
||||||
|
for (k = 0; k < strlen; k++) {
|
||||||
|
//复制一个相同的arrRslt
|
||||||
|
var tmp = tmpArr.slice(0);
|
||||||
|
//把当前字符str[k]添加到每个元素末尾
|
||||||
|
for (var j = 0; j < tmp.length; j++) {
|
||||||
|
tmp[j] += str.charAt(k);
|
||||||
|
}
|
||||||
|
//把复制并修改后的数组连接到arrRslt上
|
||||||
|
arrRslt = arrRslt.concat(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arrRslt;
|
||||||
|
}
|
||||||
|
//两端去空格函数
|
||||||
|
String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }
|
||||||
|
|
||||||
|
//参数——中文字符串
|
||||||
|
//返回值——拼音首字母串数组
|
||||||
|
export function getFirstLetterList(str) {
|
||||||
|
if (typeof(str) != "string")
|
||||||
|
throw new Error(-1, "请传入字符串类型的参数!");
|
||||||
|
var arrResult = new Array(); //保存中间结果的数组
|
||||||
|
for (var i = 0, len = str.length; i < len; i++) {
|
||||||
|
//获得unicode码
|
||||||
|
var ch = str.charAt(i);
|
||||||
|
//检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理
|
||||||
|
arrResult.push(checkCh(ch));
|
||||||
|
}
|
||||||
|
//处理arrResult,返回所有可能的拼音首字母串数组
|
||||||
|
return mkRslt(arrResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断字符串是否全是中文
|
||||||
|
function isAllChinese(str) {
|
||||||
|
return /^[\u4E00-\u9FA5]+$/.test(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断字符是否为中文
|
||||||
|
function isChinese(char) {
|
||||||
|
return /^[\u4E00-\u9FA5]$/.test(char);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 中文拼音名称排序
|
||||||
|
export const sortListByCN = (vodList,key,order) => {
|
||||||
|
if(!key){
|
||||||
|
return vodList
|
||||||
|
}
|
||||||
|
order = order||'asc'; // 默认正序
|
||||||
|
let ASCarr = vodList.sort((a, b) => {
|
||||||
|
a = a[key];
|
||||||
|
b = b[key];
|
||||||
|
// 数字排在字符串前面
|
||||||
|
if (typeof a === 'number' && typeof b === 'string') {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof a === 'string' && typeof b === 'number') {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 当存在非数字时
|
||||||
|
if (isNaN(a) || isNaN(b)) {
|
||||||
|
|
||||||
|
// 全汉字的排在非全汉字的后面
|
||||||
|
if (isAllChinese(a) && !isAllChinese(b)) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isAllChinese(a) && isAllChinese(b)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 存在非数字的数据时,都转为字符串进行比较
|
||||||
|
a = a.toString();
|
||||||
|
b = b.toString();
|
||||||
|
|
||||||
|
let result = 0;
|
||||||
|
|
||||||
|
// 依次比较两个字符串的各项字符
|
||||||
|
for (let index = 0; index < ((a.length - b.length) ? b.length : a.length); index++) {
|
||||||
|
|
||||||
|
// 汉字排在非汉字的后面
|
||||||
|
if (!isChinese(a[index]) && isChinese(b[index])) {
|
||||||
|
result = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isChinese(a[index]) && !isChinese(b[index])) {
|
||||||
|
result = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 若两个汉字进行比较,则比较他们的拼音首字母
|
||||||
|
if (isChinese(a[index]) && isChinese(b[index])) {
|
||||||
|
let pinyinA = getFirstLetterList(a[index]).toString();
|
||||||
|
let pinyinB = getFirstLetterList(b[index]).toString();
|
||||||
|
|
||||||
|
result = pinyinA.localeCompare(pinyinB, 'zh-Hans-CN', { sensitivity: 'accent' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 若已经比较出结果,则跳出循环,不再继续比较剩余字符
|
||||||
|
if (result !== 0) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只要有一个无法转换为数字——转换为字符串进行比较——先按字符排序,然后按照数字排序
|
||||||
|
return result || a.toString().localeCompare(b.toString(), 'zh-Hans-CN', { sensitivity: 'accent' });
|
||||||
|
} else {
|
||||||
|
// 都能转换为数字——转换为数字进行比较——从小到大排序
|
||||||
|
return Number(a) - Number(b);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if(order==='desc'){
|
||||||
|
ASCarr.reverse();
|
||||||
|
}
|
||||||
|
return ASCarr
|
||||||
|
};
|
||||||
|
|
||||||
|
// 首字母开头排序
|
||||||
|
export const sortListByFirst = (vodList,key) => {
|
||||||
|
key = key||'vod_name';
|
||||||
|
// 名字以特殊符号开头的应用列表
|
||||||
|
const symbol_list = [];
|
||||||
|
// 名字以中文开头的应用列表
|
||||||
|
const cn_list = [];
|
||||||
|
// 名字以英文开头的应用列表
|
||||||
|
const en_list = [];
|
||||||
|
// 名字以数字开头的应用列表
|
||||||
|
const num_list = [];
|
||||||
|
|
||||||
|
vodList.forEach((vod) => {
|
||||||
|
const { vod_name } = vod;
|
||||||
|
//通过正则进行数据分类
|
||||||
|
if (/[\u4e00-\u9fa5]/.test(vod_name[0])) {
|
||||||
|
cn_list.push(vod);
|
||||||
|
} else if (/[a-zA-Z]/.test(vod_name[0])) {
|
||||||
|
en_list.push(vod);
|
||||||
|
} else if (/[\d]/.test(vod_name[0])) {
|
||||||
|
num_list.push(vod);
|
||||||
|
} else {
|
||||||
|
symbol_list.push(vod);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//按照要求的方式进行数据排序重组
|
||||||
|
const newList = [
|
||||||
|
...cn_list.sort((a, b) => a.vod_name[0]?.localeCompare(b.vod_name[0])),
|
||||||
|
...en_list.sort((a, b) => a.vod_name[0].localeCompare(b.vod_name[0])),//localeCompare可以不区分大小写的进行排序
|
||||||
|
...num_list.sort((a, b) => a.vod_name[0] - b.vod_name[0]),
|
||||||
|
...symbol_list.sort((a, b) => a.vod_name[0] - b.vod_name[0])
|
||||||
|
];
|
||||||
|
return newList
|
||||||
|
};
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
muban.首图2.二级.desc = '.data:eq(0)&&Text;;;.data--span:eq(2)&&Text;.data--span:eq(1)&&Text';
|
||||||
|
muban.首图2.二级.tabs = '.stui-pannel__head h3';
|
||||||
|
var rule = {
|
||||||
|
title:'星辰',
|
||||||
|
模板:'首图2',
|
||||||
|
host:'http://www.40yb.com',
|
||||||
|
// url:'/fyclass/indexfypage.html[/fyclass/index.html]',
|
||||||
|
url:'/fyfilter/indexfypage.html[/fyfilter/index.html]',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}',
|
||||||
|
filter:{
|
||||||
|
"dianying":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"dianying"},{"n":"动作片","v":"dongzuopian"},{"n":"爱情片","v":"aiqingpian"},{"n":"科幻片","v":"kehuanpian"},{"n":"恐怖片","v":"kongbupian"},{"n":"喜剧片","v":"xijupian"},{"n":"剧情片","v":"juqingpian"}]}],
|
||||||
|
"dianshiju":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"dianshiju"},{"n":"国产剧","v":"guochanju"},{"n":"港台剧","v":"tangtaiju"},{"n":"欧美剧","v":"oumeiju"},{"n":"日韩剧","v":"rihanju"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
dianying:{cateId:'dianying'},
|
||||||
|
dianshiju:{cateId:'dianshiju'},
|
||||||
|
zongyi:{cateId:'zongyi'},
|
||||||
|
dongman:{cateId:'dongman'}
|
||||||
|
},
|
||||||
|
// searchUrl:'/search.php?page=fypage&searchword=**&searchtype=',
|
||||||
|
searchUrl:'/search.php#searchword=**;post',
|
||||||
|
class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?)/.*html',
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'听书网',
|
||||||
|
host:'https://www.tingbook.cc',
|
||||||
|
// url:'/book/fyclass_fypage.html',
|
||||||
|
url:'/book/fyclass-fypage.html',
|
||||||
|
searchUrl:'/search.php?page=fypage&searchword=**&searchtype=-1',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_parse:'.nav li;a&&Text;a&&href;/book/(\\d+).html',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:let purl=request(input).match(/r now=\"(.*?)\"/)[1];log("=================================>"+purl);input={jx:0,url:purl,parse:0}',
|
||||||
|
limit:6,
|
||||||
|
double:true,
|
||||||
|
推荐:'.row2;ul&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href',
|
||||||
|
一级:'.row3&&li;.f-bold&&Text;.img-box img&&src;.f-gray&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
"title":"h2&&Text",
|
||||||
|
"img":".img-box img&&src",
|
||||||
|
"desc":"section&&p:eq(1)&&Text",
|
||||||
|
"content":"section&&p:eq(2)&&Text",
|
||||||
|
"tabs":"#yuedu&&h2",
|
||||||
|
"lists":"#yuedu:eq(#id)&&ul&&li"
|
||||||
|
},
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'童趣',
|
||||||
|
host:'https://www.boosj.com',
|
||||||
|
homeUrl:'/baby/',
|
||||||
|
// url: '/search_res_3362_fyfilter',
|
||||||
|
url: '/search_res_3362_fyclassfyfilter',
|
||||||
|
// filter_url:'{{fl.year}}fyclass_fypage_{{fl.by}}.html{{fl.area}}',
|
||||||
|
filter_url:'_fypage_{{fl.by}}.html{{fl.area}}',
|
||||||
|
filter:{
|
||||||
|
"_":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_28":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_582":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3364":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3366":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3367":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3622":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3782":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3822":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_3842":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4402":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4583":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4762":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4842":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4843":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4844":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_4845":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_5102":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}],
|
||||||
|
"_5142":[{"key":"area","name":"年龄段","value":[{"n":"全部","v":""},{"n":"6岁以上","v":"?p367=370"},{"n":"3~6岁","v":"?p367=369"},{"n":"0~3岁","v":"?p367=368"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"最新发布","v":"lately"},{"n":"最多播放","v":"pop"},{"n":"最多评论","v":"view"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
_:{cateId:'_'},
|
||||||
|
_28:{cateId:'_28'},
|
||||||
|
_582:{cateId:'_582'},
|
||||||
|
_3364:{cateId:'_3364'},
|
||||||
|
_3366:{cateId:'_3366'},
|
||||||
|
_3367:{cateId:'_3367'},
|
||||||
|
_3622:{cateId:'_3622'},
|
||||||
|
_3782:{cateId:'_3782'},
|
||||||
|
_3822:{cateId:'_3822'},
|
||||||
|
_3842:{cateId:'_3842'},
|
||||||
|
_4402:{cateId:'_4402'},
|
||||||
|
_4583:{cateId:'_4583'},
|
||||||
|
_4762:{cateId:'_4762'},
|
||||||
|
_4842:{cateId:'_4842'},
|
||||||
|
_4843:{cateId:'_4843'},
|
||||||
|
_4844:{cateId:'_4844'},
|
||||||
|
_4845:{cateId:'_4845'},
|
||||||
|
_5102:{cateId:'_5102'},
|
||||||
|
_5142:{cateId:'_5142'}
|
||||||
|
},
|
||||||
|
searchUrl: 'https://search.boosj.com/m_ajax?q=**&p=fypage&typeId=3362',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,//网站的全局请求超时,默认是3000毫秒
|
||||||
|
class_name:'全部&辅食&动画&儿童舞蹈&少儿英语&儿童歌曲&才艺&播视自制&故事&亲子教育&美术&其他&儿童游戏&识物&绘本&古诗&科普&儿童玩具&播视童趣儿童玩具',
|
||||||
|
class_url:'_&_28&_582&_3364&_3366&_3367&_3622&_3782&_3822&_3842&_4402&_4583&_4762&_4842&_4843&_4844&_4845&_5102&_5142',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:"js:var body=JSON.parse(request('https://gslb.boosj.com/ipv2.json'));body._id=input.match(/\\d+/)[0];var json=JSON.parse(request(buildUrl(body.gslb,body)));input=json.url+'?'+json.t",
|
||||||
|
limit:6,
|
||||||
|
推荐: 'div.pubpic;a&&title;img&&src;;a&&href',
|
||||||
|
// double: true, // 推荐内容是否双层定位
|
||||||
|
一级: "div.bj-col4:has(h3);a&&title;img&&data-original;.played&&Text;a&&href",
|
||||||
|
二级: '*',
|
||||||
|
detailUrl:'/fyid.html',
|
||||||
|
搜索: 'json:body.result;resourceName;imageUrl;intro;id;clickNumStr',
|
||||||
|
}
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
(function(global){var re={starts_with_slashes:/^\/+/,ends_with_slashes:/\/+$/,pluses:/\+/g,query_separator:/[&;]/,uri_parser:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@]*))?)?@)?(\[[0-9a-fA-F:.]+\]|[^:\/?#]*)(?::(\d+|(?=:)))?(:)?)((((?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/};if(!Array.prototype.forEach){Array.prototype.forEach=function(callback,thisArg){var T,k;if(this==null){throw new TypeError(' this is null or not defined');}var O=Object(this);var len=O.length>>>0;if(typeof callback!=="function"){throw new TypeError(callback+' is not a function');}if(arguments.length>1){T=thisArg}k=0;while(k<len){var kValue;if(k in O){kValue=O[k];callback.call(T,kValue,k,O)}k++}}}function decode(s){if(s){s=s.toString().replace(re.pluses,'%20');s=decodeURIComponent(s)}return s}function parseUri(str){var parser=re.uri_parser;var parserKeys=["source","protocol","authority","userInfo","user","password","host","port","isColonUri","relative","path","directory","file","query","anchor"];var m=parser.exec(str||'');var parts={};parserKeys.forEach(function(key,i){parts[key]=m[i]||''});return parts}function parseQuery(str){var i,ps,p,n,k,v,l;var pairs=[];if(typeof(str)==='undefined'||str===null||str===''){return pairs}if(str.indexOf('?')===0){str=str.substring(1)}ps=str.toString().split(re.query_separator);for(i=0,l=ps.length;i<l;i++){p=ps[i];n=p.indexOf('=');if(n!==0){k=decode(p.substring(0,n));v=decode(p.substring(n+1));pairs.push(n===-1?[p,null]:[k,v])}}return pairs}function Uri(str){this.uriParts=parseUri(str);this.queryPairs=parseQuery(this.uriParts.query);this.hasAuthorityPrefixUserPref=null}['protocol','userInfo','host','port','path','anchor'].forEach(function(key){Uri.prototype[key]=function(val){if(typeof val!=='undefined'){this.uriParts[key]=val}return this.uriParts[key]}});Uri.prototype.hasAuthorityPrefix=function(val){if(typeof val!=='undefined'){this.hasAuthorityPrefixUserPref=val}if(this.hasAuthorityPrefixUserPref===null){return(this.uriParts.source.indexOf('//')!==-1)}else{return this.hasAuthorityPrefixUserPref}};Uri.prototype.isColonUri=function(val){if(typeof val!=='undefined'){this.uriParts.isColonUri=!!val}else{return!!this.uriParts.isColonUri}};Uri.prototype.query=function(val){var s='',i,param,l;if(typeof val!=='undefined'){this.queryPairs=parseQuery(val)}for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];if(s.length>0){s+='&'}if(param[1]===null){s+=param[0]}else{s+=param[0];s+='=';if(typeof param[1]!=='undefined'){s+=encodeURIComponent(param[1])}}}return s.length>0?'?'+s:s};Uri.prototype.getQueryParamValue=function(key){var param,i,l;for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];if(key===param[0]){return param[1]}}};Uri.prototype.getQueryParamValues=function(key){var arr=[],i,param,l;for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];if(key===param[0]){arr.push(param[1])}}return arr};Uri.prototype.deleteQueryParam=function(key,val){var arr=[],i,param,keyMatchesFilter,valMatchesFilter,l;for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];keyMatchesFilter=decode(param[0])===decode(key);valMatchesFilter=param[1]===val;if((arguments.length===1&&!keyMatchesFilter)||(arguments.length===2&&(!keyMatchesFilter||!valMatchesFilter))){arr.push(param)}}this.queryPairs=arr;return this};Uri.prototype.addQueryParam=function(key,val,index){if(arguments.length===3&&index!==-1){index=Math.min(index,this.queryPairs.length);this.queryPairs.splice(index,0,[key,val])}else if(arguments.length>0){this.queryPairs.push([key,val])}return this};Uri.prototype.hasQueryParam=function(key){var i,len=this.queryPairs.length;for(i=0;i<len;i++){if(this.queryPairs[i][0]==key)return true}return false};Uri.prototype.replaceQueryParam=function(key,newVal,oldVal){var index=-1,len=this.queryPairs.length,i,param;if(arguments.length===3){for(i=0;i<len;i++){param=this.queryPairs[i];if(decode(param[0])===decode(key)&&decodeURIComponent(param[1])===decode(oldVal)){index=i;break}}if(index>=0){this.deleteQueryParam(key,decode(oldVal)).addQueryParam(key,newVal,index)}}else{for(i=0;i<len;i++){param=this.queryPairs[i];if(decode(param[0])===decode(key)){index=i;break}}this.deleteQueryParam(key);this.addQueryParam(key,newVal,index)}return this};['protocol','hasAuthorityPrefix','isColonUri','userInfo','host','port','path','query','anchor'].forEach(function(key){var method='set'+key.charAt(0).toUpperCase()+key.slice(1);Uri.prototype[method]=function(val){this[key](val);return this}});Uri.prototype.scheme=function(){var s='';if(this.protocol()){s+=this.protocol();if(this.protocol().indexOf(':')!==this.protocol().length-1){s+=':'}s+='//'}else{if(this.hasAuthorityPrefix()&&this.host()){s+='//'}}return s};Uri.prototype.origin=function(){var s=this.scheme();if(this.userInfo()&&this.host()){s+=this.userInfo();if(this.userInfo().indexOf('@')!==this.userInfo().length-1){s+='@'}}if(this.host()){s+=this.host();if(this.port()||(this.path()&&this.path().substr(0,1).match(/[0-9]/))){s+=':'+this.port()}}return s};Uri.prototype.addTrailingSlash=function(){var path=this.path()||'';if(path.substr(-1)!=='/'){this.path(path+'/')}return this};Uri.prototype.toString=function(){var path,s=this.origin();if(this.isColonUri()){if(this.path()){s+=':'+this.path()}}else if(this.path()){path=this.path();if(!(re.ends_with_slashes.test(s)||re.starts_with_slashes.test(path))){s+='/'}else{if(s){s.replace(re.ends_with_slashes,'/')}path=path.replace(re.starts_with_slashes,'/')}s+=path}else{if(this.host()&&(this.query().toString()||this.anchor())){s+='/'}}if(this.query().toString()){s+=this.query().toString()}if(this.anchor()){if(this.anchor().indexOf('#')!==0){s+='#'}s+=this.anchor()}return s};Uri.prototype.clone=function(){return new Uri(this.toString())};if(typeof define==='function'&&define.amd){define(function(){return Uri})}else if(typeof module!=='undefined'&&typeof module.exports!=='undefined'){module.exports=Uri}else{globalThis.Uri=Uri}}(this));
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
(function(global){var re={starts_with_slashes:/^\/+/,ends_with_slashes:/\/+$/,pluses:/\+/g,query_separator:/[&;]/,uri_parser:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@]*))?)?@)?(\[[0-9a-fA-F:.]+\]|[^:\/?#]*)(?::(\d+|(?=:)))?(:)?)((((?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/};if(!Array.prototype.forEach){Array.prototype.forEach=function(callback,thisArg){var T,k;if(this==null){throw new TypeError(' this is null or not defined');}var O=Object(this);var len=O.length>>>0;if(typeof callback!=="function"){throw new TypeError(callback+' is not a function');}if(arguments.length>1){T=thisArg}k=0;while(k<len){var kValue;if(k in O){kValue=O[k];callback.call(T,kValue,k,O)}k++}}}function decode(s){if(s){s=s.toString().replace(re.pluses,'%20');s=decodeURIComponent(s)}return s}function parseUri(str){var parser=re.uri_parser;var parserKeys=["source","protocol","authority","userInfo","user","password","host","port","isColonUri","relative","path","directory","file","query","anchor"];var m=parser.exec(str||'');var parts={};parserKeys.forEach(function(key,i){parts[key]=m[i]||''});return parts}function parseQuery(str){var i,ps,p,n,k,v,l;var pairs=[];if(typeof(str)==='undefined'||str===null||str===''){return pairs}if(str.indexOf('?')===0){str=str.substring(1)}ps=str.toString().split(re.query_separator);for(i=0,l=ps.length;i<l;i++){p=ps[i];n=p.indexOf('=');if(n!==0){k=decode(p.substring(0,n));v=decode(p.substring(n+1));pairs.push(n===-1?[p,null]:[k,v])}}return pairs}function Uri(str){this.uriParts=parseUri(str);this.queryPairs=parseQuery(this.uriParts.query);this.hasAuthorityPrefixUserPref=null}['protocol','userInfo','host','port','path','anchor'].forEach(function(key){Uri.prototype[key]=function(val){if(typeof val!=='undefined'){this.uriParts[key]=val}return this.uriParts[key]}});Uri.prototype.hasAuthorityPrefix=function(val){if(typeof val!=='undefined'){this.hasAuthorityPrefixUserPref=val}if(this.hasAuthorityPrefixUserPref===null){return(this.uriParts.source.indexOf('//')!==-1)}else{return this.hasAuthorityPrefixUserPref}};Uri.prototype.isColonUri=function(val){if(typeof val!=='undefined'){this.uriParts.isColonUri=!!val}else{return!!this.uriParts.isColonUri}};Uri.prototype.query=function(val){var s='',i,param,l;if(typeof val!=='undefined'){this.queryPairs=parseQuery(val)}for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];if(s.length>0){s+='&'}if(param[1]===null){s+=param[0]}else{s+=param[0];s+='=';if(typeof param[1]!=='undefined'){s+=encodeURIComponent(param[1])}}}return s.length>0?'?'+s:s};Uri.prototype.getQueryParamValue=function(key){var param,i,l;for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];if(key===param[0]){return param[1]}}};Uri.prototype.getQueryParamValues=function(key){var arr=[],i,param,l;for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];if(key===param[0]){arr.push(param[1])}}return arr};Uri.prototype.deleteQueryParam=function(key,val){var arr=[],i,param,keyMatchesFilter,valMatchesFilter,l;for(i=0,l=this.queryPairs.length;i<l;i++){param=this.queryPairs[i];keyMatchesFilter=decode(param[0])===decode(key);valMatchesFilter=param[1]===val;if((arguments.length===1&&!keyMatchesFilter)||(arguments.length===2&&(!keyMatchesFilter||!valMatchesFilter))){arr.push(param)}}this.queryPairs=arr;return this};Uri.prototype.addQueryParam=function(key,val,index){if(arguments.length===3&&index!==-1){index=Math.min(index,this.queryPairs.length);this.queryPairs.splice(index,0,[key,val])}else if(arguments.length>0){this.queryPairs.push([key,val])}return this};Uri.prototype.hasQueryParam=function(key){var i,len=this.queryPairs.length;for(i=0;i<len;i++){if(this.queryPairs[i][0]==key)return true}return false};Uri.prototype.replaceQueryParam=function(key,newVal,oldVal){var index=-1,len=this.queryPairs.length,i,param;if(arguments.length===3){for(i=0;i<len;i++){param=this.queryPairs[i];if(decode(param[0])===decode(key)&&decodeURIComponent(param[1])===decode(oldVal)){index=i;break}}if(index>=0){this.deleteQueryParam(key,decode(oldVal)).addQueryParam(key,newVal,index)}}else{for(i=0;i<len;i++){param=this.queryPairs[i];if(decode(param[0])===decode(key)){index=i;break}}this.deleteQueryParam(key);this.addQueryParam(key,newVal,index)}return this};['protocol','hasAuthorityPrefix','isColonUri','userInfo','host','port','path','query','anchor'].forEach(function(key){var method='set'+key.charAt(0).toUpperCase()+key.slice(1);Uri.prototype[method]=function(val){this[key](val);return this}});Uri.prototype.scheme=function(){var s='';if(this.protocol()){s+=this.protocol();if(this.protocol().indexOf(':')!==this.protocol().length-1){s+=':'}s+='//'}else{if(this.hasAuthorityPrefix()&&this.host()){s+='//'}}return s};Uri.prototype.origin=function(){var s=this.scheme();if(this.userInfo()&&this.host()){s+=this.userInfo();if(this.userInfo().indexOf('@')!==this.userInfo().length-1){s+='@'}}if(this.host()){s+=this.host();if(this.port()||(this.path()&&this.path().substr(0,1).match(/[0-9]/))){s+=':'+this.port()}}return s};Uri.prototype.addTrailingSlash=function(){var path=this.path()||'';if(path.substr(-1)!=='/'){this.path(path+'/')}return this};Uri.prototype.toString=function(){var path,s=this.origin();if(this.isColonUri()){if(this.path()){s+=':'+this.path()}}else if(this.path()){path=this.path();if(!(re.ends_with_slashes.test(s)||re.starts_with_slashes.test(path))){s+='/'}else{if(s){s.replace(re.ends_with_slashes,'/')}path=path.replace(re.starts_with_slashes,'/')}s+=path}else{if(this.host()&&(this.query().toString()||this.anchor())){s+='/'}}if(this.query().toString()){s+=this.query().toString()}if(this.anchor()){if(this.anchor().indexOf('#')!==0){s+='#'}s+=this.anchor()}return s};Uri.prototype.clone=function(){return new Uri(this.toString())};if(typeof define==='function'&&define.amd){define(function(){return Uri})}else if(typeof module!=='undefined'&&typeof module.exports!=='undefined'){module.exports=Uri}else{globalThis.Uri=Uri}}(this));
|
||||||
@@ -0,0 +1,155 @@
|
|||||||
|
import {load, _, Uri} from './lib/cat.js';
|
||||||
|
import {log} from './lib/utils.js';
|
||||||
|
import {initAli, detailContent, playContent} from './lib/ali.js';
|
||||||
|
|
||||||
|
let siteKey = 'wobg';
|
||||||
|
let siteType = 0;
|
||||||
|
let siteUrl = 'https://wobge.run.goorm.io';
|
||||||
|
let 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";
|
||||||
|
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/
|
||||||
|
|
||||||
|
async function init(cfg) {
|
||||||
|
try {
|
||||||
|
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||||
|
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||||
|
await initAli(cfg);
|
||||||
|
} catch (e) {
|
||||||
|
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function request(reqUrl, agentSp) {
|
||||||
|
let header = {
|
||||||
|
'user-agent': agentSp || 'okhttp/3.12.0',
|
||||||
|
};
|
||||||
|
let uri = new Uri(reqUrl);
|
||||||
|
let res = await req(uri.toString(), {
|
||||||
|
headers: header,
|
||||||
|
timeout: 10000
|
||||||
|
});
|
||||||
|
let content = res.content;
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getHeader() {
|
||||||
|
let header = {};
|
||||||
|
header['User-Agent'] = UA;
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getString(url) {
|
||||||
|
let res = await req(url, {
|
||||||
|
headers: getHeader()
|
||||||
|
});
|
||||||
|
return res.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
let classes = [{'type_id': 1, 'type_name' : '自营电影'},{'type_id': 2, 'type_name' : '自营剧集'},{'type_id': 3, 'type_name' : '动漫'},{'type_id': 4, 'type_name' : '综艺'},{'type_id': 5, 'type_name' : '音乐'}];
|
||||||
|
let filterObj = {};
|
||||||
|
async function home(filter) {
|
||||||
|
return JSON.stringify({
|
||||||
|
class: classes,
|
||||||
|
filters: filterObj,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function homeVod() {
|
||||||
|
return '{}';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function category(tid, pg, filter, extend) {
|
||||||
|
let reqUrl = siteUrl + '/index.php/vod/show/id/'+tid+'/page/'+pg+'.html';
|
||||||
|
let con = await request(reqUrl, UA);
|
||||||
|
const $ = load(con);
|
||||||
|
let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
|
||||||
|
let videos = [];
|
||||||
|
for(var item of items) {
|
||||||
|
let oneA = $(item).find('.module-item-cover .module-item-pic a').first();
|
||||||
|
let href = oneA.attr('href');
|
||||||
|
let name = oneA.attr('title');
|
||||||
|
let oneImg = $(item).find('.module-item-cover .module-item-pic img').first();
|
||||||
|
let pic = oneImg.attr('data-src');
|
||||||
|
let remark = $(item).find('.module-item-text').first().text();
|
||||||
|
videos.push({
|
||||||
|
vod_id: href,
|
||||||
|
vod_name: name,
|
||||||
|
vod_pic: pic,
|
||||||
|
vod_remarks: remark,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const hasMore = $('#page > a:contains(下一页)').length > 0;
|
||||||
|
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||||
|
return JSON.stringify({
|
||||||
|
page: parseInt(pg),
|
||||||
|
pagecount: pgCount,
|
||||||
|
limit: 72,
|
||||||
|
total: 72 * pgCount,
|
||||||
|
list: videos,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function detail(id) {
|
||||||
|
try {
|
||||||
|
await log('detail:id:' + id);
|
||||||
|
let preMatches = id.match(patternAli);
|
||||||
|
if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]);
|
||||||
|
let url = siteUrl + id;
|
||||||
|
let aliUrl = await getString(url);
|
||||||
|
let matches = aliUrl.match(patternAli);
|
||||||
|
console.log('detailmatche');
|
||||||
|
console.log(matches[1]);
|
||||||
|
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
|
||||||
|
return '';
|
||||||
|
} catch (e) {
|
||||||
|
await log( 'detail:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function play(flag, id, flags) {
|
||||||
|
try {
|
||||||
|
return await playContent(flag, id, flags);
|
||||||
|
} catch (e) {
|
||||||
|
await log( 'play:' + e.message + ' line:' + e.lineNumber);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function search(wd, quick) {
|
||||||
|
await log('search' + wd);
|
||||||
|
let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd;
|
||||||
|
let html = await getString(searchUrl);
|
||||||
|
let $ = load(html);
|
||||||
|
let items = $('.module-search-item');
|
||||||
|
let videos = [];
|
||||||
|
for(var item of items) {
|
||||||
|
let vodId = $(item).find(".video-serial")[0].attribs.href;
|
||||||
|
let name = $(item).find(".video-serial")[0].attribs.title;
|
||||||
|
let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src'];
|
||||||
|
let remark = '';
|
||||||
|
videos.push({
|
||||||
|
vod_id: vodId,
|
||||||
|
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,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'新片场',
|
||||||
|
host:'https://www.xinpianchang.com',
|
||||||
|
homeUrl:'/discover/article-0-0-all-all-0-0-hot',
|
||||||
|
// url: '/discover/article-fyclass-0-all-all-0-0-hot?page=fypage',
|
||||||
|
url: '/discover/article-fyclass-0-fyfilter?page=fypage',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.time or "all"}}-{{fl.dpi or "all"}}-{{fl.pr or "0"}}-0-{{fl.by or "hot"}}',
|
||||||
|
filter:{
|
||||||
|
"0":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"1":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"31":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"16":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"76":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"61":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"141":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"81":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"142":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"143":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"144":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"129":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"145":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"29":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"49":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"69":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"27":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}],
|
||||||
|
"146":[{"key":"by","name":"排序","value":[{"n":"最多热度","v":"hot"},{"n":"编辑精选","v":"pick"},{"n":"最新发布","v":"addtime"}]},{"key":"time","name":"时长","value":[{"n":"全部","v":"all"},{"n":"1分钟以下","v":"0T60"},{"n":"1-5分钟","v":"60T300"},{"n":"5-10分钟","v":"300T600"},{"n":"10-30分钟","v":"600T1800"}]},{"key":"pr","name":"比例","value":[{"n":"全部","v":"0"},{"n":"横屏","v":"1"},{"n":"竖屏","v":"2"}]},{"key":"dpi","name":"清晰","value":[{"n":"全部","v":"all"},{"n":"2K","v":"2k"},{"n":"4K","v":"4k"}]}]
|
||||||
|
},
|
||||||
|
searchUrl: '/search?kw=**',
|
||||||
|
searchable:2,//是否启用全局搜索,
|
||||||
|
quickSearch:0,//是否启用快速搜索,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,//网站的全局请求超时,默认是3000毫秒
|
||||||
|
class_parse: '.flex-wrap.ml-8&&.rounded;.px-3&&Text;a&&href;.*/\\w+-(\\d+)',
|
||||||
|
play_parse:true,
|
||||||
|
// lazy:`js:
|
||||||
|
// let html=request(input);
|
||||||
|
// let json=JSON.parse(jsp.pdfh(html, "#__NEXT_DATA__&&Html")).props.pageProps.detail.video.content;
|
||||||
|
// input = json.progressive[0].https_url;
|
||||||
|
// `,
|
||||||
|
limit:6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
推荐: '*',
|
||||||
|
// 一级: 'body&&.fAPlpj;img&&alt;img&&src;.px-3.text-xs&&Text;a&&href',
|
||||||
|
一级:`js:
|
||||||
|
var d = [];
|
||||||
|
pdfh = jsp.pdfh;
|
||||||
|
pdfa = jsp.pdfa;
|
||||||
|
pd = jsp.pd;
|
||||||
|
var html = request(input);
|
||||||
|
var dw = pdfh(html,'head&&style:eq(2)&&Html').match(/.*(\\..*?):hover/)[1];
|
||||||
|
let list = pdfa(html, 'body&&'+dw);
|
||||||
|
list.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
title: pdfh(it, "img&&alt"),
|
||||||
|
desc: pdfh(it, ".list-remarks&&Text"),
|
||||||
|
pic_url: pd(it, "img&&src"),
|
||||||
|
url: pd(it, "a&&href")
|
||||||
|
})
|
||||||
|
});
|
||||||
|
setResult(d)
|
||||||
|
`,
|
||||||
|
二级:`js:
|
||||||
|
try {
|
||||||
|
let json = JSON.parse(pdfh(request(input),'#__NEXT_DATA__&&Html'));
|
||||||
|
let node = json.props.pageProps.detail;
|
||||||
|
VOD = {
|
||||||
|
vod_id: node.id,
|
||||||
|
vod_name: node.title,
|
||||||
|
vod_pic: node.cover,
|
||||||
|
type_name: node.editor_tags.map(function(it) {
|
||||||
|
return it.name
|
||||||
|
}).join("/"),
|
||||||
|
vod_year: new Date(node.publish_time * 1000).getFullYear(),
|
||||||
|
vod_area: node.author.userinfo.location.country.name,
|
||||||
|
vod_director: node.author.userinfo.username,
|
||||||
|
vod_content: node.content.replaceAll('\\n','/').strip()
|
||||||
|
};
|
||||||
|
let episodes = node.video.content.progressive;
|
||||||
|
let playMap = {};
|
||||||
|
if (typeof play_url === "undefined") {
|
||||||
|
var play_url = ""
|
||||||
|
}
|
||||||
|
let vod_play_url = episodes.map(function(it) {
|
||||||
|
return it.profile + "$" + it.https_url
|
||||||
|
}).join("#")
|
||||||
|
VOD.vod_play_from = '道长在线';
|
||||||
|
VOD.vod_play_url = vod_play_url
|
||||||
|
} catch (e) {
|
||||||
|
log("获取二级详情页发生错误:" + e.message)
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
搜索: '*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// 新视觉影院新发布页: https://www.5280.fun
|
||||||
|
var rule={
|
||||||
|
title:'新视觉影视',
|
||||||
|
// host:'https://www.6080dy4.com',
|
||||||
|
host:'https://www.5280.fun',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,".go:eq(0)&&a&&href");print(src);HOST=src',
|
||||||
|
// url:'/vodshow/fyclass--------fypage---.html',
|
||||||
|
url:'/vodshow/fyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter: {"1":[{"key":"cateId","name":"类型","value":[{"v":"","n":"全部"},{"v":"25","n":"动作片"},{"v":"26","n":"喜剧片"},{"v":"27","n":"爱情片"},{"v":"28","n":"科幻片"},{"v":"30","n":"恐怖片"},{"v":"31","n":"剧情片"},{"v":"33","n":"战争片"},{"v":"35","n":"纪录片"},{"v":"36","n":"悬疑片"},{"v":"38","n":"犯罪片"},{"v":"40","n":"冒险片"},{"v":"41","n":"动画片"},{"v":"43","n":"惊悚片"},{"v":"44","n":"奇幻片"},{"v":"46","n":"理论片"}]},{"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":"lang","name":"语言","value":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"cateId","name":"类型","value":[{"v":"","n":"全部"},{"v":"42","n":"国产剧"},{"v":"49","n":"港台剧"},{"v":"47","n":"日韩剧"},{"v":"45","n":"欧美剧"},{"v":"51","n":"泰剧"},{"v":"52","n":"海外剧"}]},{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"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"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":"cateId","name":"类型","value":[{"v":"","n":"全部"},{"v":"20","n":"大陆综艺"},{"v":"22","n":"港台综艺"},{"v":"21","n":"日韩综艺"},{"v":"23","n":"欧美综艺"},{"v":"24","n":"演唱会"}]},{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"cateId","name":"类型","value":[{"v":"","n":"全部"},{"v":"29","n":"国产动漫"},{"v":"32","n":"日韩动漫"},{"v":"37","n":"港台动漫"},{"v":"34","n":"欧美动漫"}]},{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其它","v":"其它"}]},{"key":"lang","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":"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"}]},{"key":"by","name":"排序","value":[{"n":"全部","v":""},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
4:{cateId:'4'},
|
||||||
|
3:{cateId:'3'}
|
||||||
|
},
|
||||||
|
searchUrl:'/vodsearch/**----------fypage---.html',
|
||||||
|
searchable:2,//是否启用全局搜索,
|
||||||
|
quickSearch:0,//是否启用快速搜索,
|
||||||
|
filterable:0,//是否启用分类筛选,
|
||||||
|
// class_parse:'.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
class_parse:'.nav-menu-items&&li;a&&Text;a&&href;.*/(\\d).html',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:'.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
double:true, // 推荐内容是否双层定位
|
||||||
|
一级:'.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
二级:{"title":"h1&&Text;.tag-link&&Text","img":".module-item-pic&&img&&data-src","desc":".video-info-items:eq(-2)&&Text;.video-info-items:eq(-1)&&Text;.video-info-items:eq(-2)&&Text;.video-info-items:eq(1)&&.video-info-item&&Text;.video-info-items:eq(0)&&.video-info-item&&Text","content":".vod_content&&Text","tabs":".module-tab-item","lists":".module-player-list:eq(#id)&&.scroll-content&&a"},
|
||||||
|
搜索:'.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '玉米影视', // csp_AppYsV2
|
||||||
|
host: 'http://yumi.ghlyys.com/',
|
||||||
|
//host: 'http://ytcms.lfytyl.com',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":"Dart/3.0 (dart:io)"}});let src = JSON.parse(html).domain;print(src);HOST=src',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电影&国剧&综艺&动漫&美剧', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url:'1&5&3&4&2',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:if(/m3u8|mp4/.test(input)){input}else if(/YuMi/.test(input)){let purl=request("http://61.147.93.21:8090/index.php?url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}else if(/YuMi/.test(input)){let purl=request("http://123.99.192.241:5000/api/jiexi/xg?Key=NLoNjn48GAF3UQdsP0&url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}else if(/qiqi/.test(input)){let purl=request("http://42.51.37.161:5678/json/520238app8/ml77.php?url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}',
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list[0].vlist;*;*;*;*',
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
|
||||||
|
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from= ("小友影视");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)}',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'优酷',
|
||||||
|
host:'https://www.%79%6f%75%6b%75.com',
|
||||||
|
homeUrl:'',
|
||||||
|
searchUrl:'https://search.%79%6f%75%6b%75.com/api/search?pg=fypage&keyword=**',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
multi:1,
|
||||||
|
// 分类链接fypage参数支持1个()表达式
|
||||||
|
url:'/category/data?optionRefresh=1&pageNo=fypage¶ms=fyfilter',
|
||||||
|
// url:'/category/data?pageNo=fypage¶ms=fyfilter',
|
||||||
|
// filter_url:'&u=fyarea&s=fyyear={{fl.order}}',
|
||||||
|
// filter_url:'{{fl|safe}}',
|
||||||
|
filter_url:'{{fl}}',
|
||||||
|
// filter_url:'{{fl}}',
|
||||||
|
// filter_url:'{{fl}}',
|
||||||
|
filter:{"电视剧": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地剧", "v": "中国内地"}, {"n": "港剧", "v": "中国香港"}, {"n": "台剧", "v": "中国台湾"}, {"n": "韩剧", "v": "韩国"}, {"n": "美剧", "v": "美国"}, {"n": "英剧", "v": "英国"}, {"n": "日剧", "v": "日本"}, {"n": "泰剧", "v": "泰国"}]}, {"key": "tags", "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": "农村"}]}, {"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-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "status", "name": "全部规格", "value": [{"n": "全部规格", "v": ""}, {"n": "全网独播", "v": "1"}, {"n": "优酷自制", "v": "2"}, {"n": "已完结", "v": "3"}, {"n": "即将上线", "v": "4"}, {"n": "短剧", "v": "5"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "VIP", "v": "2"}, {"n": "付费", "v": "1"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "热度最高", "v": "7"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}, {"n": "最多播放", "v": "2"}]}], "电影": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地", "v": "中国内地"}, {"n": "中国香港", "v": "中国香港"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "美国", "v": "美国"}, {"n": "印度", "v": "印度"}, {"n": "日韩", "v": "韩国,日本"}, {"n": "泰国", "v": "泰国"}, {"n": "欧洲", "v": "欧洲"}]}, {"key": "tags", "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": "其他"}]}, {"key": "source", "name": "全部规格", "value": [{"n": "全部规格", "v": ""}, {"n": "院线", "v": "1"}, {"n": "网络电影", "v": "0"}, {"n": "独播", "v": "2"}, {"n": "高清修复", "v": "3"}, {"n": "1080P", "v": "4"}]}, {"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-2010", "v": "2010-2014"}, {"n": "2009-2000", "v": "2000-2009"}, {"n": "90年代", "v": "1990-1999"}, {"n": "80年代", "v": "1980-1989"}, {"n": "70年代", "v": "1970-1979"}, {"n": "更早", "v": "-1969"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}, {"n": "点播", "v": "1"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "热度最高", "v": "7"}, {"n": "最多播放", "v": "2"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}]}, {"key": "tag_label_name", "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": "欢喜搭档"}]}], "综艺": [{"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地", "v": "中国内地"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "美国", "v": "美国"}, {"n": "英国", "v": "英国"}]}, {"key": "tags", "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": "益智"}]}, {"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-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "status", "name": "全部规格", "value": [{"n": "全部规格", "v": ""}, {"n": "优酷自制", "v": "2"}, {"n": "优酷独播", "v": "1"}, {"n": "电视综艺", "v": "6"}, {"n": "已完结", "v": "3"}, {"n": "即将上线", "v": "4"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "VIP", "v": "2"}, {"n": "付费", "v": "1"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "最新更新", "v": "8"}, {"n": "最近开播", "v": "9"}, {"n": "最多评论", "v": "4"}]}, {"key": "tag_label_name", "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": "贾玲"}]}], "动漫": [{"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}, {"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "内地", "v": "中国内地"}, {"n": "日本", "v": "日本"}, {"n": "美国", "v": "美国"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "其他", "v": "其他"}]}, {"key": "tags", "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": "布袋戏"}]}, {"key": "completed", "name": "连载情况", "value": [{"n": "连载情况", "v": ""}, {"n": "更新中", "v": "0"}, {"n": "已完结", "v": "1"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}]}, {"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": "00年代", "v": "2000-2010"}, {"n": "更早", "v": "-1999"}]}, {"key": "tag_label_name", "name": "为你推荐", "value": [{"n": "为你推荐", "v": ""}, {"n": "3D动画", "v": "3D动画"}, {"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": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "中国", "v": "中国,香港,台湾"}, {"n": "美国", "v": "美国"}, {"n": "英国", "v": "英国"}, {"n": "其他国家", "v": "其他"}]}, {"key": "show_label_type", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "动画", "v": "动画"}, {"n": "儿歌", "v": "儿歌"}, {"n": "玩具", "v": "玩具"}, {"n": "动画电影", "v": "电影"}, {"n": "绘本故事", "v": "绘本故事"}, {"n": "真人", "v": "真人"}, {"n": "少儿综艺", "v": "少儿综艺"}, {"n": "亲子", "v": "亲子"}, {"n": "探索纪实", "v": "探索纪实"}, {"n": "音频", "v": "音频"}]}, {"key": "child_tags", "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": "英语"}, {"n": "数学", "v": "数学"}, {"n": "课程辅导", "v": "课程辅导"}]}, {"key": "age", "name": "全部年龄", "value": [{"n": "全部年龄", "v": ""}, {"n": "0-2岁", "v": "0-2"}, {"n": "3-4岁", "v": "3-4"}, {"n": "5-6岁", "v": "5-6"}, {"n": "7岁以上", "v": "7-"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "付费", "v": "1"}, {"n": "VIP", "v": "2"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最新上线", "v": "1"}, {"n": "最多播放", "v": "2"}, {"n": "最多评论", "v": "4"}, {"n": "最多收藏", "v": "5"}]}], "纪录片": [{"key": "tags", "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": "company", "name": "全部出品", "value": [{"n": "全部出品", "v": ""}, {"n": "BBC", "v": "bbc,british"}, {"n": "央视", "v": "央视,中央电视台,cctv,中国广播电影电视节目交易中心"}, {"n": "国家地理", "v": "国家地理"}, {"n": "Love Nature", "v": "love nature"}, {"n": "LGI", "v": "looking"}, {"n": "A&E", "v": "ae"}, {"n": "OTF", "v": "fence"}]}, {"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-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "综合排序", "v": "0"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}, {"n": "最多收藏", "v": "5"}]}], "文化": [{"key": "tags", "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": "people", "name": "文化大咖", "value": [{"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-2011", "v": "2011-2014"}, {"n": "更早", "v": "-2010"}]}, {"key": "pay_type", "name": "付费类型", "value": [{"n": "付费类型", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员", "v": "2"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "综合排序", "v": "0"}, {"n": "最新上线", "v": "1"}, {"n": "最好评", "v": "3"}, {"n": "最多收藏", "v": "5"}]}], "亲子": [{"key": "qinzi_genre", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "孕产", "v": "孕产"}, {"n": "育儿知识", "v": "育儿知识,育儿达人,育儿专家,爸爸育儿,隔代育儿,育儿明星"}, {"n": "好物种草", "v": "母婴用品,测评,母婴用品种草"}, {"n": "美食", "v": "儿童美食,辅食,孕期饮食"}, {"n": "手工DIY", "v": "手工diy"}, {"n": "教育观念", "v": "教育观念"}, {"n": "亲子综艺", "v": "亲子综艺"}, {"n": "亲子互动", "v": "亲子旅游,亲子游戏,亲子阅读,玩具,早教,启蒙"}, {"n": "萌娃", "v": "萌娃"}, {"n": "搞笑", "v": "搞笑"}, {"n": "美妆", "v": "美妆"}]}, {"key": "pregnancy_stage", "name": "全部阶段", "value": [{"n": "全部阶段", "v": ""}, {"n": "备孕", "v": "备孕"}, {"n": "孕早期", "v": "孕早"}, {"n": "孕中期", "v": "孕中"}, {"n": "孕晚期", "v": "孕晚"}]}, {"key": "show_label_baby_age", "name": "全部分龄", "value": [{"n": "全部分龄", "v": ""}, {"n": "0-1岁", "v": "0-1"}, {"n": "1-3岁", "v": "1-3"}, {"n": "3-6岁", "v": "3-6"}, {"n": "6岁+", "v": "6-"}]}, {"key": "pay_type", "name": "全部", "value": [{"n": "全部", "v": ""}, {"n": "免费", "v": "0"}, {"n": "会员免费", "v": "2"}]}, {"key": "sort", "name": "热度最高", "value": [{"n": "热度最高", "v": ""}, {"n": "综合排序", "v": "0"}, {"n": "最新上线", "v": "1"}, {"n": "最多播放", "v": "2"}, {"n": "最多评论", "v": "3"}, {"n": "最多收藏", "v": "5"}]}], "教育": [{"key": "tags", "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": "家庭教育"}]}, {"key": "company", "name": "全部出品", "value": [{"n": "全部出品", "v": ""}, {"n": "TED", "v": "ted"}, {"n": "耶鲁大学", "v": "耶鲁大学"}, {"n": "哈佛大学", "v": "哈佛大学"}, {"n": "斯坦福大学", "v": "斯坦福大学"}, {"n": "麻省理工学院", "v": "麻省理工学院"}]}, {"key": "pay_type", "name": "全部节目", "value": [{"n": "全部节目", "v": ""}, {"n": "免费", "v": "0"}, {"n": "付费", "v": "1"}, {"n": "VIP", "v": "2"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最多收藏", "v": "5"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "搞笑": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "免费", "v": "5"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "生活": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "VIP", "v": "4"}, {"n": "免费", "v": "5"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "体育": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "VIP", "v": "4"}, {"n": "免费", "v": "5"}]}, {"key": "tags", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "篮球", "v": "篮球"}, {"n": "足球", "v": "足球"}, {"n": "台球", "v": "台球"}, {"n": "CBA", "v": "CBA"}, {"n": "钓鱼", "v": "钓鱼"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "音乐": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "免费", "v": "5"}]}, {"key": "main_area", "name": "全部地区", "value": [{"n": "全部地区", "v": ""}, {"n": "中国", "v": "中国"}, {"n": "中国台湾", "v": "中国台湾"}, {"n": "中国香港", "v": "中国香港"}, {"n": "美国", "v": "美国"}, {"n": "其他", "v": "其他"}]}, {"key": "music_show_type", "name": "全部类型", "value": [{"n": "全部类型", "v": ""}, {"n": "演唱会", "v": "演唱会"}, {"n": "live现场", "v": "live现场"}, {"n": "颁奖典礼", "v": "颁奖典礼"}, {"n": "舞蹈", "v": "舞蹈"}, {"n": "影视原声", "v": "影视原声"}, {"n": "音乐达人", "v": "音乐达人"}, {"n": "音乐教学", "v": "音乐教学"}, {"n": "音乐纪录片", "v": "音乐纪录片"}, {"n": "音乐mv", "v": "音乐mv"}, {"n": "音乐自制", "v": "音乐自制"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}], "游戏": [{"key": "division", "name": "全部专区", "value": [{"n": "全部专区", "v": ""}, {"n": "1080P", "v": "3"}, {"n": "独播", "v": "6"}, {"n": "VIP", "v": "4"}, {"n": "免费", "v": "5"}]}, {"key": "game_brand", "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": "英雄联盟"}]}, {"key": "tags", "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": "角色>扮演"}]}, {"key": "sort", "name": "综合排序", "value": [{"n": "综合排序", "v": ""}, {"n": "最多播放", "v": "2"}, {"n": "最好评", "v": "3"}, {"n": "最新上线", "v": "1"}]}]},
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA',
|
||||||
|
'Cookie':'cna=VvNvGX3e0ywCAavVEXlnA2bg; __ysuid=1626676228345Rl1; __ayft=1652434048647; __arycid=dm-1-00; __arcms=dm-1-00; __ayvstp=85; __arpvid=1667204023100cWWdgM-1667204023112; __ayscnt=10; __aypstp=60; isg=BBwcqxvvk3BxkWQGugbLpUSf7TrOlcC_U7GAj_YdfYfvQbzLHqYGT4Hgp6m5TvgX; tfstk=c3JOByYUH20ilVucLOhh0pCtE40lZfGc-PjLHLLfuX7SWNyAiQvkeMBsIw7PWDC..; l=eBQguS-PjdJFGJT-BOfwourza77OSIRA_uPzaNbMiOCPOb1B5UxfW6yHp4T6C3GVhsGJR3rp2umHBeYBqQd-nxvOF8qmSVDmn',
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏',
|
||||||
|
class_url:'电视剧&电影&综艺&动漫&少儿&纪录片&文化&亲子&教育&搞笑&生活&体育&音乐&游戏',
|
||||||
|
limit:20,
|
||||||
|
play_parse:true,
|
||||||
|
// 手动调用解析请求json的url,此lazy不方便
|
||||||
|
// lazy:'js:print(input);fetch_params.headers["user-agent"]=MOBILE_UA;let html=request(input);let rurl=html.match(/window\\.open\\(\'(.*?)\',/)[1];rurl=urlDeal(rurl);input={parse:1,url:rurl};',
|
||||||
|
lazy:'js:input={parse:1,jx:1,url:input};',
|
||||||
|
// 推荐:'.list_item;img&&alt;img&&src;a&&Text;a&&data-float',
|
||||||
|
// 一级:'json:data.filterData.listData;title;img;subTitle;videoLink;summary',
|
||||||
|
一级:'',
|
||||||
|
一级:'js:let d=[];MY_FL.type=MY_CATE;let fl=stringify(MY_FL);fl=encodeUrl(fl);input=input.split("{")[0]+fl;if(MY_PAGE>1){let old_session=getItem("yk_session_"+MY_CATE,"{}");if(MY_PAGE===2){input=input.replace("optionRefresh=1","session="+encodeUrl(old_session))}else{input=input.replace("optionRefresh=1","session="+encodeUrl(old_session))}}let html=fetch(input,fetch_params);try{html=JSON.parse(html);let lists=html.data.filterData.listData;let session=html.data.filterData.session;session=stringify(session);if(session!==getItem("yk_session_"+MY_CATE,"{}")){setItem("yk_session_"+MY_CATE,session)}lists.forEach(function(it){let vid;if(it.videoLink.includes("id_")){vid=it.videoLink.split("id_")[1].split(".html")[0]}else{vid="msearch:"}d.push({title:it.title,img:it.img,desc:it.summary,url:"https://search.youku.com/api/search?appScene=show_episode&showIds="+vid,content:it.subTitle})})}catch(e){log("一级列表解析发生错误:"+e.message)}setResult(d);',
|
||||||
|
二级:'',
|
||||||
|
二级:'js:var d=[];VOD={};let html=request(input);let json=JSON.parse(html);if(/keyword/.test(input)){input="https://search.youku.com/api/search?appScene=show_episode&showIds="+json.pageComponentList[0].commonData.showId;json=JSON.parse(fetch(MY_URL,fetch_params))}let video_lists=json.serisesList;var name=json.sourceName;if(/优酷/.test(name)&&video_lists.length>0){let ourl="https://v.youku.com/v_show/id_"+video_lists[0].videoId+".html";let _img=video_lists[0].thumbUrl;let html=fetch(ourl,{headers:{Referer:"https://v.youku.com/","User-Agent":PC_UA}});let json=/__INITIAL_DATA__/.test(html)?html.split("window.__INITIAL_DATA__ =")[1].split(";")[0]:"{}";if(json==="{}"){log("触发了优酷人机验证");VOD.vod_remarks=ourl;VOD.vod_pic=_img;VOD.vod_name=video_lists[0].title.replace(/(\\d+)/g,"");VOD.vod_content="触发了优酷人机验证,本次未获取详情,但不影响播放("+ourl+")"}else{try{json=JSON.parse(json);let data=json.data.data;let data_extra=data.data.extra;let img=data_extra.showImgV;let model=json.data.model;let m=model.detail.data.nodes[0].nodes[0].nodes[0].data;let _type=m.showGenre;let _desc=m.updateInfo||m.subtitle;let JJ=m.desc;let _title=m.introTitle;VOD.vod_pic=img;VOD.vod_name=_title;VOD.vod_type=_type;VOD.vod_remarks=_desc;VOD.vod_content=JJ}catch(e){log("海报渲染发生错误:"+e.message);print(json);VOD.vod_remarks=name}}}if(!/优酷/.test(name)){VOD.vod_content="非自家播放源,暂无视频简介及海报";VOD.vod_remarks=name}function adhead(url){return urlencode(url)}play_url=play_url.replace("&play_url=","&type=json&play_url=");video_lists.forEach(function(it){let url="https://v.youku.com/v_show/id_"+it.videoId+".html";if(it.thumbUrl){d.push({desc:it.showVideoStage?it.showVideoStage.replace("期","集"):it.displayName,pic_url:it.thumbUrl,title:it.title,url:play_url+adhead(url)})}else if(name!=="优酷"){d.push({title:it.displayName?it.displayName:it.title,url:play_url+adhead(it.url)})}});VOD.vod_play_from=name;VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");',
|
||||||
|
搜索:'',
|
||||||
|
搜索:'js:var d=[];let html=request(input);let json=JSON.parse(html);json.pageComponentList.forEach(function(it){if(it.hasOwnProperty("commonData")){it=it.commonData;d.push({title:it.titleDTO.displayName,img:it.posterDTO.vThumbUrl,desc:it.stripeBottom,content:it.updateNotice+" "+it.feature,url:"https://search.youku.com/api/search?appScene=show_episode&showIds="+it.showId+"&appCaller=h5"})}});setResult(d);',
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
var rule = {
|
||||||
|
title: 'youmi[V2]', // csp_AppYsV2
|
||||||
|
host: 'https://jihulab.com/duomv/duox/-/raw/main/youmi',
|
||||||
|
//host: 'http://ytcms.lfytyl.com',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":"Dart/3.0 (dart:io)"}});let src = JSON.parse(html).domain;print(src);HOST=src',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"冒险","3v":"冒险"},{"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":"lang","name":"语言","value":[{"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"}]}],
|
||||||
|
"20":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"}]}],
|
||||||
|
"3":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"}]}],
|
||||||
|
"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'动漫&电影&国产电视剧&电视剧综合&综艺', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url:'4&1&5&2&3',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:if(/m3u8|mp4/.test(input)){input}else if(/YuMi/.test(input)){let purl=request("http://42.157.128.109:2323/CH/zy/Yumi.php?url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}else if(/YuMi/.test(input)){let purl=request("http://123.99.192.241:5000/api/jiexi/xg?Key=NLoNjn48GAF3UQdsP0&url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}else if(/qiqi/.test(input)){let purl=request("http://42.51.37.161:5678/json/520238app8/ml77.php?url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}',
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list[0].vlist;*;*;*;*',
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
|
||||||
|
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from= ("⚡️公众号:多多APP⚡️");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)}',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'有声小说吧',
|
||||||
|
编码:'gb18030',
|
||||||
|
host:'http://m.ysxs8.vip',
|
||||||
|
url:'/downlist/fyclass_fypage.html',
|
||||||
|
searchUrl:'/search.asp?page=fypage&searchword=**&searchtype=-1',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
// homeUrl:'/fenlei/',
|
||||||
|
// class_parse: '.pd-class:eq(0) dd;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
class_name:'网络玄幻&恐怖悬疑&传统武侠&都市言情&官场刑侦&历史军事&探险盗墓&职场商战&明朝那些事儿&评书下载&相声戏曲&人物传记&广播剧&百家讲坛&外语读物&有声文学&儿童读物&管理营销',
|
||||||
|
class_url:'r52&r17&r12&r13&r14&r15&r45&r81&r36&r3&r7&r16&r18&r32&r35&r41&r4&r6',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
// double:true,
|
||||||
|
推荐:'.list-ul .list-li;.list-name&&Text;*;.module-slide-author&&Text;*',
|
||||||
|
一级:'.book-ol&&li;h4&&Text;img&&data-original;.book-meta&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
// title:'h2&&Text;.book-cell .book-rand-a:eq(2)&&Text',
|
||||||
|
title:'h1&&Text;.book-cell .book-rand-a:eq(0)&&a&&Text',
|
||||||
|
img:'.book img&&src',
|
||||||
|
// desc:';;;;.book-des p&&Text',
|
||||||
|
desc:';;;.book-rand-a:eq(2)&&Text;.book-des p&&Text',
|
||||||
|
content:'.book-des--p&&Text',
|
||||||
|
tabs:'.playlist-top&&h2',
|
||||||
|
// lists:'js:pd=jsp.pd;let url=pd(html,".bookbutton&&a&&href");log(url);html=request(url);let v=pd(html,".booksite&&script&&Html");var document={};var VideoListJson;VideoListJson=eval(v.split("VideoListJson=")[1].split(",urlinfo")[0]);log(typeof VideoListJson);let list1=VideoListJson[0][1];LISTS=[list1];log(LISTS);',
|
||||||
|
// 有声小说有防盗链,我服了(上面的列表数据正常拿到了,没法播放)
|
||||||
|
// lists:'#playlist:eq(#id)&&ul&&li',
|
||||||
|
lists:'#playlist ul li',
|
||||||
|
},
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '影探', // csp_AppYsV2
|
||||||
|
host: 'https://jihulab.com/duomv/duox/-/raw/main/cms',
|
||||||
|
//host: 'http://ytcms.lfytyl.com',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":"Dart/3.0 (dart:io)"}});let src = JSON.parse(html).domain;print(src);HOST=src',
|
||||||
|
homeUrl:'/api.php/app/index_video',
|
||||||
|
// url: '/api.php/app/video?tid=fyclass&class=&area=&lang=&year=&limit=20&pg=fypage',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=18&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"儿童"},{"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":"其他"}]},{"key":"lang","name":"语言","value":[{"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":"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"其它","v":"其它"}]},{"key":"lang","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":"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":"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"5":[{"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"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'影视综合&电视剧&电影&动漫&综艺', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url:'5&2&1&4&3',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:input=/YuMi/.test(input)?JSON.parse(request("http://42.157.128.109:2323/CH/zy/Yumi.php?url="+input)).url:input',
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list[0].vlist;*;*;*;*',
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
|
||||||
|
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from=("⚡️公众号:应用边界⚡️");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)}',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
var iil='jsjiami.com.v6',iil_=['iil'],lIIIl1ll=[iil,'\x6f\x6b\x68\x74\x74\x70\x2f\x33\x2e\x31\x35','\x69\x6e\x64\x65\x78\x4f\x66','\x24\x24\x24','\x73\x70\x6c\x69\x74','\x74\x72\x69\x6d','\x26\x26\x26','\x3a\x2f\x2f','\x6c\x6f\x67','\x70\x69\x63\x55\x72\x6c\x3a\x20','\x72\x65\x70\x6c\x61\x63\x65','\x70\x75\x73\x68','\x2f\x66\x69\x6c\x65\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74','\x2f\x6c\x69\x76\x65\x73\x6f\x75\x72\x63\x65\x6c\x69\x73\x74','\x47\x45\x54','\x70\x61\x72\x73\x65','\x63\x6f\x6e\x74\x65\x6e\x74','\x73\x75\x62\x73\x74\x72\x69\x6e\x67','\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x4f\x66','\x6e\x61\x6d\x65','\x75\x72\x6c','\x3d\x3d\x3d\x3d\x20\x3e\x3e\x3e\x20','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x65\x78\x65\x63','\x74\x65\x73\x74','\x6d\x61\x74\x63\x68','\x63\x68\x61\x6e\x6e\x65\x6c','\x2c\x23\x67\x65\x6e\x72\x65\x23\x0a','\x75\x72\x6c\x73','\x64\x61\x74\x61','\x64\x61\x74\x61\x6c\x69\x73\x74','\x70\x72\x6f\x76','\x6c\x69\x73\x74','\x2d\x2d\x2d','\x6c\x69\x6e\x65','\x77\x65\x62\x50\x69\x63\x55\x72\x6c\x3a\x20','\x23\x45\x58\x54\x4d\x33\x55','\x22\x63\x68\x61\x6e\x6e\x65\x6c\x22','\x22\x75\x72\x6c\x73\x22','\x22\x64\x61\x74\x61\x6c\x69\x73\x74\x22','\x6c\x65\x6e\x67\x74\x68','\x23\x67\x65\x6e\x72\x65\x23','\x7b\x6e\x61\x6d\x65\x7d','\x7b\x63\x61\x74\x65\x7d','\u76f4\u64ad\u5217\u8868','\x6e\x75\x6c\x6c','\x74\x79\x70\x65\x5f\x69\x64','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x75\x72\x6c','\x68\x61\x73\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79','\x6a\x6f\x69\x6e','\x76\x6f\x64\x5f\x70\x6c\x61\x79\x5f\x66\x72\x6f\x6d','\x6a\x43\x50\x73\x4e\x6a\x77\x69\x4a\x61\x51\x6d\x69\x2e\x63\x6f\x4e\x4f\x6d\x47\x72\x2e\x76\x56\x36\x41\x46\x67\x79\x74\x74\x3d\x3d'];function Ii1l1III(_0x3b13df,_0x346a54){_0x3b13df=~~'0x'['concat'](_0x3b13df['slice'](0x0));var _0x4db44b=lIIIl1ll[_0x3b13df];return _0x4db44b;};(function(_0x209161,_0x5eaa4a){var _0x42ecdf=0x0;for(_0x5eaa4a=_0x209161['shift'](_0x42ecdf>>0x2);_0x5eaa4a&&_0x5eaa4a!==(_0x209161['pop'](_0x42ecdf>>0x3)+'')['replace'](/[CPNwJQNOGrVAFgytt=]/g,'');_0x42ecdf++){_0x42ecdf=_0x42ecdf^0x127efd;}}(lIIIl1ll,Ii1l1III));let headers={'User-Agent':Ii1l1III('0')};let classes=[];let cates={};let picUrl='';let webPaths={};function init(IiIIi1i){let i1Ii11I1='';if(IiIIi1i[Ii1l1III('1')](Ii1l1III('2'))>0x0){i1Ii11I1=IiIIi1i[Ii1l1III('3')](Ii1l1III('2'))[0x0][Ii1l1III('4')]();IiIIi1i=IiIIi1i[Ii1l1III('3')](Ii1l1III('2'))[0x1][Ii1l1III('4')]();}if(IiIIi1i[Ii1l1III('1')](Ii1l1III('5'))>0x0){picUrl=IiIIi1i[Ii1l1III('3')](Ii1l1III('5'))[0x1][Ii1l1III('4')]();if(picUrl[Ii1l1III('1')](Ii1l1III('6'))<0x0){picUrl=i1Ii11I1+picUrl;}IiIIi1i=IiIIi1i[Ii1l1III('3')](Ii1l1III('5'))[0x0][Ii1l1III('4')]();}console[Ii1l1III('7')](Ii1l1III('8')+picUrl);let IIlIlI1I=IiIIi1i[Ii1l1III('3')]('\x23');for(const IlII1I1 of IIlIlI1I){if(IlII1I1[Ii1l1III('1')]('\x24')>0x0){let illIl111=IlII1I1;let Ill1iIi=IlII1I1[Ii1l1III('3')]('\x24')[0x0];if(illIl111[Ii1l1III('1')](Ii1l1III('6'))<0x0){illIl111=illIl111[Ii1l1III('9')]('\x24','\x24'+i1Ii11I1);}classes[Ii1l1III('a')]({'type_id':illIl111,'type_name':Ill1iIi[Ii1l1III('9')]('\x21\x21','')});}else{let II1lIlli=IlII1I1;if(II1lIlli[Ii1l1III('1')](Ii1l1III('6'))<0x0){II1lIlli=i1Ii11I1+II1lIlli;}II1lIlli=II1lIlli[Ii1l1III('9')](Ii1l1III('b'),Ii1l1III('c'));let Illi11ll=req(II1lIlli,{'\x6d\x65\x74\x68\x6f\x64':Ii1l1III('d'),'\x68\x65\x61\x64\x65\x72\x73':headers});try{let l1lIiill=JSON[Ii1l1III('e')](Illi11ll[Ii1l1III('f')]);let lillI11l=II1lIlli[Ii1l1III('10')](0x0,II1lIlli[Ii1l1III('11')]('\x2f')+0x1);for(const i1iilII1 of l1lIiill){let Iillil=i1iilII1[Ii1l1III('12')];let lI1iIl=i1iilII1[Ii1l1III('13')];let illIl111=Iillil+'\x24'+(lI1iIl[Ii1l1III('1')](Ii1l1III('6'))<0x0?lillI11l:'')+lI1iIl;classes[Ii1l1III('a')]({'type_id':illIl111,'type_name':Iillil[Ii1l1III('9')]('\x21\x21','')});webPaths[illIl111]=lillI11l;}}catch(Ii1Ii11){console[Ii1l1III('7')](Ii1l1III('14')+Ii1Ii11);}}}}function home(I1iiIiIl){return JSON[Ii1l1III('15')]({'class':classes,'filters':null});}function parseM3u(iIi1Ii1I,I1IlIIIi){let iI1iiIii={};let iiI11111=/(#EXTINF:.+?),([^,]+?)\s*\n(.+?)\s*\n/g;let ii1iilil=null;while((ii1iilil=iiI11111[Ii1l1III('16')](iIi1Ii1I))!=null){let lllli1iI=ii1iilil[0x1];let il1Ili1I=ii1iilil[0x2];let liIlll1l=ii1iilil[0x3];if(il1Ili1I==null||liIlll1l==null||il1Ili1I==''||liIlll1l==''){continue;}il1Ili1I=il1Ili1I[Ii1l1III('4')]();liIlll1l=liIlll1l[Ii1l1III('4')]();let IiI1lI1l=I1IlIIIi;let ilIl1i1i=/group-title="(.*?)"/;if(ilIl1i1i[Ii1l1III('17')](lllli1iI)){IiI1lI1l=lllli1iI[Ii1l1III('18')](ilIl1i1i)[0x1];}if(!iI1iiIii[IiI1lI1l]){iI1iiIii[IiI1lI1l]=[];}iI1iiIii[IiI1lI1l][Ii1l1III('a')](il1Ili1I+'\x2c'+liIlll1l);}let ll11III1='';for(const li1Ili in iI1iiIii){ll11III1+=li1Ili+'\x0a';let IlIil1ll=iI1iiIii[li1Ili];for(const li1iI11 of IlIil1ll){ll11III1+=li1iI11+'\x0a';}}return ll11III1;}function parseFm(IliiIl1I){let lliiI1i1='';let Iii1ll=JSON[Ii1l1III('e')](IliiIl1I);for(const i1lIlli1 of Iii1ll){let I111Il1l=i1lIlli1[Ii1l1III('12')];let ilI11li=i1lIlli1[Ii1l1III('19')];lliiI1i1+=I111Il1l+Ii1l1III('1a');for(const iiilI1iI of ilI11li){let I11111l1=iiilI1iI[Ii1l1III('12')];let IlI1l1I1=iiilI1iI[Ii1l1III('1b')];for(const l1II1lll of IlI1l1I1){lliiI1i1+=I11111l1+'\x2c'+l1II1lll+'\x0a';}}}return lliiI1i1;}function parseLu(iIliI1lI){let IIlilI1i='';let I11ilI1i=JSON[Ii1l1III('e')](iIliI1lI)[Ii1l1III('1c')];for(const i1Ii1l1 of I11ilI1i[Ii1l1III('1d')]){let I11111l=i1Ii1l1[Ii1l1III('1e')];let IiIiii1l=i1Ii1l1[Ii1l1III('1f')];IIlilI1i+=I11111l+Ii1l1III('1a');for(const l1111lI of IiIiii1l){let lIlI1iI=l1111lI[Ii1l1III('12')];let ll11i1II=l1111lI[Ii1l1III('1b')];for(const Iliilii of ll11i1II){IIlilI1i+=lIlI1iI+Ii1l1III('20')+Iliilii[Ii1l1III('21')]+'\x2c'+Iliilii[Ii1l1III('13')]+'\x0a';}}}return IIlilI1i;}function getCateData(IliI1i){let iI1I1I1I=picUrl;if(IliI1i[Ii1l1III('1')](Ii1l1III('5'))>0x0){iI1I1I1I=IliI1i[Ii1l1III('3')](Ii1l1III('5'))[0x1][Ii1l1III('4')]();if(iI1I1I1I[Ii1l1III('1')](Ii1l1III('6'))<0x0&&webPaths[IliI1i]){iI1I1I1I=webPaths[IliI1i]+iI1I1I1I;}IliI1i=IliI1i[Ii1l1III('3')](Ii1l1III('5'))[0x0][Ii1l1III('4')]();}console[Ii1l1III('7')](Ii1l1III('22')+iI1I1I1I);let ll1iIiiI=IliI1i[Ii1l1III('3')]('\x24')[0x1];let i1I1l1i=IliI1i[Ii1l1III('3')]('\x24')[0x0];if(!cates[IliI1i]){cates[IliI1i]=[];let iIl11Iii=headers;if(ll1iIiiI[Ii1l1III('1')]('\x7c')>0x0){let ii111I1I=decodeURIComponent(ll1iIiiI[Ii1l1III('3')]('\x7c')[0x1]);ll1iIiiI=ll1iIiiI[Ii1l1III('3')]('\x7c')[0x0];for(const II1Ii1l of ii111I1I[Ii1l1III('3')]('\x26')){if(II1Ii1l[Ii1l1III('1')]('\x3d')>0x0){let lI1lliii=II1Ii1l[Ii1l1III('3')]('\x3d')[0x0];let I11Iii1i=II1Ii1l[Ii1l1III('3')]('\x3d')[0x1];iIl11Iii[lI1lliii]=I11Iii1i;}}}let I111lilI=req(ll1iIiiI,{'\x6d\x65\x74\x68\x6f\x64':Ii1l1III('d'),'\x68\x65\x61\x64\x65\x72\x73':iIl11Iii});I111lilI=I111lilI[Ii1l1III('f')][Ii1l1III('4')]();if(I111lilI[Ii1l1III('1')](Ii1l1III('23'))>=0x0){I111lilI=parseM3u(I111lilI,i1I1l1i);}else if(I111lilI[Ii1l1III('1')](Ii1l1III('24'))>0x0&&I111lilI[Ii1l1III('1')](Ii1l1III('25'))>0x0){I111lilI=parseFm(I111lilI);}else if(I111lilI[Ii1l1III('1')](Ii1l1III('26'))>0x0&&I111lilI[Ii1l1III('1')](Ii1l1III('25'))>0x0){I111lilI=parseLu(I111lilI);}let li1IiiII=(i1I1l1i+'\x0a'+I111lilI[Ii1l1III('9')]('\x0d',''))[Ii1l1III('3')]('\x0a');let lli11iI=i1I1l1i;let IiiIIiIi=null;let iiiI1l='';for(let i1ii1IIl=0x0;i1ii1IIl<li1IiiII[Ii1l1III('27')];i1ii1IIl++){let lIliIii=li1IiiII[i1ii1IIl][Ii1l1III('9')](/\s+/g,'');if(lIliIii!=''&&lIliIii[Ii1l1III('1')](Ii1l1III('6'))<0x0&&(lIliIii[Ii1l1III('1')]('\x2c')<0x0||lIliIii[Ii1l1III('1')](Ii1l1III('28'))>0x0)){if(iiiI1l!=''){let ilIIIl=iI1I1I1I[Ii1l1III('9')](Ii1l1III('29'),encodeURIComponent(lli11iI))[Ii1l1III('9')](Ii1l1III('2a'),encodeURIComponent(i1I1l1i));let ilI1ilI=ilIIIl[Ii1l1III('1')]('\x3c');let iili1I1i=ilIIIl[Ii1l1III('11')]('\x3e');if(ilI1ilI>-0x1&&iili1I1i>ilI1ilI){let I11Ilili=ilIIIl[Ii1l1III('10')](ilI1ilI,iili1I1i+0x1);let I1liliII=new RegExp(I11Ilili[Ii1l1III('9')](/<|>/g,''));let lii11liI=lli11iI[Ii1l1III('9')](I1liliII,function(Ili1lIi1,iiliII1l){return iiliII1l;});ilIIIl=ilIIIl[Ii1l1III('9')](I11Ilili,lii11liI);console[Ii1l1III('7')](lli11iI+'\x2c\x20'+ilIIIl);}let IiiIIiIi={'vod_id':IliI1i+Ii1l1III('2')+cates[IliI1i][Ii1l1III('27')],'vod_name':lli11iI,'vod_pic':ilIIIl,'vod_remarks':'','type_name':Ii1l1III('2b'),'vod_year':'','vod_area':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':i1I1l1i,'vod_play_url':iiiI1l};cates[IliI1i][Ii1l1III('a')](IiiIIiIi);}lli11iI=lIliIii[Ii1l1III('3')]('\x2c')[0x0][Ii1l1III('4')]();iiiI1l='';}else if(lIliIii[Ii1l1III('1')]('\x2c')>0x0&&/http|rtmp|rtsp|rsp/[Ii1l1III('17')](lIliIii)){let l1iiI1ii=lIliIii[Ii1l1III('3')]('\x2c');if(iiiI1l!=''){iiiI1l+='\x23';}iiiI1l+=l1iiI1ii[0x0][Ii1l1III('4')]()+'\x24'+l1iiI1ii[0x1][Ii1l1III('4')]();}}if(iiiI1l!=''){let II1Iliil=iI1I1I1I[Ii1l1III('9')](Ii1l1III('29'),encodeURIComponent(lli11iI))[Ii1l1III('9')](Ii1l1III('2a'),encodeURIComponent(i1I1l1i));let ilI1ilI=II1Iliil[Ii1l1III('1')]('\x3c');let iili1I1i=II1Iliil[Ii1l1III('11')]('\x3e');if(ilI1ilI>-0x1&&iili1I1i>ilI1ilI){let I11Ilili=II1Iliil[Ii1l1III('10')](ilI1ilI,iili1I1i+0x1);let I1liliII=new RegExp(I11Ilili[Ii1l1III('9')](/<|>/g,''));let lii11liI=I1liliII[Ii1l1III('17')](lli11iI)?lli11iI[Ii1l1III('18')](I1liliII)[0x1]:Ii1l1III('2c');II1Iliil=II1Iliil[Ii1l1III('9')](I11Ilili,lii11liI);}let IiiIIiIi={'vod_id':IliI1i+Ii1l1III('2')+cates[IliI1i][Ii1l1III('27')],'vod_name':lli11iI,'vod_pic':II1Iliil,'vod_remarks':'','type_name':Ii1l1III('2b'),'vod_year':'','vod_area':'','vod_actor':'','vod_director':'','vod_content':'','vod_play_from':i1I1l1i,'vod_play_url':iiiI1l};cates[IliI1i][Ii1l1III('a')](IiiIIiIi);}}return cates[IliI1i];}function homeVod(liIIlIl1){let iIl1IIii=getCateData(classes[0x0][Ii1l1III('2d')]);let I1l1iil=JSON[Ii1l1III('15')]({'list':iIl1IIii});return I1l1iil;}function category(I1l1i1Ii,l1IiiIli,IIi1Illi,lilIliIl){let IIi1i1ll=[];if(l1IiiIli==0x1){IIi1i1ll=getCateData(I1l1i1Ii);}let iIiiIi1i=JSON[Ii1l1III('15')]({'list':IIi1i1ll});return iIiiIi1i;}function detail(lIl11iii){let I1IIIil=lIl11iii[Ii1l1III('3')](Ii1l1III('2'));let liiiil1i=I1IIIil[0x0];let l1l111II=liiiil1i[Ii1l1III('3')]('\x24')[0x0];let Il1li11i=parseInt(I1IIIil[0x1]);let Iill11Ii=getCateData(liiiil1i)[Il1li11i];console[Ii1l1III('7')](JSON[Ii1l1III('15')](Iill11Ii));if(l1l111II[Ii1l1III('1')]('\x21\x21')>=0x0){l1l111II=l1l111II[Ii1l1III('9')]('\x21\x21','');const ii1l1iil=Iill11Ii[Ii1l1III('2e')][Ii1l1III('3')]('\x23');console[Ii1l1III('7')](JSON[Ii1l1III('15')](ii1l1iil));let i1Ili1I={};let IIIllli1={};for(const i1IiIlIl of ii1l1iil){let Ill1iii1=i1IiIlIl[Ii1l1III('3')]('\x24')[0x0];let IIiIII11=l1l111II;if(Ill1iii1[Ii1l1III('1')](Ii1l1III('20'))>0x0){IIiIII11=Ill1iii1[Ii1l1III('3')](Ii1l1III('20'))[0x1];Ill1iii1=Ill1iii1[Ii1l1III('3')](Ii1l1III('20'))[0x0];}if(!i1Ili1I[Ii1l1III('2f')](Ill1iii1)){i1Ili1I[Ill1iii1]=0x1;}else{i1Ili1I[Ill1iii1]++;}IIiIII11=l1l111II+(i1Ili1I[Ill1iii1]>0x1?'\x20'+i1Ili1I[Ill1iii1]:'');if(!IIIllli1[Ii1l1III('2f')](IIiIII11)){IIIllli1[IIiIII11]=[];}IIIllli1[IIiIII11][Ii1l1III('a')](Ill1iii1+'\x24'+i1IiIlIl[Ii1l1III('3')]('\x24')[0x1]);}let III1i1ii=[];let iii1lIIi=[];for(let iliI1I1i in IIIllli1){III1i1ii[Ii1l1III('a')](iliI1I1i);iii1lIIi[Ii1l1III('a')](IIIllli1[iliI1I1i][Ii1l1III('30')]('\x23'));}Iill11Ii[Ii1l1III('31')]=III1i1ii[Ii1l1III('30')](Ii1l1III('2'));Iill11Ii[Ii1l1III('2e')]=iii1lIIi[Ii1l1III('30')](Ii1l1III('2'));}return JSON[Ii1l1III('15')]({'list':[Iill11Ii]});}function play(l1llIIii,illiiIII,lIIIiIiI){return JSON[Ii1l1III('15')]({'parse':0x0,'url':illiiIII});}function search(I1lll,lI1iiIII){return null;}__JS_SPIDER__={'\x69\x6e\x69\x74':init,'\x68\x6f\x6d\x65':home,'\x68\x6f\x6d\x65\x56\x6f\x64':homeVod,'\x63\x61\x74\x65\x67\x6f\x72\x79':category,'\x64\x65\x74\x61\x69\x6c':detail,'\x70\x6c\x61\x79':play,'\x73\x65\x61\x72\x63\x68':search};;iil='jsjiami.com.v6';
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
var 二级=`js:
|
||||||
|
try {
|
||||||
|
let html = request(input);
|
||||||
|
html = JSON.parse(html);
|
||||||
|
let node = html.data;
|
||||||
|
VOD = {
|
||||||
|
vod_id: node["vod_id"],
|
||||||
|
vod_name: node["vod_name"],
|
||||||
|
vod_pic: node["vod_pic"],
|
||||||
|
type_name: node["vod_class"],
|
||||||
|
vod_year: node["vod_year"],
|
||||||
|
vod_area: node["vod_area"],
|
||||||
|
vod_remarks: node["vod_remarks"],
|
||||||
|
vod_actor: node["vod_actor"],
|
||||||
|
vod_director: node["vod_director"],
|
||||||
|
vod_content: node["vod_content"].strip(),
|
||||||
|
};
|
||||||
|
let episodes = node.vod_url_with_player;
|
||||||
|
let playMap = {};
|
||||||
|
if (typeof play_url === "undefined") {
|
||||||
|
var play_url = ""
|
||||||
|
}
|
||||||
|
episodes.forEach(function(ep) {
|
||||||
|
let source = ep["name"];
|
||||||
|
if (!playMap.hasOwnProperty(source)) {
|
||||||
|
playMap[source] = []
|
||||||
|
}
|
||||||
|
playMap[source].append(ep["url"])
|
||||||
|
});
|
||||||
|
let playFrom = [];
|
||||||
|
let playList = [];
|
||||||
|
Object.keys(playMap).forEach(function(key) {
|
||||||
|
playFrom.append(key);
|
||||||
|
playList.append(playMap[key])
|
||||||
|
});
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
var rule = {
|
||||||
|
title: '影探[V2]', // csp_AppYsV2
|
||||||
|
host: 'http://ytcms.lfytyl.com',
|
||||||
|
homeUrl:'/api.php/app/index_video',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=18&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"32":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"篮球","v":"篮球"},{"n":"足球","v":"足球"},{"n":"网球","v":"网球"},{"n":"斯洛克","v":"斯洛克"}]}],
|
||||||
|
"20":[{"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"}]}],
|
||||||
|
"21":[{"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"}]}],
|
||||||
|
"47":[{"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"}]}],
|
||||||
|
"48":[{"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"}]}],
|
||||||
|
"5":[{"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"}]}],
|
||||||
|
"45":[{"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"}]}],
|
||||||
|
"44":[{"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"}]}],
|
||||||
|
"49":[{"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"}]}],
|
||||||
|
"46":[{"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"}]}],
|
||||||
|
"1":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"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"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"lang","name":"语言","value":[{"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"}]}],
|
||||||
|
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,
|
||||||
|
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'新电影4K&新剧4K&好莱坞4K&港台经典4k&邵氏老电影4K&明星专辑4K&六公主4K&豆瓣Top250电影4K&豆瓣Top100影视剧4K&电影综合&电视剧综合&动漫&综艺&体育赛事', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url:'20&21&47&48&5&45&44&49&46&1&2&4&3&32',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
input = /mp4|mkv/.test(input) ? {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
parse: 0,
|
||||||
|
header: JSON.stringify({
|
||||||
|
"user-agent": "Lavf/58.12.100"
|
||||||
|
})
|
||||||
|
} : /m3u8/.test(input) ? input : "https://jx.jsonplayer.com/player/?url=" + input
|
||||||
|
`,
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list;vlist;*;*;*;*',
|
||||||
|
double: true,
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
|
||||||
|
二级:二级,
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
// 搜索验证
|
||||||
|
var rule = {
|
||||||
|
title:'中华听书网',
|
||||||
|
host:'https://www.tingshucn.com',
|
||||||
|
url:'/list/fyclass-fypage.html',
|
||||||
|
searchUrl:'/search.php?page=fypage#searchword=**&searchtype=;post',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_parse: '#news_nav&&li:has(a);a&&Text;a&&href;.*/(\\d+).html',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:input=input.replace("www","m")',
|
||||||
|
limit:6,
|
||||||
|
图片来源:'@Referer=https://www.tingshucn.com',
|
||||||
|
推荐:'.layout_right:eq(1)&&li;*;*;em&&Text;*',
|
||||||
|
一级:'.listBox&&li;img&&alt;img&&src;p:eq(0)&&span&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
title:'h3&&Text;.webzi_top&&li:eq(4)&&Text',
|
||||||
|
img:'.pic&&img&&src',
|
||||||
|
desc:'.webzi_top&&li:eq(1)&&span&&Text;;;.webzi_top&&li:eq(3)&&Text;.webzi_top&&li:eq(2)&&Text',
|
||||||
|
content:'#idDIV--a&&Text',
|
||||||
|
tabs:'.content_jrtop:eq(0)&&li',
|
||||||
|
lists:'.videourl:eq(#id)&&li'
|
||||||
|
},
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
// 在线之家地址发布页 https://www.zxzj.site
|
||||||
|
|
||||||
|
muban.首图2.二级.desc = '.data:eq(3)&&Text;;;.data:eq(1)&&Text;.data:eq(2)&&Text';
|
||||||
|
var rule = {
|
||||||
|
title:'在线之家',
|
||||||
|
模板:'首图2',
|
||||||
|
host:'https://www.zxzj.site',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,"li:eq(0)&&a:eq(2)&&href");print(src);HOST=src',
|
||||||
|
url:'/vodshow/fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-----fypage---{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"冒险"}]},{"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":"其他"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"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":"其他"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"5":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"6":[{"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":"少年"}]},{"key":"area","name":"地区","value":[{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
tab_exclude:'夸克网盘|迅雷云盘|百度网盘',
|
||||||
|
// 搜索:muban.首图2.搜索1,
|
||||||
|
搜索: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
图片来源:'@Referer=https://api.douban.com/@User-Agent=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/113.0.0.0%20Safari/537.36',
|
||||||
|
|
||||||
|
/*
|
||||||
|
lazy代码:源于海阔香雅情大佬 / 小程序:香情影视 https://pastebin.com/L4tHdvFn
|
||||||
|
*/
|
||||||
|
lazy:`js:
|
||||||
|
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
var from = html.from;
|
||||||
|
if (html.encrypt == '1') {
|
||||||
|
url = unescape(url)
|
||||||
|
} else if (html.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url))
|
||||||
|
}
|
||||||
|
if (/m3u8|mp4/.test(url)) {
|
||||||
|
input = url
|
||||||
|
} else if (/line3|line5/.test(from)) {
|
||||||
|
var ifrwy = request(url, {
|
||||||
|
headers: {
|
||||||
|
"User-Agent": MOBILE_UA,
|
||||||
|
"Referer": HOST
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// let code = ifrwy.match(/var url = '(.*?)'/)[1].split('').reverse().join('');
|
||||||
|
let code = '';
|
||||||
|
if (/Cloud/.test(url)) {
|
||||||
|
code = ifrwy.match(/var url = '(.*?)'/)[1].split('').reverse().join('');
|
||||||
|
} else if (/player-v2/.test(url)) {
|
||||||
|
code = ifrwy.match(/data":"(.*?)"/)[1].split('').reverse().join('');
|
||||||
|
}
|
||||||
|
let temp = '';
|
||||||
|
for (let i = 0x0; i < code.length; i = i + 0x2) {
|
||||||
|
temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10))
|
||||||
|
}
|
||||||
|
input=temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7);
|
||||||
|
} else{
|
||||||
|
input
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '追忆', // csp_AppYsV2
|
||||||
|
host: 'http://222.211.73.157:1122',
|
||||||
|
hostJs: 'print(HOST);let html=request(HOST,{headers:{"User-Agent":"Dart/3.0 (dart:io)"}});let src = JSON.parse(html).domain;print(src);HOST=src',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
// http://ym.dytt996.com:3/api.php/app/video?tid=20&class=&area=&lang=&year=&limit=18&pg=1
|
||||||
|
filter_url: '&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
|
||||||
|
detailUrl: '/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable: 1, //是否启用分类筛选,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'Dart/2.14 (dart:io)'
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_name: '电影&电视剧&动漫&综艺', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url: '1&7&8&3',
|
||||||
|
play_parse: true,
|
||||||
|
lazy:'js:if(/m3u8|mp4/.test(input)){input}else{let purl=request("http://115.231.220.36:9999/jx/tvbox/zytv.php?url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}',
|
||||||
|
limit: 6,
|
||||||
|
推荐: 'json:list[0].vlist;*;*;*;*',
|
||||||
|
一级: 'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
|
||||||
|
二级: 'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});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)}',
|
||||||
|
搜索: '*',
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
var rule={title:'乐猪TV',host:'http://www.lezhutv.com',url:'/list/fyclassfyfilter.html',filterable:1,filter_url:'_fypage_desc_{{fl.by}}_0_0___',filter:{"1":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"2":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"4":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"3":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"14":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"15":[{"key":"by","name":"排序","value":[{"n":"全部","v":"time"},{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]},searchUrl:'/index.php?m=vod-search#wd=**&search=;post',searchable:2,quickSearch:0,headers:{'User-Agent':'MOBILE_UA',},timeout:5000,class_parse:'div.nav a;a&&Text;a&&href;/(\\d+)-1.html',play_parse:true,lazy:'',limit:5,推荐:'.tbox2;*;*;*;*;*',double:true,一级:'ul.tbox_m2 li;a&&title;a&&data-original;span&&Text;a&&href',二级:{"title":".data h4--i&&Text;.yac&&Text","img":".item-lazy&&data-original","desc":";;;.act&&Text;.dir&&Text","content":".tbox_js&&Text","tabs":"js:pdfa=jsp.pdfa;TABS=pdfa(html,'.tbox_t h3').map(function(it,idex){return '线路'+(idex+1)})","lists":"ul.list_block:eq(#id) li","tabs":".tbox_t h3"},搜索:'ul.tbox_m li;*;*;*;*',}
|
||||||
@@ -0,0 +1,228 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '影探[V2]', // csp_AppYsV2
|
||||||
|
// host: 'http://ytcms.lyyytv.cn/api.php/app/',
|
||||||
|
host: 'http://vipcms.lyyytv.cn/api.php/app/',
|
||||||
|
url: 'video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&letter={{fl.letter}}&year={{fl.year}}&by={{fl.by}}',
|
||||||
|
filter: {
|
||||||
|
"32":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"篮球","v":"篮球"},{"n":"足球","v":"足球"},{"n":"网球","v":"网球"},{"n":"斯洛克","v":"斯洛克"}]}],
|
||||||
|
"20":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"21":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"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":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
|
||||||
|
"47":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"48":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"50":[{"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"}]}],
|
||||||
|
"46":[{"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"}]}],
|
||||||
|
"53":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"58":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"5":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"44":[{"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"}]}],
|
||||||
|
"51":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国漫","v":"国漫"},{"n":"日本","v":"日本"},{"n":"港台","v":"港台"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"45":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}],
|
||||||
|
"52":[{"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"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"lang","name":"语言","value":[{"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"}]}],
|
||||||
|
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"1":[{"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":"农村"}]},{"key":"area","name":"地区","value":[{"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"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"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"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/detail?vod_id=fyid',
|
||||||
|
searchUrl: '/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'okhttp/4.1.0'},
|
||||||
|
timeout:5000,
|
||||||
|
// 分类筛选 /api.php/app/nav || /xgapp.php/v1/nav || /api.php/v1.vod/types
|
||||||
|
class_name:'新电影4K&新剧4K&好莱坞4K&港台经典4k&少儿动画4K&国剧盛典4K&怀旧TVB&动漫4K&邵氏老电影4K&国产老电影4K&合拍经典4K&明星专辑4K&恐怖片精选4K&动漫&综艺&电影综合&电视剧综合&体育赛事',
|
||||||
|
class_url:'20&21&47&48&50&46&53&58&5&44&51&45&52&4&3&1&2&32',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
let play_Url = '';
|
||||||
|
if (/\\.m3u8|\\.mp4/.test(input)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/,/.test(input) && /url=/.test(input)) {
|
||||||
|
input = input.split('url=');
|
||||||
|
play_Url = input[0].split(',')[0];
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input[1],
|
||||||
|
playUrl: play_Url,
|
||||||
|
parse: 1
|
||||||
|
}
|
||||||
|
} else if (/url=|id=/.test(input)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: JSON.parse(request(input)).url,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/youku|iqiyi|v\\.qq\\.com|pptv|sohu|le\\.com|1905\\.com|mgtv|bilibili|ixigua/.test(input)) {
|
||||||
|
play_Url = /bilibili/.test(input) ? 'https://jx.xmflv.com/?url=' : 'https://jx.777jiexi.com/player/?url='; // type0的parse
|
||||||
|
// play_Url = /bilibili/.test(input) ? 'https://jx.xmflv.com/?url=' : 'json:http://pandown.pro/app/kkdy.php?url='; // type1的parse可加'json:'直接解析url (除了蜂蜜的'影视TV',其它的壳皆可用)
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
playUrl: play_Url,
|
||||||
|
parse: 1,
|
||||||
|
header: JSON.stringify({
|
||||||
|
'user-agent': 'Mozilla/5.0',
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
input
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
limit:6,
|
||||||
|
// 图片来源:'@Referer=https://api.douban.com/@User-Agent=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/113.0.0.0%20Safari/537.36',
|
||||||
|
推荐:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
if(HOST.endsWith('/')){
|
||||||
|
jsondata = JSON.parse(request(HOST + 'vodPhbAll'));
|
||||||
|
} else {
|
||||||
|
jsondata = JSON.parse(request(HOST + '/vodPhbAll'));
|
||||||
|
}
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
if(HOST.endsWith('/')){
|
||||||
|
jsondata = JSON.parse(request(HOST + 'index_video'));
|
||||||
|
} else {
|
||||||
|
jsondata = JSON.parse(request(HOST + '/index_video'));
|
||||||
|
}
|
||||||
|
videoList = /xgapp/.test(HOST) ? jsondata.data : jsondata.list;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach((it,idex) => {
|
||||||
|
let vlist = /v1\\.vod/.test(HOST) ? videoList[idex].vod_list : videoList[idex].vlist ;
|
||||||
|
vlist.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
一级:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = input.replace('video','v1.vod').replace('tid','type').replace('pg=','page=');
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[4];
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.list || jsondata.data;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:`js:
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = HOST + '/'+ input.split('/')[3];
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[3].replace('detail','video_detail').replace('vod_id','id');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let html = request(input);
|
||||||
|
html = JSON.parse(html);
|
||||||
|
let node = /xgapp/.test(HOST) ? html.data.vod_info : html.data;
|
||||||
|
VOD = {
|
||||||
|
vod_id: node.vod_id,
|
||||||
|
vod_name: node.vod_name,
|
||||||
|
vod_pic: node.vod_pic,
|
||||||
|
type_name: node.vod_class,
|
||||||
|
vod_year: node.vod_year,
|
||||||
|
vod_area: node.vod_area,
|
||||||
|
vod_remarks: node.vod_remarks,
|
||||||
|
vod_actor: node.vod_actor,
|
||||||
|
vod_director: node.vod_director,
|
||||||
|
vod_content: node.vod_content.strip()
|
||||||
|
};
|
||||||
|
if (typeof play_url === 'undefined') {
|
||||||
|
var play_url = ''
|
||||||
|
}
|
||||||
|
let episodes = /v1\\.vod/.test(HOST)?node.vod_play_list:node.vod_url_with_player;
|
||||||
|
if (episodes != '') {
|
||||||
|
let playMap = {};
|
||||||
|
episodes.forEach(ep => {
|
||||||
|
let from = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
from = ep.player_info.from||ep.player_info.show||ep.from||ep.show;
|
||||||
|
} else {
|
||||||
|
from = ep.code||ep.name;
|
||||||
|
}
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = []
|
||||||
|
}
|
||||||
|
let parse_api = '';
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
parse_api = ep.player_info.parse != null ? ep.player_info.parse : ep.player_info.parse2;
|
||||||
|
// parse_api = /,/.test(parse_api) ? parse_api.split(',')[1] : parse_api;
|
||||||
|
} else {
|
||||||
|
parse_api = ep.parse_api;
|
||||||
|
}
|
||||||
|
log('parse_api =========> '+parse_api);
|
||||||
|
if (parse_api != null && !/\\.m3u8|\\.mp4/.test(ep.url)) {
|
||||||
|
parse_api = parse_api.replaceAll('..','.') ;
|
||||||
|
ep.url = ep.url.replaceAll('$','$'+parse_api);
|
||||||
|
}
|
||||||
|
playMap[from].push(ep.url)
|
||||||
|
});
|
||||||
|
let playFrom = [];
|
||||||
|
let playList = [];
|
||||||
|
Object.keys(playMap).forEach(key => {
|
||||||
|
playFrom.push(key);
|
||||||
|
playList.push(playMap[key])
|
||||||
|
});
|
||||||
|
VOD.vod_play_from = playFrom.join('$$$');
|
||||||
|
VOD.vod_play_url = playList.join('$$$');
|
||||||
|
} else {
|
||||||
|
VOD.vod_play_from = node.vod_play_from;
|
||||||
|
VOD.vod_play_url = node.vod_play_url;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
log("获取二级详情页发生错误:" + e.message);
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
搜索:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = (HOST + '/'+ input.split('/')[3]).replace('/search','').replace('text=','wd=').replace('pg=','page=');
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[3]
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.list || jsondata.data;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
var rule={title:'哔哩直播',host:'https://api.live.bilibili.com',homeUrl:'/xlive/web-interface/v1/second/getUserRecommend?page=1&page_size=30&platform=web',url:'/xlive/web-interface/v1/second/getList?platform=web&parent_area_id=fyclass&area_id=fyfilter&sort_type=online&page=fypage',class_name:'娱乐&网游&手游&单机游戏&电台&虚拟主播&生活&知识&赛事&购物',class_url:'10&2&3&6&1&5&9&11&13&300',filterable:1,filter_url:'{{fl.area}}',filter_def:{10:{area:'33'},2:{area:'86'},3:{area:'35'},6:{area:'236'},1:{area:'21'},5:{area:'190'},9:{area:'371'},11:{area:'376'},13:{area:'561'},300:{area:'30000'}},filter:{"2":[{"key":"area","name":"分区","value":[{"n":"英雄联盟","v":"86"},{"n":"DOTA2","v":"92"},{"n":"CS:GO","v":"89"},{"n":"APEX英雄","v":"240"},{"n":"永劫无间","v":"666"},{"n":"穿越火线","v":"88"},{"n":"守望先锋","v":"87"},{"n":"吃鸡行动","v":"80"},{"n":"逃离塔科夫","v":"252"},{"n":"传奇","v":"695"},{"n":"DNF","v":"78"},{"n":"生死狙击2","v":"575"},{"n":"洛奇英雄传","v":"599"},{"n":"最终幻想14","v":"102"},{"n":"星际战甲","v":"249"},{"n":"梦三国","v":"710"},{"n":"英魂之刃","v":"690"},{"n":"剑网3","v":"82"},{"n":"铁甲雄兵","v":"691"},{"n":"封印者","v":"300"},{"n":"新天龙八部","v":"653"},{"n":"赛尔号","v":"667"},{"n":"造梦西游","v":"668"},{"n":"洛克王国","v":"669"},{"n":"问道","v":"670"},{"n":"诛仙世界","v":"654"},{"n":"大话西游","v":"652"},{"n":"奇迹MU","v":"683"},{"n":"永恒之塔","v":"684"},{"n":"QQ三国","v":"685"},{"n":"人间地狱","v":"677"},{"n":"VALORANT","v":"329"},{"n":"彩虹岛","v":"686"},{"n":"洛奇","v":"663"},{"n":"跑跑卡丁车","v":"664"},{"n":"星际公民","v":"658"},{"n":"Squad战术小队","v":"659"},{"n":"反恐精英Online","v":"629"},{"n":"风暴奇侠","v":"648"},{"n":"装甲战争","v":"642"},{"n":"失落的方舟","v":"590"},{"n":"阿尔比恩","v":"639"},{"n":"猎杀对决","v":"600"},{"n":"CFHD ","v":"472"},{"n":"骑士精神2","v":"650"},{"n":"超击突破","v":"680"},{"n":"武装突袭","v":"634"},{"n":"300英雄","v":"84"},{"n":"炉石传说","v":"91"},{"n":"剑网3缘起","v":"499"},{"n":"街头篮球","v":"649"},{"n":"综合射击","v":"601"},{"n":"剑灵","v":"505"},{"n":"艾尔之光","v":"651"},{"n":"黑色沙漠","v":"632"},{"n":"天涯明月刀","v":"596"},{"n":"超激斗梦境","v":"519"},{"n":"冒险岛","v":"574"},{"n":"逆战","v":"487"},{"n":"魔兽争霸3","v":"181"},{"n":"QQ飞车","v":"610"},{"n":"魔兽世界","v":"83"},{"n":"FIFA ONLINE 4","v":"388"},{"n":"NBA2KOL2","v":"581"},{"n":"使命召唤:战区","v":"318"},{"n":"VRChat","v":"656"},{"n":"坦克世界","v":"115"},{"n":"战舰世界","v":"248"},{"n":"战争雷霆","v":"316"},{"n":"战意","v":"383"},{"n":"风暴英雄","v":"114"},{"n":"星际争霸2","v":"93"},{"n":"刀塔自走棋","v":"239"},{"n":"堡垒之夜","v":"164"},{"n":"枪神纪","v":"251"},{"n":"三国杀","v":"81"},{"n":"龙之谷","v":"112"},{"n":"古剑奇谭OL","v":"173"},{"n":"幻想全明星","v":"176"},{"n":"怀旧网游","v":"288"},{"n":"新游前瞻","v":"298"},{"n":"星战前夜:晨曦","v":"331"},{"n":"梦幻西游端游","v":"350"},{"n":"流放之路","v":"551"},{"n":"FPS沙盒","v":"633"},{"n":"永恒轮回","v":"459"},{"n":"激战2","v":"607"},{"n":"其他网游","v":"107"}]}],"3":[{"key":"area","name":"分区","value":[{"n":"王者荣耀","v":"35"},{"n":"和平精英","v":"256"},{"n":"LOL手游","v":"395"},{"n":"原神","v":"321"},{"n":"第五人格","v":"163"},{"n":"明日方舟","v":"255"},{"n":"哈利波特:魔法觉醒 ","v":"474"},{"n":"幻塔","v":"550"},{"n":"金铲铲之战","v":"514"},{"n":"APEX手游","v":"506"},{"n":"深空之眼","v":"598"},{"n":"无期迷途","v":"675"},{"n":"光遇","v":"687"},{"n":"跃迁旅人","v":"717"},{"n":"香肠派对","v":"689"},{"n":"猫之城","v":"645"},{"n":"玛娜希斯回响","v":"644"},{"n":"使命召唤手游","v":"386"},{"n":"黑色沙漠手游","v":"615"},{"n":"崩坏3","v":"40"},{"n":"游戏王:决斗链接","v":"407"},{"n":"游戏王","v":"303"},{"n":"蛋仔派对","v":"571"},{"n":"阴阳师","v":"36"},{"n":"空之要塞:启航","v":"718"},{"n":"火影忍者手游","v":"292"},{"n":"Fate/GO","v":"37"},{"n":"综合棋牌","v":"354"},{"n":"QQ飞车手游","v":"154"},{"n":"决战!平安京","v":"140"},{"n":"狼人杀","v":"41"},{"n":"三国杀移动版","v":"352"},{"n":"碧蓝航线","v":"113"},{"n":"影之诗","v":"156"},{"n":"明日之后","v":"189"},{"n":"部落冲突:皇室战争","v":"50"},{"n":"奥比岛手游","v":"661"},{"n":"盾之勇者成名录:浪潮","v":"704"},{"n":"雀姬","v":"214"},{"n":"公主连结Re:Dive","v":"330"},{"n":"DNF手游","v":"343"},{"n":"FIFA足球世界","v":"641"},{"n":"BanG Dream","v":"258"},{"n":"荒野乱斗","v":"469"},{"n":"CF手游","v":"333"},{"n":"战双帕弥什","v":"293"},{"n":"天涯明月刀手游","v":"389"},{"n":"解密游戏","v":"42"},{"n":"恋爱养成游戏","v":"576"},{"n":"暗黑破坏神:不朽","v":"492"},{"n":"暗区突围","v":"502"},{"n":"跑跑卡丁车手游","v":"265"},{"n":"非人学园","v":"212"},{"n":"百闻牌","v":"286"},{"n":"猫和老鼠手游","v":"269"},{"n":"坎公骑冠剑","v":"442"},{"n":"忍者必须死3","v":"203"},{"n":"梦幻西游手游","v":"342"},{"n":"航海王热血航线","v":"504"},{"n":"少女前线","v":"39"},{"n":"300大作战","v":"688"},{"n":"少女前线:云图计划","v":"525"},{"n":"漫威超级战争","v":"478"},{"n":"摩尔庄园手游","v":"464"},{"n":"宝可梦大集结","v":"493"},{"n":"小动物之星","v":"473"},{"n":"天地劫:幽城再临","v":"448"},{"n":"漫威对决","v":"511"},{"n":" 东方归言录","v":"538"},{"n":"梦幻模拟战","v":"178"},{"n":"时空猎人3","v":"643"},{"n":"重返帝国","v":"613"},{"n":"休闲小游戏","v":"679"},{"n":"其他手游","v":"98"},{"n":"新游评测","v":"274"}]}],"6":[{"key":"area","name":"分区","value":[{"n":"主机游戏","v":"236"},{"n":"我的世界","v":"216"},{"n":"独立游戏","v":"283"},{"n":"怀旧游戏","v":"237"},{"n":"弹幕互动玩法","v":"460"},{"n":"恐怖游戏","v":"276"},{"n":"禁闭求生","v":"707"},{"n":"斯普拉遁3","v":"694"},{"n":"卧龙:苍天陨落","v":"700"},{"n":"使命召唤19","v":"282"},{"n":"异度神剑","v":"665"},{"n":"艾尔登法环","v":"555"},{"n":"聚会游戏","v":"636"},{"n":"哥谭骑士","v":"716"},{"n":"命运2","v":"277"},{"n":"沙石镇时光","v":"630"},{"n":"Dread Hunger","v":"591"},{"n":"红色警戒2","v":"693"},{"n":"失落迷城:群星的诅咒","v":"714"},{"n":"策略游戏","v":"570"},{"n":"战地风云","v":"597"},{"n":"幽灵线:东京","v":"612"},{"n":"糖豆人","v":"357"},{"n":"消逝的光芒2","v":"586"},{"n":"只狼","v":"245"},{"n":"怪物猎人","v":"578"},{"n":"饥荒","v":"218"},{"n":"精灵宝可梦","v":"228"},{"n":"FIFA23","v":"708"},{"n":"暖雪","v":"582"},{"n":"全面战争:战锤3","v":"594"},{"n":"彩虹六号:异种","v":"580"},{"n":"战神","v":"579"},{"n":"FORZA 极限竞速","v":"302"},{"n":"NBA2K","v":"362"},{"n":"帝国时代4","v":"548"},{"n":"光环:无限","v":"559"},{"n":"孤岛惊魂6","v":"537"},{"n":"植物大战僵尸","v":"309"},{"n":"仙剑奇侠传七","v":"540"},{"n":"灵魂筹码","v":"223"},{"n":"格斗游戏","v":"433"},{"n":"荒野大镖客2","v":"226"},{"n":"重生细胞","v":"426"},{"n":"刺客信条","v":"227"},{"n":"恐鬼症","v":"387"},{"n":"以撒","v":"219"},{"n":"双人成行","v":"446"},{"n":"方舟","v":"295"},{"n":"仁王2","v":"313"},{"n":"鬼泣5","v":"244"},{"n":"枪火重生","v":"364"},{"n":"盗贼之海","v":"341"},{"n":"胡闹厨房","v":"507"},{"n":"体育游戏","v":"500"},{"n":"恐惧之间","v":"439"},{"n":"塞尔达","v":"308"},{"n":"马力欧制造2","v":"261"},{"n":"全境封锁2","v":"243"},{"n":"骑马与砍杀","v":"326"},{"n":"人类一败涂地","v":"270"},{"n":"鬼谷八荒","v":"424"},{"n":"无主之地3","v":"273"},{"n":"辐射76","v":"220"},{"n":"全面战争","v":"257"},{"n":"亿万僵尸","v":"463"},{"n":"暗黑破坏神2","v":"535"},{"n":"文字游戏","v":"583"},{"n":"恋爱模拟游戏","v":"592"},{"n":"泰拉瑞亚","v":"593"},{"n":"雨中冒险2","v":"441"},{"n":"游戏速通","v":"678"},{"n":"摔角城大乱斗","v":"681"},{"n":"勇敢的哈克","v":"692"},{"n":" 审判系列","v":"698"},{"n":"其他单机","v":"235"}]}],"1":[{"key":"area","name":"分区","value":[{"n":"视频唱见","v":"21"},{"n":"萌宅领域","v":"530"},{"n":"视频聊天","v":"145"},{"n":"舞见","v":"207"},{"n":"情感","v":"706"},{"n":"户外","v":"123"},{"n":"日常","v":"399"}]}],"5":[{"key":"area","name":"分区","value":[{"n":"唱见电台","v":"190"},{"n":"聊天电台","v":"192"},{"n":"配音","v":"193"}]}],"9":[{"key":"area","name":"分区","value":[{"n":"虚拟主播","v":"371"},{"n":"3D虚拟主播","v":"697"}]}],"10":[{"key":"area","name":"分区","value":[{"n":"生活分享","v":"646"},{"n":"运动","v":"628"},{"n":"搞笑","v":"624"},{"n":"手工绘画","v":"627"},{"n":"萌宠","v":"369"},{"n":"美食","v":"367"},{"n":"时尚","v":"378"},{"n":"影音馆","v":"33"}]}],"11":[{"key":"area","name":"分区","value":[{"n":"社科法律心理","v":"376"},{"n":"人文历史","v":"702"},{"n":"校园学习","v":"372"},{"n":"职场·技能","v":"377"},{"n":" 科技","v":"375"},{"n":"科学科普","v":"701"},{"n":"时政","v":"715"}]}],"13":[{"key":"area","name":"分区","value":[{"n":"游戏赛事","v":"561"},{"n":"体育赛事","v":"562"},{"n":"赛事综合","v":"563"}]}],"300":[{"key":"area","name":"分区","value":[{"n":"购物","v":"300000"}]}]},detailUrl:'https://live.bilibili.com/fyid',searchUrl:'https://api.bilibili.com/x/web-interface/search/type?search_type=live&keyword=**&page=1',searchable:2,quickSearch:0,headers:{"User-Agent":"PC_UA","Referer":"https://www.bilibili.com","Cookie":"$bili_cookie"},timeout:5000,limit:8,play_parse:true,lazy:"js:let ids=input.split('_');let result={};let iurl='https://api.live.bilibili.com/room/v1/Room/playUrl?cid='+ids[1]+'&'+ids[0];let html=request(iurl);let jRoot=JSON.parse(html);let jo=jRoot['data'];let ja=jo['durl'];let purl='';if(ja.length>0){purl=ja[0]['url']}result['parse']=0;result['playUrl']='';result['url']=unescape(purl);result['header']={Referer:'https://live.bilibili.com','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'};if(/h5/.test(ids[0])){result['contentType']='';input=result}else{result['contentType']='video/x-flv';input=result}",double:false,推荐:'*',一级:'json:data.list;title;system_cover;uname;roomid',二级:"js:let aid=input.match(/\\/(\\d+)/)[1];log(aid);let html=request('https://api.live.bilibili.com/room/v1/Room/get_info?room_id='+aid);let jo=JSON.parse(html).data;let title=jo['title'];let pic=jo['keyframe'];let desc=jo['description'];let dire=jo['uid'];let typeName=jo['area_name'];let remark='在线人数:'+jo['online'];let vod={vod_id:aid,vod_name:title,vod_pic:pic,type_name:typeName,vod_area:'bililivedanmu',vod_remarks:remark,vod_actor:'直播间id-'+aid,vod_director:dire,vod_content:desc};vod['vod_play_from']='B站';vod['vod_play_url']='flv线路原画$platform=web&quality=4_'+aid+'#flv线路高清$platform=web&quality=3_'+aid+'#h5线路原画$platform=h5&quality=4_'+aid+'#h5线路高清$platform=h5&quality=3_'+aid;VOD=vod;",搜索:'js:let html=request(input);let msg=JSON.parse(html).message;if(msg!=="0"){VODS=[{vod_name:KEY+"➢"+msg,vod_id:"no_data",vod_remarks:"别点,缺少bili_cookie",vod_pic:"https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg"}]}else{let videos=[];let vodList=JSON.parse(html).data.result.live_room;vodList.forEach(function(vod){let aid=vod["roomid"];let title="直播间:"+vod["title"].replace(\'<em class="keyword">\',"").replace("</em>","");let img="https:"+vod["user_cover"];let remark=vod["watched_show"]["text_small"]+" "+vod["uname"];videos.push({vod_id:aid,vod_name:title,vod_pic:img,vod_remarks:remark})});VODS=videos}',}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
muban.mxpro.二级.desc = '.module-info-item:eq(4)&&Text;;;.module-info-item-content:eq(1)&&Text;.module-info-item-content:eq(0)&&Text';
|
||||||
|
muban.mxpro.二级.tabs = '#y-playList .tab-item';
|
||||||
|
var rule = {
|
||||||
|
title:'大师兄影视',
|
||||||
|
模板:'mxpro',
|
||||||
|
// host:'https://dsxys.com',
|
||||||
|
host:'https://dsxys.pro',
|
||||||
|
// url:'/vodshow/fyclass--------fypage---.html',
|
||||||
|
url:'/vodshow/fyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter:{
|
||||||
|
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"奇幻片","v":"38"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"记录片","v":"22"},{"n":"悬疑片","v":"44"},{"n":"冒险片","v":"45"},{"n":"犯罪片","v":"46"}]},{"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":"儿童"},{"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":"lang","name":"语言","value":[{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"海外剧","v":"23"},{"n":"动画片","v":"50"}]},{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"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":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"3"},{"n":"内地综艺","v":"29"},{"n":"港台综艺","v":"30"},{"n":"日韩综艺","v":"31"},{"n":"欧美综艺","v":"32"}]},{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"4"},{"n":"国产动漫","v":"33"},{"n":"日韩动漫","v":"34"},{"n":"欧美动漫","v":"35"},{"n":"港台动漫","v":"36"},{"n":"海外动漫","v":"37"},{"n":"动漫电影","v":"39"},{"n":"番剧","v":"60"},{"n":"国创","v":"61"}]},{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
3:{cateId:'3'},
|
||||||
|
4:{cateId:'4'}
|
||||||
|
},
|
||||||
|
class_parse:'.navbar-items.swiper-wrapper li;a&&title;a&&href;/(\\d+).html',
|
||||||
|
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
|
||||||
|
|
||||||
|
// searchUrl:'/search-**----------fypage---/',
|
||||||
|
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
detailUrl:'/v/fyid.html', //非必填,二级详情拼接链接
|
||||||
|
二级访问前:'log(MY_URL);MY_URL=MY_URL.replace("/p","/v").replace("-1-1","")',
|
||||||
|
搜索:'json:list;name;pic;;id',
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '布雷蓝光[V2]', // csp_AppYsV2
|
||||||
|
host: 'http://117.175.212.198:8088',
|
||||||
|
//host: 'https://appto-v3-1251970844.cos.ap-chongqing.myqcloud.com/accredits/68.json',
|
||||||
|
//http://xn--yeta099v.online:66
|
||||||
|
//hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":"Dart/3.0 (dart:io)"}});let src = JSON.parse(html).domain;print(src);HOST=src',
|
||||||
|
homeUrl:'/api.php/app/index_video',
|
||||||
|
url: '/api.php/app/video?tid=fyclassfyfilter&limit=18&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"lang","name":"语言","value":[{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"新加坡","v":"新加坡"},{"n":"印度","v":"印度"},{"n":"泰国","v":"泰国"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}],
|
||||||
|
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"lang","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":"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}],
|
||||||
|
"5":[{"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":"文艺"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"美国","v":"美国"},{"n":"英国","v":"英国"},{"n":"西班牙","v":"西班牙"},{"n":"葡萄牙","v":"葡萄牙"},{"n":"意大利","v":"意大利"},{"n":"德国","v":"德国"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}],
|
||||||
|
"21":[{"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":"文艺"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"}]},{"key":"lang","name":"语言","value":[{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}],
|
||||||
|
"22":[{"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":"台湾"}]},{"key":"lang","name":"语言","value":[{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/api.php/app/video_detail?id=fyid',
|
||||||
|
searchUrl: '/api.php/app/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'Dart/3.0 (dart:io)'},
|
||||||
|
timeout:5000,
|
||||||
|
class_name:'电影&电视剧&综艺&动漫', // 分类筛选 /api.php/app/nav
|
||||||
|
class_url:'1&2&3&4',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:'js:if(/m3u8|mp4/.test(input)){input}else{let purl=request("https://bltv.f3322.net/api/?key=6CCRD2fRGaByuEERjZ&url="+input);input={jx:0,url:JSON.parse(purl).url,parse:0}}',
|
||||||
|
limit:6,
|
||||||
|
推荐:'json:list[1].vlist;*;*;*;*',
|
||||||
|
一级:'json:list;vod_name;vod_pic;vod_remarks;vod_id',
|
||||||
|
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url=""}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});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)}',
|
||||||
|
搜索:'*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'校长影视[云盘]',
|
||||||
|
host:'https://xzys.fun',
|
||||||
|
homeUrl: '/',
|
||||||
|
url: '/fyclass.html?page=fypage',
|
||||||
|
filter_url:'{{fl.class}}',
|
||||||
|
filter:{
|
||||||
|
},
|
||||||
|
searchUrl: '/search.html?keyword=**',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:0,
|
||||||
|
headers:{
|
||||||
|
'User-Agent': 'PC_UA',
|
||||||
|
'Cookie':''
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
class_name: '电视剧&电影&动漫&纪录片&综艺',
|
||||||
|
class_url: 'dsj&dy&dm&jlp&zy',
|
||||||
|
play_parse:true,
|
||||||
|
play_json:[{
|
||||||
|
re:'*',
|
||||||
|
json:{
|
||||||
|
parse:0,
|
||||||
|
jx:0
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
lazy:'',
|
||||||
|
limit:6,
|
||||||
|
推荐:'div.container div.row a:has(>img);img&&alt;img&&src;img&&alt;a&&href',
|
||||||
|
一级:'div.container div.row div.list-boxes;img&&alt;img&&src;div.list-actions&&Text;a&&href',
|
||||||
|
二级:{
|
||||||
|
title:"div.container div.row h1&&Text",
|
||||||
|
img:"div.container div.row img&&src",
|
||||||
|
desc:'div.container div.row div.article-infobox&&Text', //remark
|
||||||
|
content:'div.container div.row div#info&&Text',
|
||||||
|
tabs:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
TABS=[]
|
||||||
|
let d = pdfa(html, 'div.container div.row a');
|
||||||
|
let tabsa = [];
|
||||||
|
let tabsq = [];
|
||||||
|
let tabsm = false;
|
||||||
|
let tabse = false;
|
||||||
|
d.forEach(function(it) {
|
||||||
|
let burl = pdfh(it, 'a&&href');
|
||||||
|
if (burl.startsWith("https://www.aliyundrive.com/s/")){
|
||||||
|
tabsa.push("阿里雲盤");
|
||||||
|
}else if (burl.startsWith("https://pan.quark.cn/s/")){
|
||||||
|
tabsq.push("夸克網盤");
|
||||||
|
}else if (burl.startsWith("magnet")){
|
||||||
|
tabsm = true;
|
||||||
|
}else if (burl.startsWith("ed2k")){
|
||||||
|
tabse = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (tabsm === true){
|
||||||
|
TABS.push("磁力");
|
||||||
|
}
|
||||||
|
if (tabse === true){
|
||||||
|
TABS.push("電驢");
|
||||||
|
}
|
||||||
|
if (false && tabsa.length + tabsq.length > 1){
|
||||||
|
TABS.push("選擇右側綫路");
|
||||||
|
}
|
||||||
|
let tmpIndex;
|
||||||
|
tmpIndex=1;
|
||||||
|
tabsa.forEach(function(it){
|
||||||
|
TABS.push(it + tmpIndex);
|
||||||
|
tmpIndex = tmpIndex + 1;
|
||||||
|
});
|
||||||
|
tmpIndex=1;
|
||||||
|
tabsq.forEach(function(it){
|
||||||
|
TABS.push(it + tmpIndex);
|
||||||
|
tmpIndex = tmpIndex + 1;
|
||||||
|
});
|
||||||
|
log('xzys TABS >>>>>>>>>>>>>>>>>>' + TABS);
|
||||||
|
`,
|
||||||
|
lists:`js:
|
||||||
|
log(TABS);
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
LISTS = [];
|
||||||
|
let d = pdfa(html, 'div.container div.row a');
|
||||||
|
let lista = [];
|
||||||
|
let listq = [];
|
||||||
|
let listm = [];
|
||||||
|
let liste = [];
|
||||||
|
d.forEach(function(it){
|
||||||
|
let burl = pdfh(it, 'a&&href');
|
||||||
|
let title = pdfh(it, 'a&&Text');
|
||||||
|
log('dygang title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
|
||||||
|
log('dygang burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
|
||||||
|
let loopresult = title + '$' + burl;
|
||||||
|
if (burl.startsWith("https://www.aliyundrive.com/s/")){
|
||||||
|
if (true){
|
||||||
|
if (TABS.length==1){
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=ali&type=push&confirm=0&url=" + encodeURIComponent(burl);
|
||||||
|
}else{
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=ali&type=push&url=" + encodeURIComponent(burl);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
burl = "push://" + burl;
|
||||||
|
}
|
||||||
|
loopresult = title + '$' + burl;
|
||||||
|
lista.push(loopresult);
|
||||||
|
}else if (burl.startsWith("https://pan.quark.cn/s/")){
|
||||||
|
if (true){
|
||||||
|
if (TABS.length==1){
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&confirm=0&url=" + encodeURIComponent(burl);
|
||||||
|
}else{
|
||||||
|
burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&url=" + encodeURIComponent(burl);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
burl = "push://" + burl;
|
||||||
|
}
|
||||||
|
loopresult = title + '$' + burl;
|
||||||
|
listq.push(loopresult);
|
||||||
|
}else if (burl.startsWith("magnet")){
|
||||||
|
listm.push(loopresult);
|
||||||
|
}else if (burl.startsWith("ed2k")){
|
||||||
|
liste.push(loopresult);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (listm.length>0){
|
||||||
|
LISTS.push(listm);
|
||||||
|
}
|
||||||
|
if (liste.length>0){
|
||||||
|
LISTS.push(liste);
|
||||||
|
}
|
||||||
|
if (false && lista.length + listq.length > 1){
|
||||||
|
LISTS.push(["選擇右側綫路,或3秒後自動跳過$http://127.0.0.1:10079/delay/"]);
|
||||||
|
}
|
||||||
|
lista.forEach(function(it){
|
||||||
|
LISTS.push([it]);
|
||||||
|
});
|
||||||
|
listq.forEach(function(it){
|
||||||
|
LISTS.push([it]);
|
||||||
|
});
|
||||||
|
`,
|
||||||
|
|
||||||
|
},
|
||||||
|
搜索:`js:
|
||||||
|
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||||
|
if (rule_fetch_params.headers.Cookie.startsWith("http")){
|
||||||
|
rule_fetch_params.headers.Cookie=fetch(rule_fetch_params.headers.Cookie);
|
||||||
|
let cookie = rule_fetch_params.headers.Cookie;
|
||||||
|
setItem(RULE_CK, cookie);
|
||||||
|
};
|
||||||
|
log('xzys seach cookie>>>>>>>>>>>>>' + rule_fetch_params.headers.Cookie);
|
||||||
|
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
|
||||||
|
log("xzys search params>>>>>>>>>>>>>>>" + JSON.stringify(_fetch_params));
|
||||||
|
let search_html = request( HOST + '/search.html?keyword=' + encodeURIComponent(KEY), _fetch_params)
|
||||||
|
//log("xzys search result>>>>>>>>>>>>>>>" + search_html);
|
||||||
|
let d=[];
|
||||||
|
let dlist = pdfa(search_html, 'div.container div.row div.list-boxes');
|
||||||
|
dlist.forEach(function(it){
|
||||||
|
let title = pdfh(it, 'h2 a img&&alt');
|
||||||
|
if (searchObj.quick === true){
|
||||||
|
if (title.includes(KEY)){
|
||||||
|
title = KEY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let img = pd(it, 'h2 a img&&src', HOST);
|
||||||
|
let content = pdfh(it, 'p.text_p&&Text');
|
||||||
|
let desc = pdfh(it, 'div.list-actions&&Text'); //remark
|
||||||
|
let url = pd(it, 'h2 a&&href', HOST);
|
||||||
|
d.push({
|
||||||
|
title:title,
|
||||||
|
img:img,
|
||||||
|
content:content,
|
||||||
|
desc:desc,
|
||||||
|
url:url
|
||||||
|
})
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1,274 @@
|
|||||||
|
if (typeof Object.assign != 'function') {
|
||||||
|
Object.assign = function () {
|
||||||
|
var target = arguments[0];
|
||||||
|
for (var i = 1; i < arguments.length; i++) {
|
||||||
|
var source = arguments[i];
|
||||||
|
for (var key in source) {
|
||||||
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||||
|
target[key] = source[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
function getMubans() {
|
||||||
|
var mubanDict = { // 模板字典
|
||||||
|
mxpro: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
// homeUrl:'/',
|
||||||
|
url: '/vodshow/fyclass--------fypage---.html',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
// "Cookie": "searchneed=ok"
|
||||||
|
},
|
||||||
|
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "h1&&Text;.module-info-tag&&Text",
|
||||||
|
"img": ".lazyload&&data-original",
|
||||||
|
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
|
||||||
|
"content": ".module-info-introduction&&Text",
|
||||||
|
"tabs": ".module-tab-item",
|
||||||
|
"lists": ".module-play-list:eq(#id) a"
|
||||||
|
},
|
||||||
|
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
||||||
|
},
|
||||||
|
mxone5: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/show/fyclass--------fypage---.html',
|
||||||
|
searchUrl: '/search/**----------fypage---.html',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "h1&&Text;.tag-link&&Text",
|
||||||
|
"img": ".module-item-pic&&img&&data-src",
|
||||||
|
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
|
||||||
|
"content": ".vod_content&&Text",
|
||||||
|
"tabs": ".module-tab-item",
|
||||||
|
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
|
||||||
|
},
|
||||||
|
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||||
|
},
|
||||||
|
首图: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/vodshow/fyclass--------fypage---/',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
// "Cookie": "searchneed=ok"
|
||||||
|
},
|
||||||
|
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
|
||||||
|
"img": ".myui-content__thumb .lazyload&&data-original",
|
||||||
|
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
|
||||||
|
"content": ".content&&Text",
|
||||||
|
"tabs": ".nav-tabs:eq(0) li",
|
||||||
|
"lists": ".myui-content__list:eq(#id) li"
|
||||||
|
},
|
||||||
|
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||||
|
},
|
||||||
|
首图2: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/list/fyclass-fypage.html',
|
||||||
|
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'UC_UA',
|
||||||
|
// "Cookie": ""
|
||||||
|
},
|
||||||
|
// class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
||||||
|
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
|
||||||
|
"img": ".stui-content__thumb .lazyload&&data-original",
|
||||||
|
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
|
||||||
|
"content": ".detail&&Text",
|
||||||
|
"tabs": ".stui-vodlist__head h3",
|
||||||
|
"lists": ".stui-content__playlist:eq(#id) li"
|
||||||
|
},
|
||||||
|
搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||||
|
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||||
|
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||||
|
},
|
||||||
|
默认: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/vodshow/fyclass--------fypage---.html',
|
||||||
|
searchUrl: '/vodsearch/-------------.html?wd=**',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
},
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
},
|
||||||
|
vfed: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||||
|
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'UC_UA',
|
||||||
|
},
|
||||||
|
// class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
|
||||||
|
"img": ".fed-list-info&&a&&data-original",
|
||||||
|
"desc": ".fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text",
|
||||||
|
"content": ".fed-part-esan&&Text",
|
||||||
|
"tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
|
||||||
|
"lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
|
||||||
|
},
|
||||||
|
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
||||||
|
},
|
||||||
|
海螺3: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
searchUrl: '/v_search/**----------fypage---.html',
|
||||||
|
url: '/vod_____show/fyclass--------fypage---.html',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
cate_exclude: '明星|专题|最新|排行',
|
||||||
|
limit: 40,
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||||
|
double: true,
|
||||||
|
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
|
||||||
|
"img": ".hl-lazy&&data-original",
|
||||||
|
"desc": ".hl-infos-content&&.hl-text-conch&&Text",
|
||||||
|
"content": ".hl-content-text&&Text",
|
||||||
|
"tabs": ".hl-tabs&&a",
|
||||||
|
"lists": ".hl-plays-list:eq(#id)&&li"
|
||||||
|
},
|
||||||
|
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
},
|
||||||
|
海螺2: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
||||||
|
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
||||||
|
headers: {
|
||||||
|
'User-Agent': 'MOBILE_UA'
|
||||||
|
},
|
||||||
|
timeout: 5000,
|
||||||
|
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
||||||
|
limit: 40,
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
||||||
|
double: true,
|
||||||
|
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "h2&&Text;.deployment&&Text",
|
||||||
|
"img": ".lazy&&data-original",
|
||||||
|
"desc": ".deployment&&Text",
|
||||||
|
"content": ".ec-show&&Text",
|
||||||
|
"tabs": "#tag&&a",
|
||||||
|
"lists": ".play_list_box:eq(#id)&&li"
|
||||||
|
},
|
||||||
|
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
},
|
||||||
|
短视: {
|
||||||
|
title: '',
|
||||||
|
host: '',
|
||||||
|
// homeUrl:'/',
|
||||||
|
url: '/channel/fyclass-fypage.html',
|
||||||
|
searchUrl: '/search.html?wd=**',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||||
|
'User-Agent': 'MOBILE_UA',
|
||||||
|
// "Cookie": "searchneed=ok"
|
||||||
|
},
|
||||||
|
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
cate_exclude: '解析|动态',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
|
||||||
|
"img": ".img&&img&&data-src",
|
||||||
|
"desc": ".content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text",
|
||||||
|
"content": ".zkjj_a&&Text",
|
||||||
|
"tabs": ".py-tabs&&option",
|
||||||
|
"lists": ".player:eq(#id) li"
|
||||||
|
},
|
||||||
|
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
return JSON.parse(JSON.stringify(mubanDict));
|
||||||
|
}
|
||||||
|
var mubanDict = getMubans();
|
||||||
|
var muban = getMubans();
|
||||||
|
export default {muban,getMubans};
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
var rule = {
|
||||||
|
title: '热剧猫[V2]', // csp_AppYsV2
|
||||||
|
host: 'http://v.aaaa0.top:2525/api.php/app/',
|
||||||
|
url: 'video?tid=fyclassfyfilter&limit=20&pg=fypage',
|
||||||
|
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&letter={{fl.letter}}&year={{fl.year}}&by={{fl.by}}',
|
||||||
|
filter:{
|
||||||
|
"1":[{"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":"儿童"},{"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":"lang","name":"语言","value":[{"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"}]}],
|
||||||
|
"2":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"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":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
|
||||||
|
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"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"}]}]
|
||||||
|
},
|
||||||
|
detailUrl:'/detail?vod_id=fyid',
|
||||||
|
searchUrl: '/search?text=**&pg=fypage',
|
||||||
|
searchable: 2,
|
||||||
|
quickSearch: 0,
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
headers:{'User-Agent':'okhttp/4.1.0'},
|
||||||
|
timeout:5000,
|
||||||
|
// 分类筛选 /api.php/app/nav || /xgapp.php/v1/nav || /api.php/v1.vod/types
|
||||||
|
class_name:'电影&连续剧&综艺&动漫',
|
||||||
|
class_url:'1&2&3&4',
|
||||||
|
play_parse:true,
|
||||||
|
lazy:`js:
|
||||||
|
let play_Url = '';
|
||||||
|
if (/\\.m3u8|\\.mp4/.test(input)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/,/.test(input) && /url=/.test(input)) {
|
||||||
|
input = input.split('url=');
|
||||||
|
play_Url = input[0].split(',')[0];
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input[1],
|
||||||
|
playUrl: play_Url,
|
||||||
|
parse: 1
|
||||||
|
}
|
||||||
|
} else if (/url=|id=/.test(input)) {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: JSON.parse(request(input)).url,
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
} else if (/youku|iqiyi|v\\.qq\\.com|pptv|sohu|le\\.com|1905\\.com|mgtv|bilibili|ixigua/.test(input)) {
|
||||||
|
play_Url = /bilibili/.test(input) ? 'https://jx.xmflv.com/?url=' : 'https://jx.777jiexi.com/player/?url='; // type0的parse
|
||||||
|
// play_Url = /bilibili/.test(input) ? 'https://jx.xmflv.com/?url=' : 'json:http://pandown.pro/app/kkdy.php?url='; // type1的parse可加'json:'直接解析url (除了蜂蜜的'影视TV',其它的壳皆可用)
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: input,
|
||||||
|
playUrl: play_Url,
|
||||||
|
parse: 1,
|
||||||
|
header: JSON.stringify({
|
||||||
|
'user-agent': 'Mozilla/5.0',
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let purl = JSON.parse(request("http://jx.daenys.vip:2587/tnmb.php?url=" + input)).url;
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: purl,
|
||||||
|
// url: input,
|
||||||
|
// playUrl: 'json:http://jx.daenys.vip:2587/tnmb.php?url=',
|
||||||
|
parse: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
limit:6,
|
||||||
|
// 图片来源:'@Referer=https://api.douban.com/@User-Agent=Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/113.0.0.0%20Safari/537.36',
|
||||||
|
推荐:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
if(HOST.endsWith('/')){
|
||||||
|
jsondata = JSON.parse(request(HOST + 'vodPhbAll'));
|
||||||
|
} else {
|
||||||
|
jsondata = JSON.parse(request(HOST + '/vodPhbAll'));
|
||||||
|
}
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
if(HOST.endsWith('/')){
|
||||||
|
jsondata = JSON.parse(request(HOST + 'index_video'));
|
||||||
|
} else {
|
||||||
|
jsondata = JSON.parse(request(HOST + '/index_video'));
|
||||||
|
}
|
||||||
|
videoList = /xgapp/.test(HOST) ? jsondata.data : jsondata.list;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach((it,idex) => {
|
||||||
|
let vlist = /v1\\.vod/.test(HOST) ? videoList[idex].vod_list : videoList[idex].vlist ;
|
||||||
|
vlist.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
一级:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = input.replace('video','v1.vod').replace('tid','type').replace('pg=','page=');
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[4];
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.list || jsondata.data;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
二级:`js:
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = HOST + '/'+ input.split('/')[3];
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[3].replace('detail','video_detail').replace('vod_id','id');
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
let html = request(input);
|
||||||
|
html = JSON.parse(html);
|
||||||
|
let node = /xgapp/.test(HOST) ? html.data.vod_info : html.data;
|
||||||
|
VOD = {
|
||||||
|
vod_id: node.vod_id,
|
||||||
|
vod_name: node.vod_name,
|
||||||
|
vod_pic: node.vod_pic,
|
||||||
|
type_name: node.vod_class,
|
||||||
|
vod_year: node.vod_year,
|
||||||
|
vod_area: node.vod_area,
|
||||||
|
vod_remarks: node.vod_remarks,
|
||||||
|
vod_actor: node.vod_actor,
|
||||||
|
vod_director: node.vod_director,
|
||||||
|
vod_content: node.vod_content.strip()
|
||||||
|
};
|
||||||
|
if (typeof play_url === 'undefined') {
|
||||||
|
var play_url = ''
|
||||||
|
}
|
||||||
|
let episodes = /v1\\.vod/.test(HOST)?node.vod_play_list:node.vod_url_with_player;
|
||||||
|
if (episodes != '') {
|
||||||
|
let playMap = {};
|
||||||
|
episodes.forEach(ep => {
|
||||||
|
let from = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
from = ep.player_info.from||ep.player_info.show||ep.from||ep.show;
|
||||||
|
} else {
|
||||||
|
from = ep.code||ep.name;
|
||||||
|
}
|
||||||
|
if (!playMap.hasOwnProperty(from)) {
|
||||||
|
playMap[from] = []
|
||||||
|
}
|
||||||
|
let parse_api = '';
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
parse_api = ep.player_info.parse != null ? ep.player_info.parse : ep.player_info.parse2;
|
||||||
|
// parse_api = /,/.test(parse_api) ? parse_api.split(',')[1] : parse_api;
|
||||||
|
} else {
|
||||||
|
parse_api = ep.parse_api;
|
||||||
|
}
|
||||||
|
log('parse_api =========> '+parse_api);
|
||||||
|
if (parse_api != null && !/\\.m3u8|\\.mp4/.test(ep.url)) {
|
||||||
|
parse_api = parse_api.replaceAll('..','.') ;
|
||||||
|
ep.url = ep.url.replaceAll('$','$'+parse_api);
|
||||||
|
}
|
||||||
|
playMap[from].push(ep.url)
|
||||||
|
});
|
||||||
|
let playFrom = [];
|
||||||
|
let playList = [];
|
||||||
|
Object.keys(playMap).forEach(key => {
|
||||||
|
playFrom.push(key);
|
||||||
|
playList.push(playMap[key])
|
||||||
|
});
|
||||||
|
VOD.vod_play_from = playFrom.join('$$$');
|
||||||
|
VOD.vod_play_url = playList.join('$$$');
|
||||||
|
} else {
|
||||||
|
VOD.vod_play_from = node.vod_play_from;
|
||||||
|
VOD.vod_play_url = node.vod_play_url;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
log("获取二级详情页发生错误:" + e.message);
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
搜索:`js:
|
||||||
|
let d = [];
|
||||||
|
let jsondata = [];
|
||||||
|
let videoList = [];
|
||||||
|
if (/v1\\.vod/.test(HOST)) {
|
||||||
|
input = (HOST + '/'+ input.split('/')[3]).replace('/search','').replace('text=','wd=').replace('pg=','page=');
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.data.list;
|
||||||
|
} else {
|
||||||
|
input = HOST + '/'+ input.split('/')[3]
|
||||||
|
jsondata = JSON.parse(request(input));
|
||||||
|
videoList = jsondata.list || jsondata.data;
|
||||||
|
}
|
||||||
|
// log('videoList =========> '+stringify(videoList));
|
||||||
|
videoList.forEach(it => {
|
||||||
|
d.push({
|
||||||
|
url:it.vod_id,
|
||||||
|
title:it.vod_name,
|
||||||
|
img:it.vod_pic.startsWith('http') ? it.vod_pic : it.vod_pic.startsWith('//') ? 'https:' + it.vod_pic : it.vod_pic.startsWith('/') ? getHome(HOST) + it.vod_pic : getHome(HOST) + '/' + it.vod_pic,
|
||||||
|
desc:it.vod_remarks,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
setResult(d);
|
||||||
|
`,
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
muban.mxone5.二级.title='h1&&Text;.video-info-aux&&Text';muban.mxone5.二级.desc='.video-info-items:eq(3)&&Text;;;.video-info-actor:eq(2)&&Text;.video-info-actor:eq(0)&&Text';muban.mxone5.二级.content='.video-info-content&&Text';var rule={title:'电影先生',模板:'mxone5',host:'http://dyxs29.com',url:'/pianku-fyclassfyfilter/',filterable:1,filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}----fypage---{{fl.year}}',filter:{"dianying":[{"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":"青春偶像"},{"n":"都市","v":"都市"},{"n":"情景","v":"情景"},{"n":"短片","v":"短片"},{"n":"Netflix","v":"Netflix"}]},{"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":"俄罗斯"},{"n":"澳大利亚","v":"澳大利亚"},{"n":"其它","v":"其它"}]},{"key":"lang","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":"其它"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"dianshiju":[{"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":"青春偶像"},{"n":"都市","v":"都市"},{"n":"情景","v":"情景"},{"n":"短剧","v":"短剧"},{"n":"Netflix","v":"Netflix"}]},{"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":"其他"}]},{"key":"lang","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":"其它"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"dongman":[{"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":"青春偶像"},{"n":"都市","v":"都市"},{"n":"情景","v":"情景"},{"n":"其他","v":"其他"},{"n":"Netflix","v":"Netflix"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"其它"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],"zongyi":[{"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":"青春偶像"},{"n":"都市","v":"都市"},{"n":"情景","v":"情景"},{"n":"真人秀","v":"真人秀"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"Netflix","v":"Netflix"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"其它"}]},{"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"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]},filter_def:{dianying:{by:'time'},dianshiju:{by:'time'},dongman:{by:'time'},zongyi:{by:'time'}},searchUrl:'/search-**-----------fypage--/',class_parse:'.nav-menu-items&&li:gt(0):lt(5);a&&Text;a&&href;.*/(.*?)/',lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);log(html);var url=html.url;if(html.encrypt=='1'){url=unescape(url).split('&')[0]}else if(html.encrypt=='2'){url=unescape(base64Decode(url).split('&')[0])}if(/m3u8|mp4/.test(url)){input=url}else{input}",}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
var rule ={
|
||||||
|
title: '短剧网',
|
||||||
|
host: 'https://m.duanju5.com',
|
||||||
|
url: '/vodshow/fyclass--------fypage---.html',
|
||||||
|
searchUrl: '/vodsearch/-------------.html?wd=**&submit=',
|
||||||
|
searchable: 2,//是否启用全局搜索,
|
||||||
|
quickSearch: 0,//是否启用快速搜索,
|
||||||
|
filterable: 0,//是否启用分类筛选,
|
||||||
|
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
||||||
|
play_parse: true,
|
||||||
|
lazy: '',
|
||||||
|
limit: 6,
|
||||||
|
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
double: true, // 推荐内容是否双层定位
|
||||||
|
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||||
|
二级: {
|
||||||
|
"title": "h1&&Text;.tag-link&&Text",
|
||||||
|
"img": ".module-item-pic&&img&&data-src",
|
||||||
|
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
|
||||||
|
"content": ".vod_content&&Text",
|
||||||
|
"tabs": ".module-tab-item",
|
||||||
|
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
|
||||||
|
},
|
||||||
|
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
muban.mxone5.二级.desc = '.video-info-items:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text';
|
||||||
|
var rule={
|
||||||
|
title:'稀饭影视',
|
||||||
|
模板:'mxone5',
|
||||||
|
host:'https://www.xifanys.com',
|
||||||
|
// url:'/yingpianshow/fyclass--------fypage---.html',
|
||||||
|
url:'/yingpianshow/fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter:{
|
||||||
|
"dianying":[{"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":"其他"}]},{"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":"其他"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"},{"n":"1979","v":"1979"},{"n":"1978","v":"1978"},{"n":"1977","v":"1977"},{"n":"1976","v":"1976"},{"n":"1975","v":"1975"},{"n":"1974","v":"1974"},{"n":"1973","v":"1973"},{"n":"1972","v":"1972"},{"n":"1971","v":"1971"},{"n":"1970","v":"1970"},{"n":"1969","v":"1969"},{"n":"1968","v":"1968"},{"n":"1967","v":"1967"},{"n":"1966","v":"1966"},{"n":"1965","v":"1965"},{"n":"1964","v":"1964"},{"n":"1963","v":"1963"},{"n":"1962","v":"1962"},{"n":"1961","v":"1961"},{"n":"1960","v":"1960"},{"n":"1959","v":"1959"},{"n":"1958","v":"1958"},{"n":"1957","v":"1957"},{"n":"1956","v":"1956"},{"n":"1955","v":"1955"},{"n":"1954","v":"1954"},{"n":"1953","v":"1953"},{"n":"1952","v":"1952"},{"n":"1951","v":"1951"},{"n":"1950","v":"1950"},{"n":"1949","v":"1949"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"lianxuju":[{"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":"偶像"}]},{"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":"新加坡"}]},{"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":"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"zongyi":[{"key":"class","name":"剧情","value":[{"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":"新加坡"}]},{"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":"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"dongman":[{"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":"其他"}]},{"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":"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"},{"n":"1999","v":"1999"},{"n":"1998","v":"1998"},{"n":"1997","v":"1997"},{"n":"1996","v":"1996"},{"n":"1995","v":"1995"},{"n":"1994","v":"1994"},{"n":"1993","v":"1993"},{"n":"1992","v":"1992"},{"n":"1991","v":"1991"},{"n":"1990","v":"1990"},{"n":"1989","v":"1989"},{"n":"1988","v":"1988"},{"n":"1987","v":"1987"},{"n":"1986","v":"1986"},{"n":"1985","v":"1985"},{"n":"1984","v":"1984"},{"n":"1983","v":"1983"},{"n":"1982","v":"1982"},{"n":"1981","v":"1981"},{"n":"1980","v":"1980"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"jilupian":[{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
searchUrl:'/yingpiansearch/**----------fypage---.html',
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
class_parse: '.grid-items&&li;a&&Text;a&&href;.*/(\\w+).html',
|
||||||
|
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
var rule = {
|
||||||
|
title:'荐片',
|
||||||
|
host:'http://api2.rinhome.com',
|
||||||
|
homeUrl:'https://yjpapipxblwdohpakljwg.hxhzs.com/api/tag/hand?code=unknown601193cf375db73d&channel=wandoujia',//网站的首页链接,用于分类获取和推荐获取
|
||||||
|
url:'/api/crumb/list?area=0&category_id=fyclass&page=fypage&type=0&limit=24&fyfilter',
|
||||||
|
class_name:'电影&电视剧&动漫&综艺&全部',
|
||||||
|
class_url:'1&2&3&4&0',
|
||||||
|
detailUrl:'/api/node/detail?channel=wandoujia&token=&id=fyid',//二级详情拼接链接(json格式用)
|
||||||
|
searchUrl:'/api/video/search?key=**&page=fypage',
|
||||||
|
searchable:2,
|
||||||
|
quickSearch:0,
|
||||||
|
filterable:1,
|
||||||
|
filter:{'0': [{'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '0'}, {'n': '2023', 'v': '153'}, {'n': '2022', 'v': '101'}, {'n': '2021', 'v': '118'}, {'n': '2020', 'v': '16'}, {'n': '2019', 'v': '7'}, {'n': '2018', 'v': '2'}, {'n': '2017', 'v': '3'}, {'n': '2016', 'v': '22'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '热门', 'v': 'hot'}, {'n': '评分', 'v': 'rating'}, {'n': '更新', 'v': 'update'}]}], '1': [{'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '0'}, {'n': '2023', 'v': '153'}, {'n': '2022', 'v': '101'}, {'n': '2021', 'v': '118'}, {'n': '2020', 'v': '16'}, {'n': '2019', 'v': '7'}, {'n': '2018', 'v': '2'}, {'n': '2017', 'v': '3'}, {'n': '2016', 'v': '22'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '热门', 'v': 'hot'}, {'n': '评分', 'v': 'rating'}, {'n': '更新', 'v': 'update'}]}], '2': [{'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '0'}, {'n': '2023', 'v': '153'}, {'n': '2022', 'v': '101'}, {'n': '2021', 'v': '118'}, {'n': '2020', 'v': '16'}, {'n': '2019', 'v': '7'}, {'n': '2018', 'v': '2'}, {'n': '2017', 'v': '3'}, {'n': '2016', 'v': '22'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '热门', 'v': 'hot'}, {'n': '评分', 'v': 'rating'}, {'n': '更新', 'v': 'update'}]}], '3': [{'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '0'}, {'n': '2023', 'v': '153'}, {'n': '2022', 'v': '101'}, {'n': '2021', 'v': '118'}, {'n': '2020', 'v': '16'}, {'n': '2019', 'v': '7'}, {'n': '2018', 'v': '2'}, {'n': '2017', 'v': '3'}, {'n': '2016', 'v': '22'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '热门', 'v': 'hot'}, {'n': '评分', 'v': 'rating'}, {'n': '更新', 'v': 'update'}]}], '4': [{'key': 'year', 'name': '年代', 'value': [{'n': '全部', 'v': '0'}, {'n': '2023', 'v': '153'}, {'n': '2022', 'v': '101'}, {'n': '2021', 'v': '118'}, {'n': '2020', 'v': '16'}, {'n': '2019', 'v': '7'}, {'n': '2018', 'v': '2'}, {'n': '2017', 'v': '3'}, {'n': '2016', 'v': '22'}]}, {'key': 'sort', 'name': '排序', 'value': [{'n': '热门', 'v': 'hot'}, {'n': '评分', 'v': 'rating'}, {'n': '更新', 'v': 'update'}]}]},
|
||||||
|
filter_url:'sort={{fl.sort or "hot"}}&year={{fl.year or "0"}}',
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'jianpian-android/350',
|
||||||
|
'JPAUTH':'y261ow7kF2dtzlxh1GS9EB8nbTxNmaK/QQIAjctlKiEv'
|
||||||
|
},
|
||||||
|
timeout:5000,
|
||||||
|
limit:8,
|
||||||
|
play_parse:true,
|
||||||
|
play_json:[{
|
||||||
|
re:'*',
|
||||||
|
json:{
|
||||||
|
parse:0,
|
||||||
|
jx:0
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
lazy:'',
|
||||||
|
// double:true,
|
||||||
|
图片来源:'@Referer=www.jianpianapp.com@User-Agent=jianpian-version353',
|
||||||
|
// 推荐:'json:data;room;*;cover;*;*',
|
||||||
|
推荐:'json:.video;*;*;*;*',
|
||||||
|
一级:'json:data;title;path;playlist.title;id',
|
||||||
|
二级:{
|
||||||
|
title:'data.title',
|
||||||
|
desc:';data.description;data.id',
|
||||||
|
img:'data.thumbnail',
|
||||||
|
content:'data.thumbnail',
|
||||||
|
is_json:1,
|
||||||
|
tabs:'js:TABS=[];if(html.data.have_ftp_ur == 1){TABS.push("边下边播超清版")}if(html.data.have_m3u8_ur == 1){TABS.push("在线点播普清版")}',
|
||||||
|
lists:'js:log(TABS);LISTS=[];TABS.forEach(function(tab){if(/边下边播/.test(tab)){let ftp=html.data.new_ftp_list;let d=ftp.map(function(it){return it.title+"$"+(/m3u8/.test(it.url)?play_url+it.url:"tvbox-xg:"+it.url)});LISTS.push(d)}else if(/在线点播/.test(tab)){let m3u=html.data.new_m3u8_list;let d=m3u.map(function(it){return it.title+"$"+(/m3u8/.test(it.url)?play_url+it.url:"tvbox-xg:"+it.url)});LISTS.push(d)}});',
|
||||||
|
},
|
||||||
|
搜索:'json:data;*;thumbnail;mask;*',
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
muban.mxpro.二级.desc = '.module-info-item:eq(4)&&Text;;;.module-info-item-content:eq(1)&&Text;.module-info-item-content:eq(0)&&Text';
|
||||||
|
muban.mxpro.二级.tabs = '#y-playList&&.module-tab-item';
|
||||||
|
var rule = {
|
||||||
|
title:'酷客影院',
|
||||||
|
模板:'mxpro',
|
||||||
|
host:'https://www.laimi.me',
|
||||||
|
// url:'/vodshow/fyclass--------fypage---.html',
|
||||||
|
url:'/vodshow/fyclassfyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"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":"剧情"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"},{"n":"港台","v":"港台"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"其它","v":"其它"}]},{"key":"lang","name":"语言","value":[{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"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":"其它"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"其它","v":"其它"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"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":"其它"}]},{"key":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"5":[{"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":"lang","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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
class_parse: '.navbar-items&&li:gt(1):lt(7);a&&title;a&&href;/(\\d+).html',
|
||||||
|
|
||||||
|
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
detailUrl:'/voddetail/fyid.html', //非必填,二级详情拼接链接
|
||||||
|
搜索:'json:list;name;pic;;id',
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
muban.首图2.二级.title = 'h1&&Text;.data:eq(0)&&Text'
|
||||||
|
muban.首图2.二级.desc = '.data:eq(4)&&Text;;;.data:eq(1)&&Text;.data:eq(2)&&Text'
|
||||||
|
muban.首图2.二级.tabs = '.stui-pannel__head h3'
|
||||||
|
var rule = {
|
||||||
|
title:'蘑菇',
|
||||||
|
模板:'首图2',
|
||||||
|
host:'https://www.moguys.xyz',
|
||||||
|
url:'/vodshow/fyclassfyfilter.html',
|
||||||
|
filterable:1,
|
||||||
|
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"tv":[{"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":"犯罪"}]},{"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":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"}]},{"key":"lang:","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by:","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"movie":[{"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":"奇幻"}]},{"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":"其他"}]},{"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"}]},{"key":"lang:","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"by:","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"cartoon":[{"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":"求职"}]},{"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":"其他"}]},{"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"}]},{"key":"lang:","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by:","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"variety":[{"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":"其他"}]},{"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":"其他"}]},{"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"}]},{"key":"lang:","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"by:","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
headers:{
|
||||||
|
'User-Agent':'PC_UA'
|
||||||
|
},
|
||||||
|
class_parse:'.stui-header__menu&&li;a&&Text;a&&href;e/(\\w+).html',
|
||||||
|
lazy:`js:
|
||||||
|
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
if (html.encrypt == '1') {
|
||||||
|
url = unescape(url)
|
||||||
|
} else if (html.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url))
|
||||||
|
}
|
||||||
|
if (/m3u8|mp4/.test(url)) {
|
||||||
|
input = url
|
||||||
|
} else {
|
||||||
|
input
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||||
|
detailUrl:'/voddetail/fyid.html', //非必填,二级详情拼接链接
|
||||||
|
搜索:'json:list;name;pic;;id',
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
muban.首图2.二级.title = 'h1--span&&Text;.data--span:eq(0)&&Text';
|
||||||
|
muban.首图2.二级.desc = '.data:eq(3)&&Text;;;.data--span:eq(1)&&Text;.data--span:eq(2)&&Text';
|
||||||
|
muban.首图2.二级.content = 'p.col-pd&&Text';
|
||||||
|
muban.首图2.二级.tabs = '.stui-pannel__head h3';
|
||||||
|
var rule = {
|
||||||
|
title:'阿布影院',
|
||||||
|
模板:'首图2',
|
||||||
|
host:'https://abu22.com',
|
||||||
|
// url:'/vodshow/fyclass--------fypage---.html',
|
||||||
|
url:'/vodshow/fyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动画电影","v":"101"},{"n":"动作片","v":"102"},{"n":"喜剧片","v":"103"},{"n":"爱情片","v":"104"},{"n":"科幻片","v":"105"},{"n":"剧情片","v":"106"},{"n":"悬疑片","v":"107"},{"n":"惊悚片","v":"108"},{"n":"恐怖片","v":"109"},{"n":"犯罪片","v":"110"},{"n":"战争片","v":"115"}]},{"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":"其他"}]},{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"201"},{"n":"港台剧","v":"202"},{"n":"日韩剧","v":"203"},{"n":"欧美剧","v":"204"},{"n":"海外剧","v":"205"},{"n":"其他剧","v":"206"}]},{"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":"其他"}]},{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"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":"其他"}]},{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"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":"其他"}]},{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"5":[{"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":"其他"}]},{"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"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
3:{cateId:'3'},
|
||||||
|
4:{cateId:'4'},
|
||||||
|
5:{cateId:'5'}
|
||||||
|
},
|
||||||
|
tab_rename:{'KK':'快看','HN':'红牛',},//线路名替换如:lzm3u8替换为量子资源|js1
|
||||||
|
class_parse: '.stui-header__menu li;a&&Text;a&&href;/(\\d+).html',
|
||||||
|
lazy:`js:
|
||||||
|
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
if (html.encrypt == '1') {
|
||||||
|
url = unescape(url)
|
||||||
|
} else if (html.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url))
|
||||||
|
}
|
||||||
|
if (/m3u8|mp4/.test(url)) {
|
||||||
|
input = url
|
||||||
|
} else {
|
||||||
|
input = {
|
||||||
|
jx: 0,
|
||||||
|
url: 'https://jx.777jiexi.com/player/?url='+url,
|
||||||
|
parse: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
搜索: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
// https://go.tvso.me
|
||||||
|
|
||||||
|
muban.mxpro.二级.desc = '.module-info-item:eq(4)&&Text;;;.module-info-item-content:eq(2)&&Text;.module-info-item-content:eq(0)&&Text'
|
||||||
|
muban.mxpro.二级.tabs = '#y-playList&&.module-tab-item'
|
||||||
|
var rule = {
|
||||||
|
title:'鸭奈飞',
|
||||||
|
模板:'mxpro',
|
||||||
|
// host:'https://yanetflix.me',
|
||||||
|
// host:'https://www.netfly.tv',
|
||||||
|
host:'https://go.tvso.me',
|
||||||
|
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src = jsp.pdfh(html,"a.r-1471scf:eq(0)&&href");print(src);HOST=src',//网页域名根动态抓取js代码。通过HOST=赋值
|
||||||
|
// url:'/vod/show/fyclass--------fypage---.html',
|
||||||
|
url:'/vod/show/fyfilter.html',
|
||||||
|
filterable:1,//是否启用分类筛选,
|
||||||
|
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||||
|
filter: {
|
||||||
|
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作","v":"6"},{"n":"喜剧","v":"7"},{"n":"爱情","v":"8"},{"n":"科幻","v":"9"},{"n":"恐怖","v":"10"},{"n":"剧情","v":"11"},{"n":"战争","v":"12"},{"n":"动画","v":"22"},{"n":"犯罪","v":"36"},{"n":"悬疑","v":"37"},{"n":"灾难","v":"38"},{"n":"惊悚","v":"40"},{"n":"奇幻","v":"41"},{"n":"冒险","v":"43"},{"n":"传记","v":"48"},{"n":"历史","v":"49"}]},{"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":"儿童"},{"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":"其他"}]},{"key":"lang","name":"语言","value":[{"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"}]},{"key":"letter","name":"全部","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"日韩剧","v":"14"},{"n":"欧美剧","v":"15"},{"n":"港台剧","v":"16"},{"n":"海外剧","v":"20"},{"n":"其它剧","v":"21"}]},{"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":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"泰国","v":"泰国"},{"n":"新加坡","v":"新加坡"},{"n":"其它","v":"其它"}]},{"key":"lang","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":"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"}]},{"key":"letter","name":"全部","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"3":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"3"},{"n":"大陆综艺","v":"30"},{"n":"日韩综艺","v":"31"},{"n":"欧美综艺","v":"32"},{"n":"港台综艺","v":"33"}]},{"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":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"lang","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":"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"}]},{"key":"letter","name":"全部","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"4"},{"n":"国产动漫","v":"24"},{"n":"日韩动漫","v":"25"},{"n":"欧美动漫","v":"26"},{"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":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","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":"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"}]},{"key":"letter","name":"全部","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||||
|
"5":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"5"},{"n":"电影解说","v":"17"},{"n":"体育赛事","v":"18"},{"n":"纪录片","v":"23"}]},{"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"}]},{"key":"letter","name":"全部","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||||
|
},
|
||||||
|
filter_def:{
|
||||||
|
1:{cateId:'1'},
|
||||||
|
2:{cateId:'2'},
|
||||||
|
3:{cateId:'3'},
|
||||||
|
4:{cateId:'4'},
|
||||||
|
5:{cateId:'5'}
|
||||||
|
},
|
||||||
|
searchUrl: '/vod/search/**----------fypage---.html',
|
||||||
|
class_parse:'.navbar-items li:gt(1):lt(7);a&&title;a&&href;/(\\d+).html',
|
||||||
|
lazy:`js:
|
||||||
|
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||||
|
var url = html.url;
|
||||||
|
if (html.encrypt == '1') {
|
||||||
|
url = unescape(url)
|
||||||
|
} else if (html.encrypt == '2') {
|
||||||
|
url = unescape(base64Decode(url))
|
||||||
|
}
|
||||||
|
if (/m3u8|mp4/.test(url)) {
|
||||||
|
input = url
|
||||||
|
} else {
|
||||||
|
input
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
// 推荐: '.module-poster-items-small;a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
{ "showTime": 79200000, "txt": "自定义jar加载成功", "limitShowText": "提示 适配『Player』App 观看"}
|
||||||
@@ -0,0 +1,1318 @@
|
|||||||
|
{
|
||||||
|
"1": [
|
||||||
|
{
|
||||||
|
"key": "3",
|
||||||
|
"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": "微电影"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "1",
|
||||||
|
"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": "其他"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "11",
|
||||||
|
"name": "年份",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"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": "5",
|
||||||
|
"name": "字母",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "A",
|
||||||
|
"v": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "B",
|
||||||
|
"v": "B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "C",
|
||||||
|
"v": "C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "D",
|
||||||
|
"v": "D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "E",
|
||||||
|
"v": "E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "F",
|
||||||
|
"v": "F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "G",
|
||||||
|
"v": "G"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "H",
|
||||||
|
"v": "H"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "I",
|
||||||
|
"v": "I"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "J",
|
||||||
|
"v": "J"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "K",
|
||||||
|
"v": "K"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "L",
|
||||||
|
"v": "L"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "M",
|
||||||
|
"v": "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "N",
|
||||||
|
"v": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "O",
|
||||||
|
"v": "O"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "P",
|
||||||
|
"v": "P"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Q",
|
||||||
|
"v": "Q"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "R",
|
||||||
|
"v": "R"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "S",
|
||||||
|
"v": "S"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "T",
|
||||||
|
"v": "T"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "U",
|
||||||
|
"v": "U"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "V",
|
||||||
|
"v": "V"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "W",
|
||||||
|
"v": "W"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "X",
|
||||||
|
"v": "X"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Y",
|
||||||
|
"v": "Y"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Z",
|
||||||
|
"v": "Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "0-9",
|
||||||
|
"v": "0-9"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "2",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "时间",
|
||||||
|
"v": "time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "人气",
|
||||||
|
"v": "hits"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "评分",
|
||||||
|
"v": "score"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"20": [
|
||||||
|
{
|
||||||
|
"key": "1",
|
||||||
|
"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": "其他"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "4",
|
||||||
|
"name": "语言",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "国语",
|
||||||
|
"v": "国语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "英语",
|
||||||
|
"v": "英语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "粤语",
|
||||||
|
"v": "粤语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "闽南语",
|
||||||
|
"v": "闽南语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "韩语",
|
||||||
|
"v": "韩语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "日语",
|
||||||
|
"v": "日语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "法语",
|
||||||
|
"v": "法语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "德语",
|
||||||
|
"v": "德语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "其它",
|
||||||
|
"v": "其它"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "11",
|
||||||
|
"name": "年份",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"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": "5",
|
||||||
|
"name": "字母",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "A",
|
||||||
|
"v": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "B",
|
||||||
|
"v": "B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "C",
|
||||||
|
"v": "C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "D",
|
||||||
|
"v": "D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "E",
|
||||||
|
"v": "E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "F",
|
||||||
|
"v": "F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "G",
|
||||||
|
"v": "G"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "H",
|
||||||
|
"v": "H"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "I",
|
||||||
|
"v": "I"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "J",
|
||||||
|
"v": "J"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "K",
|
||||||
|
"v": "K"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "L",
|
||||||
|
"v": "L"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "M",
|
||||||
|
"v": "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "N",
|
||||||
|
"v": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "O",
|
||||||
|
"v": "O"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "P",
|
||||||
|
"v": "P"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Q",
|
||||||
|
"v": "Q"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "R",
|
||||||
|
"v": "R"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "S",
|
||||||
|
"v": "S"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "T",
|
||||||
|
"v": "T"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "U",
|
||||||
|
"v": "U"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "V",
|
||||||
|
"v": "V"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "W",
|
||||||
|
"v": "W"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "X",
|
||||||
|
"v": "X"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Y",
|
||||||
|
"v": "Y"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Z",
|
||||||
|
"v": "Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "0-9",
|
||||||
|
"v": "0-9"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "2",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "时间",
|
||||||
|
"v": "time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "人气",
|
||||||
|
"v": "hits"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "评分",
|
||||||
|
"v": "score"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"24": [
|
||||||
|
{
|
||||||
|
"key": "1",
|
||||||
|
"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": "其他"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "4",
|
||||||
|
"name": "语言",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "国语",
|
||||||
|
"v": "国语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "英语",
|
||||||
|
"v": "英语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "粤语",
|
||||||
|
"v": "粤语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "闽南语",
|
||||||
|
"v": "闽南语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "韩语",
|
||||||
|
"v": "韩语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "日语",
|
||||||
|
"v": "日语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "法语",
|
||||||
|
"v": "法语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "德语",
|
||||||
|
"v": "德语"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "其它",
|
||||||
|
"v": "其它"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "11",
|
||||||
|
"name": "年份",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"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": "5",
|
||||||
|
"name": "字母",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "A",
|
||||||
|
"v": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "B",
|
||||||
|
"v": "B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "C",
|
||||||
|
"v": "C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "D",
|
||||||
|
"v": "D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "E",
|
||||||
|
"v": "E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "F",
|
||||||
|
"v": "F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "G",
|
||||||
|
"v": "G"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "H",
|
||||||
|
"v": "H"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "I",
|
||||||
|
"v": "I"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "J",
|
||||||
|
"v": "J"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "K",
|
||||||
|
"v": "K"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "L",
|
||||||
|
"v": "L"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "M",
|
||||||
|
"v": "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "N",
|
||||||
|
"v": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "O",
|
||||||
|
"v": "O"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "P",
|
||||||
|
"v": "P"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Q",
|
||||||
|
"v": "Q"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "R",
|
||||||
|
"v": "R"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "S",
|
||||||
|
"v": "S"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "T",
|
||||||
|
"v": "T"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "U",
|
||||||
|
"v": "U"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "V",
|
||||||
|
"v": "V"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "W",
|
||||||
|
"v": "W"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "X",
|
||||||
|
"v": "X"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Y",
|
||||||
|
"v": "Y"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Z",
|
||||||
|
"v": "Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "0-9",
|
||||||
|
"v": "0-9"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "2",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "时间",
|
||||||
|
"v": "time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "人气",
|
||||||
|
"v": "hits"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "评分",
|
||||||
|
"v": "score"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"28": [
|
||||||
|
{
|
||||||
|
"key": "1",
|
||||||
|
"name": "地区",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "国产",
|
||||||
|
"v": "国产"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "日韩",
|
||||||
|
"v": "日韩"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "欧美",
|
||||||
|
"v": "欧美"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "11",
|
||||||
|
"name": "年份",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"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": "5",
|
||||||
|
"name": "字母",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "A",
|
||||||
|
"v": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "B",
|
||||||
|
"v": "B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "C",
|
||||||
|
"v": "C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "D",
|
||||||
|
"v": "D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "E",
|
||||||
|
"v": "E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "F",
|
||||||
|
"v": "F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "G",
|
||||||
|
"v": "G"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "H",
|
||||||
|
"v": "H"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "I",
|
||||||
|
"v": "I"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "J",
|
||||||
|
"v": "J"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "K",
|
||||||
|
"v": "K"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "L",
|
||||||
|
"v": "L"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "M",
|
||||||
|
"v": "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "N",
|
||||||
|
"v": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "O",
|
||||||
|
"v": "O"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "P",
|
||||||
|
"v": "P"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Q",
|
||||||
|
"v": "Q"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "R",
|
||||||
|
"v": "R"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "S",
|
||||||
|
"v": "S"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "T",
|
||||||
|
"v": "T"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "U",
|
||||||
|
"v": "U"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "V",
|
||||||
|
"v": "V"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "W",
|
||||||
|
"v": "W"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "X",
|
||||||
|
"v": "X"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Y",
|
||||||
|
"v": "Y"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Z",
|
||||||
|
"v": "Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "0-9",
|
||||||
|
"v": "0-9"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "2",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "时间",
|
||||||
|
"v": "time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "人气",
|
||||||
|
"v": "hits"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "评分",
|
||||||
|
"v": "score"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"32": [
|
||||||
|
{
|
||||||
|
"key": "5",
|
||||||
|
"name": "字母",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "A",
|
||||||
|
"v": "A"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "B",
|
||||||
|
"v": "B"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "C",
|
||||||
|
"v": "C"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "D",
|
||||||
|
"v": "D"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "E",
|
||||||
|
"v": "E"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "F",
|
||||||
|
"v": "F"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "G",
|
||||||
|
"v": "G"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "H",
|
||||||
|
"v": "H"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "I",
|
||||||
|
"v": "I"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "J",
|
||||||
|
"v": "J"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "K",
|
||||||
|
"v": "K"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "L",
|
||||||
|
"v": "L"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "M",
|
||||||
|
"v": "M"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "N",
|
||||||
|
"v": "N"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "O",
|
||||||
|
"v": "O"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "P",
|
||||||
|
"v": "P"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Q",
|
||||||
|
"v": "Q"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "R",
|
||||||
|
"v": "R"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "S",
|
||||||
|
"v": "S"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "T",
|
||||||
|
"v": "T"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "U",
|
||||||
|
"v": "U"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "V",
|
||||||
|
"v": "V"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "W",
|
||||||
|
"v": "W"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "X",
|
||||||
|
"v": "X"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Y",
|
||||||
|
"v": "Y"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "Z",
|
||||||
|
"v": "Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "0-9",
|
||||||
|
"v": "0-9"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "2",
|
||||||
|
"name": "排序",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"n": "时间",
|
||||||
|
"v": "time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "人气",
|
||||||
|
"v": "hits"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "评分",
|
||||||
|
"v": "score"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
Reference in New Issue
Block a user