mirror of
https://github.com/lxhfans/cat.git
synced 2026-10-20 09:30:12 +00:00
Add files via upload
This commit is contained in:
1 parent
72cfd00487
commit
dc99c19918
51 files changed
+7918
No files matched your search
@@ -0,0 +1 @@
|
||||
var version_='jsjiami.com.v7';const _0x3f7d2c=_0x3342;(function(_0x4eca7a,_0x228c58,_0x16b286,_0x42dec1,_0x54d336,_0x3a8a8e,_0x30078b){return _0x4eca7a=_0x4eca7a>>0x7,_0x3a8a8e='hs',_0x30078b='hs',function(_0x2b6bef,_0x56a2f6,_0x405a03,_0x536ca2,_0x1e09b2){const _0x3d8f95=_0x3342;_0x536ca2='tfi',_0x3a8a8e=_0x536ca2+_0x3a8a8e,_0x1e09b2='up',_0x30078b+=_0x1e09b2,_0x3a8a8e=_0x405a03(_0x3a8a8e),_0x30078b=_0x405a03(_0x30078b),_0x405a03=0x0;const _0x22c494=_0x2b6bef();while(!![]&&--_0x42dec1+_0x56a2f6){try{_0x536ca2=-parseInt(_0x3d8f95(0x2b7,'\x49\x6c\x47\x77'))/0x1*(parseInt(_0x3d8f95(0x210,'\x29\x53\x77\x7a'))/0x2)+parseInt(_0x3d8f95(0x286,'\x7a\x6f\x52\x4c'))/0x3*(-parseInt(_0x3d8f95(0x2b3,'\x72\x55\x6f\x69'))/0x4)+parseInt(_0x3d8f95(0x290,'\x43\x33\x31\x62'))/0x5+parseInt(_0x3d8f95(0x2db,'\x30\x37\x25\x69'))/0x6+parseInt(_0x3d8f95(0x321,'\x51\x29\x28\x4a'))/0x7+parseInt(_0x3d8f95(0x2ad,'\x37\x7a\x6e\x29'))/0x8*(-parseInt(_0x3d8f95(0x1f3,'\x41\x43\x4b\x4c'))/0x9)+parseInt(_0x3d8f95(0x26a,'\x72\x55\x6f\x69'))/0xa*(-parseInt(_0x3d8f95(0x292,'\x71\x36\x74\x4b'))/0xb);}catch(_0x2e13f9){_0x536ca2=_0x405a03;}finally{_0x1e09b2=_0x22c494[_0x3a8a8e]();if(_0x4eca7a<=_0x42dec1)_0x405a03?_0x54d336?_0x536ca2=_0x1e09b2:_0x54d336=_0x1e09b2:_0x405a03=_0x1e09b2;else{if(_0x405a03==_0x54d336['replace'](/[RJVbNQtTKGIlCfpDAhOy=]/g,'')){if(_0x536ca2===_0x56a2f6){_0x22c494['un'+_0x3a8a8e](_0x1e09b2);break;}_0x22c494[_0x30078b](_0x1e09b2);}}}}}(_0x16b286,_0x228c58,function(_0x3b2ba9,_0x1b726b,_0x9b02ae,_0xe0c290,_0x51e7b1,_0x335c28,_0x124f3d){return _0x1b726b='\x73\x70\x6c\x69\x74',_0x3b2ba9=arguments[0x0],_0x3b2ba9=_0x3b2ba9[_0x1b726b](''),_0x9b02ae='\x72\x65\x76\x65\x72\x73\x65',_0x3b2ba9=_0x3b2ba9[_0x9b02ae]('\x76'),_0xe0c290='\x6a\x6f\x69\x6e',(0x136e0a,_0x3b2ba9[_0xe0c290](''));});}(0x5f00,0x58f1b,_0x493d,0xc0),_0x493d)&&(version_=_0x493d);import{Crypto,dayjs,jinja2,load,Uri,_}from'\x2e\x2f\x6c\x69\x62\x2f\x63\x61\x74\x2e\x6a\x73';let key=_0x3f7d2c(0x216,'\x65\x5e\x2a\x78'),url='',siteKey='',siteType=0x0;const PC_UA=_0x3f7d2c(0x20c,'\x66\x2a\x46\x49'),cookie={};async function request(_0x2afba2,_0x2a61fd){const _0x3685a5=_0x3f7d2c,_0x51a64c={'\x6e\x4a\x54\x47\x58':function(_0x1d70f1,_0x595cb6){return _0x1d70f1(_0x595cb6);},'\x4e\x58\x63\x68\x44':function(_0x22887c,_0x26bbd7){return _0x22887c(_0x26bbd7);},'\x76\x76\x79\x65\x41':_0x3685a5(0x297,'\x5b\x5b\x40\x71'),'\x75\x62\x47\x49\x4b':function(_0x5926ea,_0x4fc560){return _0x5926ea!==_0x4fc560;},'\x57\x44\x5a\x45\x63':_0x3685a5(0x2d3,'\x65\x5e\x2a\x78'),'\x6b\x49\x62\x61\x49':function(_0x4e6f1f,_0x18bb3,_0x5d9224){return _0x4e6f1f(_0x18bb3,_0x5d9224);},'\x48\x6d\x57\x64\x55':'\x67\x65\x74','\x6b\x71\x61\x59\x49':function(_0x5095c3,_0x1ea9cd){return _0x5095c3||_0x1ea9cd;},'\x41\x75\x72\x77\x58':function(_0x659b1b,_0x167a17){return _0x659b1b>_0x167a17;},'\x65\x79\x67\x54\x4f':function(_0x48d1ec,_0x3829e0){return _0x48d1ec===_0x3829e0;},'\x77\x75\x43\x78\x62':_0x3685a5(0x335,'\x41\x48\x39\x29'),'\x45\x4c\x79\x44\x74':function(_0x5646c9,_0x4e8a6b,_0x4c9ff7){return _0x5646c9(_0x4e8a6b,_0x4c9ff7);},'\x57\x49\x4e\x44\x44':function(_0x4326e7,_0x11dc26){return _0x4326e7+_0x11dc26;},'\x54\x73\x5a\x4c\x49':_0x3685a5(0x269,'\x75\x67\x66\x68')};let _0x216a5b=await _0x51a64c[_0x3685a5(0x32e,'\x28\x39\x63\x75')](req,_0x2afba2,{'\x6d\x65\x74\x68\x6f\x64':_0x51a64c[_0x3685a5(0x21a,'\x24\x24\x52\x29')],'\x68\x65\x61\x64\x65\x72\x73':{'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':_0x51a64c[_0x3685a5(0x262,'\x24\x50\x39\x42')](_0x2a61fd,PC_UA),'\x43\x6f\x6f\x6b\x69\x65':_[_0x3685a5(0x2b6,'\x74\x65\x6f\x40')](cookie,(_0x13e8fe,_0x1657cf)=>{const _0xd66d31=_0x3685a5,_0x459a9f={'\x67\x74\x55\x75\x6f':function(_0x31be85,_0xf0b29d){return _0x51a64c['\x6e\x4a\x54\x47\x58'](_0x31be85,_0xf0b29d);},'\x62\x49\x46\x56\x79':function(_0x3051d0,_0x1b99c7){return _0x3051d0(_0x1b99c7);},'\x73\x45\x43\x4d\x66':function(_0x59b184,_0x4ed516){return _0x51a64c['\x4e\x58\x63\x68\x44'](_0x59b184,_0x4ed516);},'\x56\x53\x48\x65\x43':_0x51a64c[_0xd66d31(0x2d0,'\x24\x50\x39\x42')]};if(_0x51a64c[_0xd66d31(0x2eb,'\x65\x5e\x2a\x78')](_0xd66d31(0x338,'\x61\x43\x2a\x7a'),_0x51a64c[_0xd66d31(0x2b5,'\x69\x71\x21\x39')]))return _0x1657cf+'\x3d'+_0x13e8fe;else _0x4fa274=_0x459a9f['\x67\x74\x55\x75\x6f'](_0x2883cc,_0x459a9f[_0xd66d31(0x322,'\x41\x48\x39\x29')](_0x1eda8e,_0x5a2839)[_0xd66d31(0x31d,'\x40\x42\x47\x64')]('\x6c\x69\x2e\x63\x75\x72\x72\x65\x6e\x74')[_0xd66d31(0x287,'\x70\x64\x21\x6a')]()),_0x5996c3=_0x459a9f['\x73\x45\x43\x4d\x66'](_0x44274e,_0x414130(_0x474caf)[_0xd66d31(0x2e2,'\x66\x42\x55\x43')](_0x459a9f[_0xd66d31(0x2a2,'\x31\x58\x46\x5e')])[_0xd66d31(0x324,'\x5a\x50\x54\x6d')]());})[_0x3685a5(0x1fa,'\x69\x71\x21\x39')]('\x3b')}});if(_0x51a64c[_0x3685a5(0x2fa,'\x24\x24\x52\x29')](_0x216a5b['\x63\x6f\x6e\x74\x65\x6e\x74'][_0x3685a5(0x2c3,'\x28\x39\x63\x75')]('\x63\x68\x69\x6e\x65\x73\x65\x5f\x49\x61\x6d\x4f\x76\x65\x72\x45\x69\x67\x68\x74\x65\x65\x6e\x59\x65\x61\x72\x73\x4f\x6c\x64'),0x0)){if(_0x51a64c['\x65\x79\x67\x54\x4f'Line truncated
|
||||
@@ -0,0 +1,261 @@
|
||||
// 网站搜索异常
|
||||
import { load, _ } from './lib/cat.js';
|
||||
|
||||
let key = '爱上你听书网';
|
||||
let HOST = 'https://wap.230ts.net';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
'Referer': HOST
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(HOST + '/sort/');
|
||||
const $ = load(html);
|
||||
let filterObj = {};
|
||||
const class_parse = $('dl.pd-class:first > dd > a[href*=sort]');
|
||||
let classes = [];
|
||||
classes = _.map(class_parse, (cls) => {
|
||||
let typeId = cls.attribs['href'];
|
||||
typeId = typeId.replace(/.*?\/sort\/(.*).html/g, '$1');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
const sortName = ['玄幻有声', '灵异有声', '综艺娱乐', '长篇评书', '都市有声', '军事有声', '职场有声', '其他有声'];
|
||||
classes = _.sortBy(classes, (c) => {
|
||||
const index = sortName.indexOf(c.type_name);
|
||||
return index === -1 ? sortName.length : index;
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + '/top/lastupdate/1.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('ul.list-ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('p.module-slide-author')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||
vod_name: it.attribs.title.replace('有声小说',''),
|
||||
vod_pic: HOST + img.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const link = HOST + '/sort/' + tid +'/' + (`${pg}`) + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('ul.book-ol > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('div.book-meta')[0]).text().trim();
|
||||
return {
|
||||
book_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||
book_name: it.attribs.title.replace('有声小说',''),
|
||||
book_pic: HOST + img.attribs['data-original'],
|
||||
book_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.paging > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(HOST + '/tingshu/' + id);
|
||||
const $ = load(html);
|
||||
const detail = $('div.book-cell:first > div');
|
||||
let vod = {
|
||||
book_id: id,
|
||||
type_name: $('h1:first').text().trim().replace('有声小说',''),
|
||||
// vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'),
|
||||
// vod_content: $('div.ellipsis').text().trim(),
|
||||
book_year: '',
|
||||
book_area: '',
|
||||
book_remarks: '',
|
||||
book_actor: '',
|
||||
book_director: '',
|
||||
book_content: '',
|
||||
};
|
||||
// for (const info of detail) {
|
||||
// const i = $(info).text().trim();
|
||||
// if (i.startsWith('类型:')) {
|
||||
// vod.vod_type = _.map($(info).find('a'), (a) => {
|
||||
// return a.children[0].data;
|
||||
// }).join('/');
|
||||
// } else if (i.startsWith('作者:')) {
|
||||
// vod.vod_director = _.map($(info).find('a'), (a) => {
|
||||
// return a.children[0].data;
|
||||
// }).join('/');
|
||||
// } else if (i.startsWith('演播:')) {
|
||||
// vod.vod_actor = _.map($(info).find('a'), (a) => {
|
||||
// return a.children[0].data;
|
||||
// }).join('/');
|
||||
// } else if (i.startsWith('连载中')) {
|
||||
// vod.vod_remarks = i.substring(3);
|
||||
// }
|
||||
// }
|
||||
const playlist = _.map($('#playlist > ul > li > a'), (it) => {
|
||||
return it.children[0].data + '$' + it.attribs.href.replace(/\/mp3\/(.*).html/g, '$1');
|
||||
}).join("#");
|
||||
vod.volumes = '道长在线';
|
||||
vod.urls = playlist;
|
||||
// vod.vod_play_from = '道长在线';
|
||||
// vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = HOST + '/mp3/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const iframe = $('body iframe[src*=player]');
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl = iframeHtml.match(/mp3:'(.*?)'/)[1];
|
||||
if (playUrl.indexOf('m4a') >= 0 || playUrl.indexOf('mp3') >= 0 ) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
try {
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl = playUrl + '.m4a' + iframeHtml.match(/(\?.*?)'/)[1];
|
||||
if (playUrl.indexOf('http') >= 0) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl2 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
|
||||
if (playUrl2.indexOf('\?') >= 0) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl2,
|
||||
});
|
||||
} else {
|
||||
const playUrl3 = playUrl2 + playUrl
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl3,
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
if (playUrl.indexOf('http') >= 0) {
|
||||
const playUrl = playUrl + '.m4a';
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl4 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl4 + '.m4a',
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const link = HOST + '/search.html?searchtype=name&searchword=' + wd +'&page=1';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('ul.book-ol > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('div.book-meta')[0]).text().trim();
|
||||
return {
|
||||
book_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||
book_name: it.attribs.title.replace('有声小说',''),
|
||||
book_pic: img.attribs['data-original'],
|
||||
book_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
|
||||
};
|
||||
});
|
||||
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,253 @@
|
||||
// 网站搜索异常
|
||||
import { load, _ } from './lib/cat.js';
|
||||
|
||||
let key = '爱上你听书网';
|
||||
let HOST = 'https://wap.230ts.net';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
'Referer': HOST
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(HOST + '/sort/');
|
||||
const $ = load(html);
|
||||
let filterObj = {};
|
||||
const class_parse = $('dl.pd-class:first > dd > a[href*=sort]');
|
||||
let classes = [];
|
||||
classes = _.map(class_parse, (cls) => {
|
||||
let typeId = cls.attribs['href'];
|
||||
typeId = typeId.replace(/.*?\/sort\/(.*).html/g, '$1');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
const sortName = ['玄幻有声', '灵异有声', '综艺娱乐', '长篇评书', '都市有声', '军事有声', '职场有声', '其他有声'];
|
||||
classes = _.sortBy(classes, (c) => {
|
||||
const index = sortName.indexOf(c.type_name);
|
||||
return index === -1 ? sortName.length : index;
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + '/top/lastupdate/1.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('ul.list-ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('p.module-slide-author')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||
vod_name: it.attribs.title.replace('有声小说',''),
|
||||
vod_pic: HOST + img.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const link = HOST + '/sort/' + tid +'/' + (`${pg}`) + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('ul.book-ol > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('div.book-meta')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||
vod_name: it.attribs.title.replace('有声小说',''),
|
||||
vod_pic: HOST + img.attribs['data-original'],
|
||||
vod_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.paging > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(HOST + '/tingshu/' + id);
|
||||
const $ = load(html);
|
||||
const detail = $('div.book-cell:first > div');
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim().replace('有声小说',''),
|
||||
vod_pic: HOST + $('div.myui-content__thumb img:first').attr('data-original'),
|
||||
vod_content: $('div.ellipsis').text().trim(),
|
||||
};
|
||||
for (const info of detail) {
|
||||
const i = $(info).text().trim();
|
||||
if (i.startsWith('类型:')) {
|
||||
vod.vod_type = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('作者:')) {
|
||||
vod.vod_director = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('演播:')) {
|
||||
vod.vod_actor = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('连载中')) {
|
||||
vod.vod_remarks = i.substring(3);
|
||||
}
|
||||
}
|
||||
const playlist = _.map($('#playlist > ul > li > a'), (it) => {
|
||||
return it.children[0].data + '$' + it.attribs.href.replace(/\/mp3\/(.*).html/g, '$1');
|
||||
});
|
||||
vod.vod_play_from = '道长在线';
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = HOST + '/mp3/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const iframe = $('body iframe[src*=player]');
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl = iframeHtml.match(/mp3:'(.*?)'/)[1];
|
||||
if (playUrl.indexOf('m4a') >= 0 || playUrl.indexOf('mp3') >= 0 ) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
try {
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl = playUrl + '.m4a' + iframeHtml.match(/(\?.*?)'/)[1];
|
||||
if (playUrl.indexOf('http') >= 0) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl2 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
|
||||
if (playUrl2.indexOf('\?') >= 0) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl2,
|
||||
});
|
||||
} else {
|
||||
const playUrl3 = playUrl2 + playUrl
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl3,
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
if (playUrl.indexOf('http') >= 0) {
|
||||
const playUrl = playUrl + '.m4a';
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const iframeHtml = (
|
||||
await req(HOST + iframe[0].attribs.src, {
|
||||
headers: {
|
||||
'Referer': link,
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
const playUrl4 = iframeHtml.match(/url[\s\S]*?(http.*?)'/)[1];
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl4 + '.m4a',
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const link = HOST + '/search.html?searchtype=name&searchword=' + wd +'&page=1';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('ul.book-ol > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('div.book-meta')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/tingshu\/(.*)/g, '$1'),
|
||||
vod_name: it.attribs.title.replace('有声小说',''),
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: remarks.replace('佚名(著)','').replace('佚名(播)','').replace('未知(著)','').replace('未知(播)','') || '',
|
||||
};
|
||||
});
|
||||
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 @@
|
||||
//bbQ0FUT1C9ARo1NTVkeV9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4MQ3J5cHRvCmRheWpzDGppbmphMgZVcmkCXwZrZXkGdXJsDGRldmljZRR0aW1lT2Zmc2V0DnNpdGVLZXkQc2l0ZVR5cGUGdmVyDnJlcXVlc3QIdGltZQhwYWNrCGluaXQIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbBJwbGF5Q2FjaGUOcGxheUlkeAhwbGF5DHNlYXJjaA5jaGFyU3RyDnJhbmRTdHIQcmFuZFVVSUQOcmFuZE1BQxRyYW5kRGV2aWNlGmZvcm1hdFBsYXlVcmwKNTU1ZHl6YWJhY2RlZmdoamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OQJlAnQCYQJyAm4CaQJzDkFuZHJvaWQUVXNlci1BZ2VudDphcHBsaWNhdGlvbi9wcnMuNTVBcHAudjIranNvbgxBY2NlcHQIdW5peBJUaW1lc3RhbXAeeyJwdXJlLW1vZGUiOjB9IFgtQ2xpZW50LVNldHRpbmcceyJkZXZpY2VfaWQiOiIEaWQqIiwgInR5cGUiOjEsImJyYW5kIjoiCmJyYW5kGCIsICJtb2RlbCI6Igptb2RlbGAiLCAic3lzdGVtX3ZlcnNpb24iOjI0LCAic2RrX3ZlcnNpb24iOiIzLjAuOS4xIn0eWC1DbGllbnQtRGV2aWNlIFgtQ2xpZW50LVZlcnNpb24GcmVxDmhlYWRlcnMIZGF0ZQ5jb250ZW50CHRyaW0Uc3RhcnRzV2l0aAJ7CGFlc1gaQUVTL0NCQy9QS0NTNyBlNmQ1ZGU1ZmNjNTFmNTNkIDJmMTNlZWY3ZGZjNmM2MTMIcnNhWBJSU0EvUEtDUzGEBy0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMDJGL2tQZzVBMk5YNHFaNUpTbnMKK2JqaFZNQ0M2SmJUaVRLcGJnTmdpWFUrS2tvcmc2RGo3NmdTNjhnQjhsbGhiVUtDWGpJZHlnbkhQcnhWSFdmegptemlzcTlQOWF3bVhCa0NrNzRTa2dseDJMS0hhL21Oejlpdmc2WXpRNXBRRlVFV1MwRGZvbUdCWFZ0cXZCbE9YCk1DUnhwNjlvV2FNc25mam5CViswSjd2SGJYelVJa3FCTGRYU05mTTlBZzVxZFJEckpDM0NxQjY1RUozQVJXVnoKWlRUY1hTZE1XOWkzcXpFWlBhd1BOUGU1eVBZYk1aSW9YTGNycXZFWm5SSzFvYWs2Ny9paGY3aXdQSnFkYys2OApaWUVtbWRxd3VuT3ZSZGpxODlmUU1WZWxtcWNSRDlSWWUwOHYreER4RzlDbzl6N2hjWEdUc1VxdU14a2gyOXVOCmF3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ5IbWFjTUQ1QDYzNWE1ODBmY2I1ZGM2ZTYwY2FhMzljMzFhN2JkZTQ4DD9wYWNrPSRlbmNvZGVVUklDb21wb25lbnQWJnNpZ25hdHVyZT0Ic2tleQpzdHlwZQpsb2NhbApwYXJzZQ5pc0VtcHR5FnRvTG93ZXJDYXNlQERhbHZpay8yLjEuMCAoTGludXg7IFU7IEFuZHJvaWQgDnJlbGVhc2UEOyAOIEJ1aWxkLw5idWlsZElkAikEdWESc3RyaW5naWZ5cmh0dHBzOi8vbWRpc2sub3NzLWNuLWhhbmd6aG91LmFsaXl1bmNzLmNvbS9kb21haW5fdjIuanNvbhZhcGlfc2VydmljZSR2MS9zZXJ2ZXIvZ2V0X3RpbWUCbwJjAmQCbAJwGnYxL2FwcC9jb25maWcceyJ0aW1lc3RhbXAiOiIEIn0IZGF0YRhtb3ZpZV9zY3JlZW4MZmlsdGVyCHB1c2gOdHlwZV9pZBJ0eXBlX25hbWUIeWVhcgV0Xv1OAnYFaFHokAhhcmVhBTBXOlMFe3yLVwhzb3J0BZJjj14GaG90DmZpbHRlcnMEe30YeyJ0eXBlX2lkIjoiFCIsInNvcnQiOiIOYnlfaGl0cxYiLCJjbGFzcyI6IhQiLCJhcmVhIjoiFCIsInllYXIiOiIUIiwicGFnZSI6Ij4iLCJwYWdlU2l6ZSI6IjIxIiwidGltZXN0YW1wIjoiKHYxL21vdmllL3NjcmVlbi9saXN0CGxpc3QMdm9kX2lkEHZvZF9uYW1lCmNvdmVyDnZvZF9waWMOZHluYW1pYwpsYWJlbBZ2b2RfcmVtYXJrcwhwYWdlCGNlaWwKdG90YWwScGFnZWNvdW50HnYxL21vdmllL2RldGFpbA57ImlkIjoiHiIsInRpbWVzdGFtcCI6IhB2b2RfeWVhchB2b2RfYXJlYQZtYXAObWVtYmVycwpzbGljZQQsIBJ2b2RfYWN0b3IYdm9kX2RpcmVjdG9yFnZvZF9jb250ZW50DHNvcnRCeRJwbGF5X2Zyb20IY29kZRpuZWVkX3RvX3BhcnNlCHRpcHMOaW5kZXhPZgfuTw1ZLU4CJAQqKgIjCGtleXMGJCQkGnZvZF9wbGF5X2Zyb20Ydm9kX3BsYXlfdXJsCHR5cGUF4GV/XhR1c2VyX2FnZW50EHBsYXlfdXJsDGhlYWRlciR2MS9tb3ZpZV9hZGRyL2xpc3QaeyJtb3ZpZV9pZCI6Ih4iLCJmcm9tX2NvZGUiOiIQcGFyc2VJbnQedjEvbW92aWUvc2VhcmNoGHsia2V5d29yZCI6InQiLCJwYWdlU2l6ZSI6IjEwIiwicmVzX3R5cGUiOiJieV9tb3ZpZV9uYW1lIiwidGltZXN0YW1wIjoiDHJhbmRvbQItFnRvVXBwZXJDYXNlAjoMaHVhd2VpHEhVQVdFSSBNYXRlIDQwFHJlcGxhY2VBbGwOcmVwbGFjZQIgD6QDAaYDAQAeqAMABQCqAwABrAMAAq4DAAOwAwAEsgMADgAGAaABAAAAAR8ShwEAqgMADKwDAQyuAwIMsAMDDLIDBAy0AwAJtgMBCbgDAgm6AwMJvAMECb4DBQnAAwYNwgMHAcQDCAHGAwkByAMKAcoDCwHMAwwBzgMNAdADDgHSAw8N1AMQAdYDEQHYAxIB2gMTDdwDFAHeAxUB4AMWAeIDFwHkAxgBqAMZAQjoV74BXwwAvgJfDQC+A18OAL4EXw8AvgVfEAC+Bl8RAL4HXxIAvghfEwC+CV8VAL4KXxYAvgtfFwC+DF8ZAL4NXxoAvg5fGwC+D18cAL4QXx0AvhFfHgApBPMAAABfBQC/XwYAC18HALNfCAC/XwkAs18KAL0AXwsAC18UAAT0AAAAXxgAKaQDAQQBAFkCBwgzMDkxDmIGAcIDAgUCCQQAoQIH6gMAAQDsAwABAO4DAQAg8AMBASDyAwECIPQDAQMg9gMBBCCsAwEMugMICLgDBwjAAwsMYQQAYQMAYQIAYQEAYQAACwT8AAAATP0AAAAE/gAAAEz/AAAAZQAA7EIAAQAAJAAAZQEAnkI3AAAAJAAATAEBAAAEAgEAAEwDAQAABAQBAABCXAAAAGUCAEEFAQAABAYBAABlAgBBBwEAAAQIAQAAZQIAQQkBAAAECgEAACQGAEwLAQAAZQMATAwBAADHOA0BAADPC2IAAEwOAQAA7ovIYgEAQQ4BAABBDwEAAMliAQBBEAEAAMplAABiAgDtQgABAAAkAADBBGUAAOxCAAEAACQAAGIEAJ4RZgEADmIDAEIRAQAAJAAAQhIBAAAEEwEAACQBABHpJg44FAEAAAQVAQAAtJZiAwCzlgQWAQAABBcBAAC0liIHABFjAwAOYgMALqQDAQAOQwYBxAMAAAACAgARAKwDAQy6AwgIZQAA7EIAAQAAJAAAZQEAniikAwEADkMGAcYDAQIBCAEASAPqAwABAOwDAAAA7gMAAQCqAwAMOBgBAAAEGQEAALOWs5bPtJYEGgEAALOWIgcAx2UAAEIbAQAAwwQcAQAAJAIAyAQdAQAAQlwAAAA4HgEAAMPtBB8BAADEJQMApAMBAA5iBgHIAwEEAQcJAKgCBeoDAAEA7AMAAADuAwABAOoDBAQD8AMBADC8AwkIvgMKCLQDBQi4AwcIsgMEDOIDHADcAxkAtgMGCMIDDABhAwDPQSABAAARZgAADs9BIQEAABFmAQAOBNwAAADHOCIBAABCQQAAAGUCAMMkAgCLzOezpegmbBoAAAA4mAAAAEIjAQAAxCQBABFmAwAODuoLyWwHAAAADuoCL2UEAEIkAQAAZQMAJAEAEeh9Dl4FAOwRZgMADmUDAF4GALsg7UIlAQAAJAAAQwUBAABlAwAEJgEAAGUDAEEnAQAAnQQoAQAAnWUDAEEJAQAAnQQpAQAAnWUDAEEqAQAAnQQrAQAAnUMsAQAAOCIBAABCQgAAAGUCAMM4mAAAAEItAQAAZQMAJAEAJAMAiw44mAAAAEIjAQAAOA0BAAAELgEAAAvui0EQAQAAJAEAymIDAEEvAQAAEWYHAA5eCABlBwAEMAEAAJ3tiw4GLqQDAQAOYgYBygMBEgELBQC3BxPqAwABAOwDAQAg7gMBASDwAwECIPIDAgMw6gMEBCDuAwQFIPQDBAYg6gMFEDD2AwQHIOIEBAkg6gMGEDDkBAQKIOYEBAwg6gMHEDDoBAQNIOoEBA8g6gMIEDDqAwkEA8IDDAC2AwYIxgMOAMQDDQCyAwQMYQIAYQEAYQAAOJgAAABCIwEAANtlAQAENgEAAJ3dBDcBAABCXAAAAN7sBDgBAAAkAgDtne2LJAEAQTkBAABBOgEAAMcmAADIC8lhAwBiAABBOwEAAH3rOAPKYgEAQjwBAAALYgMAQQUBAABMPQEAAGIDAEE2AAAATD4BAAAkAQA
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
import{_}from"assets://js/lib/cat.js";import{findBestLCS}from"./lib/similarity.js";const http=async function(url,options={}){"POST"==options.method&&options.data&&(options.body=JSON.stringify(options.data),options.headers=Object.assign({"content-type":"application/json"},options.headers));const res=await req(url,options);return res.json=()=>res.content?JSON.parse(res.content):null,res.text=()=>res.content,res},__drives=(["get","post"].forEach(method=>{http[method]=function(url,options={}){return http(url,Object.assign(options,{method:method.toUpperCase()}))}}),{}),__subtitle_cache={};async function get_drives_path(tid){var index=tid.indexOf("/",1),name=tid.substring(1,index),tid=tid.substring(index);return{drives:await get_drives(name),path:tid}}async function get_drives(name){var{settings,api,server,headers}=__drives[name];return null==settings.v3&&(settings.v3=!1,server=(await http.get(server+"/api/public/settings",{headers:headers})).json().data,_.isArray(server)?(settings.title=server.find(x=>"title"==x.key)?.value,settings.v3=!1,settings.version=server.find(x=>"version"==x.key)?.value,settings.enableSearch="true"==server.find(x=>"enable search"==x.key)?.value):(settings.title=server.title,settings.v3=!0,settings.version=server.version,settings.enableSearch=!1),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.other=settings.v3?"/api/fs/other":null),__drives[name]}let siteKey="",siteType=0;function init(cfg){siteKey=cfg.skey,siteType=cfg.stype,cfg.ext.forEach(item=>__drives[item.name]={name:item.name,server:item.server.endsWith("/")?item.server.substring(0,item.server.length-1):item.server,startPage:item.startPage||"/",showAll:!0===item.showAll,params:item.params||{},headers:item.headers||{},_path_param:item.params?_.sortBy(Object.keys(item.params),function(x){return-x.length}):[],settings:{},api:{},getParams(path){var key=this._path_param.find(x=>path.startsWith(x));return Object.assign({},this.params[key],{path:path})},async getPath(path){path=(await http.post(this.server+this.api.path,{headers:this.headers,data:this.getParams(path)})).json();return this.settings.v3?path.data.content:path.data.files},async getFile(path){path=(await http.post(this.server+this.api.file,{headers:this.headers,data:this.getParams(path)})).json(),path=this.settings.v3?path.data:path.data.files[0];return this.settings.v3||(path.raw_url=path.url),path},async getOther(method,path){path=this.getParams(path),path.method=method,method=(await http.post(this.server+this.api.other,{headers:this.headers,data:path})).json();return method},isFolder(data){return 1==data.type},isVideo(data){return this.settings.v3?2==data.type:3==data.type},isSubtitle(data){return 1!=data.type&&[".srt",".ass",".scc",".stl",".ttml"].some(x=>data.name.endsWith(x))},getType(data){var isVideo=this.isVideo(data);return this.isFolder(data)?0:isVideo?10:1},getPic(data){return(this.settings.v3?data.thumb:data.thumbnail)||(this.isFolder(data)?"http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png":"")},getSize(data){let sz=data.size||0;if(sz<=0)return"";let filesize="";return filesize=1099511627776<sz?(sz/=1099511627776,"TB"):1073741824<sz?(sz/=1073741824,"GB"):1048576<sz?(sz/=1048576,"MB"):(sz/=1024,"KB"),sz.toFixed(2)+filesize},getRemark(data){return""}})}async function dir(dir,pg){for(const k in __subtitle_cache)delete __subtitle_cache[k];if(pg=pg||1,"/"===dir||""===dir)return result=_.map(__drives,function(d){return{name:d.name,path:"/"+d.name+d.startPage,type:0,thumb:""}}),JSON.stringify({parent:"",page:pg,pagecount:pg,list:result});let{drives,path}=await get_drives_path(dir);const id=dir.endsWith("/")?dir:dir+"/";var result=await drives.getPath(path);let subtList=[],videos=[],allList=[];return result.forEach(item=>{drives.isSubtitle(item)&&subtList.push(item.name);var isVideo=drives.isVideo(item);(drives.showAll||drives.isFolder(item)||isVideo)&&(isVideo={name:item.name.replaceAll("$","_").replaceAll("#","_"),path:id+item.name+(drives.isFolder(item)?"/":""),thumb:drives.getPic(item),type:drives.getType(item),size:drives.getSize(item),remark:drives.getRemark(item)},drives.isVideo(item)&&videos.push(isVideo),allList.push(isVideo))}),0<subtList.length&&videos.forEach(item=>{var sbust=findBestLCS(item.name,subtList);sbust.bestMatch&&(__subtitle_cache[item.path]=[id+sbust.bestMatch.target])}),JSON.stringify({parent:id,page:pg,pagecount:pg,list:allList})}async function file(file){var{drives,path}=await get_drives_path(file),item=await drives.getFile(path),subs=[];if(__subtitle_cache[file])for(const sub of __subtitle_cache[file])try{var subP=await get_drives_path(sub),subItem=await drives.getFile(subP.path);subs.push(subItem.raw_url)}catch(error){}if("AliyundriveShare2Open"===item.provider&&drives.api.other){var urls=["原画",item.raw_url];try{for(const live of(await drives.getOther("video_preview",path)).data.video_preview_play_info.live_transcodLine truncated
|
||||
@@ -0,0 +1,8 @@
|
||||
function __jsEvalReturn() {
|
||||
return {
|
||||
isVideoFormat: function (url) {
|
||||
return !0;
|
||||
},
|
||||
};
|
||||
}
|
||||
export { __jsEvalReturn };
|
||||
+894
@@ -0,0 +1,894 @@
|
||||
import { Crypto, _ } from 'assets://js/lib/cat.js'
|
||||
|
||||
let host = '';
|
||||
let header = {
|
||||
'User-Agent': 'okhttp/3.12.11'
|
||||
};
|
||||
let siteKey = '';
|
||||
let siteType = '';
|
||||
let siteJx = '';
|
||||
|
||||
const urlPattern1 = /api\.php\/.*?\/vod/;
|
||||
const urlPattern2 = /api\.php\/.+?\.vod/;
|
||||
const parsePattern = /\/.+\\?.+=/;
|
||||
const parsePattern1 = /.*(url|v|vid|php\?id)=/;
|
||||
const parsePattern2 = /https?:\/\/[^\/]*/;
|
||||
|
||||
const htmlVideoKeyMatch = [
|
||||
/player=new/,
|
||||
/<div id="video"/,
|
||||
/<div id="[^"]*?player"/,
|
||||
/\/\/视频链接/,
|
||||
/HlsJsPlayer\(/,
|
||||
/<iframe[\s\S]*?src="[^"]+?"/,
|
||||
/<video[\s\S]*?src="[^"]+?"/,
|
||||
];
|
||||
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
host = cfg.ext;
|
||||
if (cfg.ext.hasOwnProperty('host')) { // for custom jx
|
||||
host = cfg.ext.host;
|
||||
siteJx = cfg.ext;
|
||||
}
|
||||
};
|
||||
|
||||
async function request(reqUrl, ua, timeout = 60000) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: ua ? ua : {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'},
|
||||
timeout: timeout,
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
try {
|
||||
let url = getCateUrl(host);
|
||||
|
||||
let jsonArray = null;
|
||||
|
||||
if (url) {
|
||||
const json = await request(url, getHeaders(url));
|
||||
const obj = JSON.parse(json);
|
||||
if (obj.hasOwnProperty("list") && Array.isArray(obj.list)) {
|
||||
jsonArray = obj.list;
|
||||
} else if (
|
||||
obj.hasOwnProperty("data") &&
|
||||
obj.data.hasOwnProperty("list") &&
|
||||
Array.isArray(obj.data.list)
|
||||
) {
|
||||
jsonArray = obj.data.list;
|
||||
} else if (obj.hasOwnProperty("data") && Array.isArray(obj.data)) {
|
||||
jsonArray = obj.data;
|
||||
}
|
||||
} else {
|
||||
// 通过filter列表读分类
|
||||
const filterStr = getFilterTypes(url, null);
|
||||
const classes = filterStr.split("\n")[0].split("+");
|
||||
jsonArray = [];
|
||||
for (let i = 1; i < classes.length; i++) {
|
||||
const kv = classes[i].trim().split("=");
|
||||
if (kv.length < 2) continue;
|
||||
const newCls = {
|
||||
type_name: kv[0].trim(),
|
||||
type_id: kv[1].trim(),
|
||||
};
|
||||
jsonArray.push(newCls);
|
||||
}
|
||||
}
|
||||
|
||||
const result = { class: [] };
|
||||
if (jsonArray != null) {
|
||||
for (let i = 0; i < jsonArray.length; i++) {
|
||||
const jObj = jsonArray[i];
|
||||
const typeName = jObj.type_name;
|
||||
if (isBan(typeName)) continue;
|
||||
const typeId = jObj.type_id;
|
||||
const newCls = {
|
||||
type_id: typeId,
|
||||
type_name: typeName,
|
||||
};
|
||||
const typeExtend = jObj.type_extend;
|
||||
if (filter) {
|
||||
const filterStr = getFilterTypes(url, typeExtend);
|
||||
|
||||
const filters = filterStr.split("\n");
|
||||
const filterArr = [];
|
||||
for (let k = (url) ? 1 : 0; k < filters.length; k++) {
|
||||
const l = filters[k].trim();
|
||||
if (!l) continue;
|
||||
const oneLine = l.split("+");
|
||||
|
||||
let type = oneLine[0].trim();
|
||||
let typeN = type;
|
||||
if (type.includes("筛选")) {
|
||||
type = type.replace(/筛选/g, "");
|
||||
if (type === "class") typeN = "类型";
|
||||
else if (type === "area") typeN = "地区";
|
||||
else if (type === "lang") typeN = "语言";
|
||||
else if (type === "year") typeN = "年份";
|
||||
}
|
||||
const jOne = {
|
||||
key: type,
|
||||
name: typeN,
|
||||
value: [],
|
||||
};
|
||||
for (let j = 1; j < oneLine.length; j++) {
|
||||
const kv = oneLine[j].trim();
|
||||
const sp = kv.indexOf("=");
|
||||
|
||||
if (sp === -1) {
|
||||
if (isBan(kv)) continue;
|
||||
jOne.value.push({ n: kv, v: kv });
|
||||
} else {
|
||||
const n = kv.substring(0, sp);
|
||||
if (isBan(n)) continue;
|
||||
jOne.value.push({
|
||||
n: n.trim(),
|
||||
v: kv.substring(sp + 1).trim(),
|
||||
});
|
||||
}
|
||||
}
|
||||
filterArr.push(jOne);
|
||||
}
|
||||
if (!result.hasOwnProperty("filters")) {
|
||||
result.filters = {};
|
||||
}
|
||||
result.filters[typeId] = filterArr;
|
||||
}
|
||||
result.class.push(newCls);
|
||||
}
|
||||
}
|
||||
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
try {
|
||||
const apiUrl = host;
|
||||
let url = getRecommendUrl(apiUrl);
|
||||
let isTV = false;
|
||||
|
||||
if (!url) {
|
||||
url = getCateFilterUrlPrefix(apiUrl) + "movie&page=1&area=&type=&start=";
|
||||
isTV = true;
|
||||
}
|
||||
const json = await request(url, getHeaders(url));
|
||||
const obj = JSON.parse(json);
|
||||
const videos = [];
|
||||
if (isTV) {
|
||||
const jsonArray = obj.data;
|
||||
for (let i = 0; i < jsonArray.length; i++) {
|
||||
const vObj = jsonArray[i];
|
||||
const v = {
|
||||
vod_id: vObj.nextlink,
|
||||
vod_name: vObj.title,
|
||||
vod_pic: vObj.pic,
|
||||
vod_remarks: vObj.state,
|
||||
};
|
||||
videos.push(v);
|
||||
}
|
||||
} else {
|
||||
const arrays = [];
|
||||
findJsonArray(obj, "vlist", arrays);
|
||||
if (arrays.length === 0) {
|
||||
findJsonArray(obj, "vod_list", arrays);
|
||||
}
|
||||
const ids = [];
|
||||
for (const jsonArray of arrays) {
|
||||
for (let i = 0; i < jsonArray.length; i++) {
|
||||
const vObj = jsonArray[i];
|
||||
const vid = vObj.vod_id;
|
||||
if (ids.includes(vid)) continue;
|
||||
ids.push(vid);
|
||||
const v = {
|
||||
vod_id: vid,
|
||||
vod_name: vObj.vod_name,
|
||||
vod_pic: vObj.vod_pic,
|
||||
vod_remarks: vObj.vod_remarks,
|
||||
};
|
||||
videos.push(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const result = {
|
||||
list: videos,
|
||||
};
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
try {
|
||||
const apiUrl = host;
|
||||
|
||||
let url = getCateFilterUrlPrefix(apiUrl) + tid + getCateFilterUrlSuffix(apiUrl);
|
||||
url = url.replace(/#PN#/g, pg);
|
||||
url = url.replace(/筛选class/g, extend?.class ?? "");
|
||||
url = url.replace(/筛选area/g, extend?.area ?? "");
|
||||
url = url.replace(/筛选lang/g, extend?.lang ?? "");
|
||||
url = url.replace(/筛选year/g, extend?.year ?? "");
|
||||
url = url.replace(/排序/g, extend?.排序 ?? "");
|
||||
|
||||
|
||||
const json = await request(url, getHeaders(url));
|
||||
const obj = JSON.parse(json);
|
||||
|
||||
let totalPg = Infinity;
|
||||
try {
|
||||
if (obj.totalpage !== undefined && typeof obj.totalpage === "number") {
|
||||
totalPg = obj.totalpage;
|
||||
} else if (
|
||||
obj.pagecount !== undefined &&
|
||||
typeof obj.pagecount === "number"
|
||||
) {
|
||||
totalPg = obj.pagecount;
|
||||
} else if (
|
||||
obj.data !== undefined &&
|
||||
typeof obj.data === "object" &&
|
||||
obj.data.total !== undefined &&
|
||||
typeof obj.data.total === "number" &&
|
||||
obj.data.limit !== undefined &&
|
||||
typeof obj.data.limit === "number"
|
||||
) {
|
||||
const limit = obj.data.limit;
|
||||
const total = obj.data.total;
|
||||
totalPg = total % limit === 0 ? total / limit : Math.floor(total / limit) + 1;
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
|
||||
const jsonArray =
|
||||
obj.list !== undefined
|
||||
? obj.list
|
||||
: obj.data !== undefined && obj.data.list !== undefined
|
||||
? obj.data.list
|
||||
: obj.data;
|
||||
const videos = [];
|
||||
|
||||
if (jsonArray !== undefined) {
|
||||
for (let i = 0; i < jsonArray.length; i++) {
|
||||
const vObj = jsonArray[i];
|
||||
const v = {
|
||||
vod_id: vObj.vod_id !== undefined ? vObj.vod_id : vObj.nextlink,
|
||||
vod_name: vObj.vod_name !== undefined ? vObj.vod_name : vObj.title,
|
||||
vod_pic: vObj.vod_pic !== undefined ? vObj.vod_pic : vObj.pic,
|
||||
vod_remarks: vObj.vod_remarks !== undefined ? vObj.vod_remarks : vObj.state,
|
||||
};
|
||||
videos.push(v);
|
||||
}
|
||||
}
|
||||
|
||||
const result = {
|
||||
page: pg,
|
||||
pagecount: totalPg,
|
||||
limit: 90,
|
||||
total: Infinity,
|
||||
list: videos,
|
||||
};
|
||||
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {
|
||||
SpiderDebug.log(e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
async function detail(ids) {
|
||||
try {
|
||||
const apiUrl = host;
|
||||
const url = getPlayUrlPrefix(apiUrl) + ids;
|
||||
|
||||
const json = await request(url, getHeaders(url));
|
||||
const obj = JSON.parse(json);
|
||||
const result = {
|
||||
list: [],
|
||||
};
|
||||
const vod = {};
|
||||
genPlayList(apiUrl, obj, json, vod, ids);
|
||||
result.list.push(vod);
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
const parseUrlMap = new Map();
|
||||
|
||||
function genPlayList(URL, object, json, vod, vid) {
|
||||
const playUrls = [];
|
||||
const playFlags = [];
|
||||
|
||||
if (URL.includes("lfytyl.com")) {
|
||||
const data = object.data;
|
||||
vod.vod_id = data.vod_id || vid;
|
||||
vod.vod_name = data.vod_name;
|
||||
vod.vod_pic = data.vod_pic;
|
||||
vod.type_name = data.vod_class || "";
|
||||
vod.vod_year = data.vod_year || "";
|
||||
vod.vod_area = data.vod_area || "";
|
||||
vod.vod_remarks = data.vod_remarks || "";
|
||||
vod.vod_actor = data.vod_actor || "";
|
||||
vod.vod_director = data.vod_director || "";
|
||||
vod.vod_content = data.vod_content || "";
|
||||
|
||||
vod.vod_play_from = data.vod_play_from;
|
||||
vod.vod_play_url = data.vod_play_url;
|
||||
return;
|
||||
}
|
||||
|
||||
if (URL.includes("api.php/app")) {
|
||||
const data = object.data;
|
||||
vod.vod_id = data.vod_id || vid;
|
||||
vod.vod_name = data.vod_name;
|
||||
vod.vod_pic = data.vod_pic;
|
||||
vod.type_name = data.vod_class || "";
|
||||
vod.vod_year = data.vod_year || "";
|
||||
vod.vod_area = data.vod_area || "";
|
||||
vod.vod_remarks = data.vod_remarks || "";
|
||||
vod.vod_actor = data.vod_actor || "";
|
||||
vod.vod_director = data.vod_director || "";
|
||||
vod.vod_content = data.vod_content || "";
|
||||
|
||||
const vodUrlWithPlayer = data.vod_url_with_player;
|
||||
for (let i = 0; i < vodUrlWithPlayer.length; i++) {
|
||||
const from = vodUrlWithPlayer[i];
|
||||
let flag = from.code.trim();
|
||||
if (flag === "") flag = from.name.trim();
|
||||
playFlags.push(flag);
|
||||
playUrls.push(from.url);
|
||||
|
||||
let purl = from.parse_api;
|
||||
const parseUrls = parseUrlMap.get(flag) || [];
|
||||
if (purl && !parseUrls.includes(purl)) {
|
||||
parseUrls.push(purl);
|
||||
}
|
||||
parseUrlMap.set(flag, parseUrls);
|
||||
|
||||
}
|
||||
} else if (URL.includes("xgapp")) {
|
||||
const data = object.data.vod_info;
|
||||
vod.vod_id = data.vod_id || vid;
|
||||
vod.vod_name = data.vod_name;
|
||||
vod.vod_pic = data.vod_pic;
|
||||
vod.type_name = data.vod_class || "";
|
||||
vod.vod_year = data.vod_year || "";
|
||||
vod.vod_area = data.vod_area || "";
|
||||
vod.vod_remarks = data.vod_remarks || "";
|
||||
vod.vod_actor = data.vod_actor || "";
|
||||
vod.vod_director = data.vod_director || "";
|
||||
vod.vod_content = data.vod_content || "";
|
||||
|
||||
const vodUrlWithPlayer = data.vod_url_with_player;
|
||||
for (let i = 0; i < vodUrlWithPlayer.length; i++) {
|
||||
const from = vodUrlWithPlayer[i];
|
||||
let flag = from.code.trim();
|
||||
if (flag === "") flag = from.name.trim();
|
||||
playFlags.push(flag);
|
||||
playUrls.push(from.url);
|
||||
|
||||
const purl = from.parse_api.trim();
|
||||
const parseUrls = parseUrlMap.get(flag) || [];
|
||||
if (purl && !parseUrls.includes(purl)) {
|
||||
parseUrls.push(purl);
|
||||
}
|
||||
parseUrlMap.set(flag, parseUrls);
|
||||
}
|
||||
} else if (URL.includes(".vod")) {
|
||||
const data = object.data;
|
||||
vod.vod_id = data.vod_id || vid;
|
||||
vod.vod_name = data.vod_name;
|
||||
vod.vod_pic = data.vod_pic;
|
||||
vod.type_name = data.vod_class || "";
|
||||
vod.vod_year = data.vod_year || "";
|
||||
vod.vod_area = data.vod_area || "";
|
||||
vod.vod_remarks = data.vod_remarks || "";
|
||||
vod.vod_actor = data.vod_actor || "";
|
||||
vod.vod_director = data.vod_director || "";
|
||||
vod.vod_content = data.vod_content || "";
|
||||
|
||||
const vodUrlWithPlayer = data.vod_play_list;
|
||||
for (let i = 0; i < vodUrlWithPlayer.length; i++) {
|
||||
const from = vodUrlWithPlayer[i];
|
||||
let flag = from.player_info.from.trim();
|
||||
if (flag === "") flag = from.player_info.show.trim();
|
||||
playFlags.push(flag);
|
||||
playUrls.push(from.url);
|
||||
|
||||
try {
|
||||
const parses = [];
|
||||
const parse1 = from.player_info.parse.split(",");
|
||||
const parse2 = from.player_info.parse2.split(",");
|
||||
parses.push(...parse1, ...parse2);
|
||||
const parseUrls = parseUrlMap.get(flag) || [];
|
||||
for (const purl of parses) {
|
||||
if (purl.includes("http")) {
|
||||
const match = purl.match(parsePattern1);
|
||||
if (match) {
|
||||
parseUrls.push(match[0]);
|
||||
}
|
||||
} else if (purl.includes("//")) {
|
||||
const match = purl.match(parsePattern1);
|
||||
if (match) {
|
||||
parseUrls.push("http:" + match[0]);
|
||||
}
|
||||
} else {
|
||||
const urlMatch = URL.match(parsePattern2);
|
||||
if (urlMatch) {
|
||||
const match = URL.match(parsePattern1);
|
||||
if (match) {
|
||||
parseUrls.push(urlMatch[0] + match[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (purl.includes("..")) purl = purl.replace(/\.\./g, ".").trim();
|
||||
|
||||
if (purl && !parseUrls.includes(purl)) {
|
||||
parseUrls.push(purl);
|
||||
}
|
||||
}
|
||||
parseUrlMap.set(flag, parseUrls);
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
} else if (URLPattern1.matcher(URL).find()) {
|
||||
// Same implementation as the previous cases
|
||||
}
|
||||
|
||||
vod.vod_play_from = playFlags.join("$$$");
|
||||
vod.vod_play_url = playUrls.join("$$$");
|
||||
}
|
||||
|
||||
|
||||
async function play(flag, id, vipFlags) {
|
||||
try {
|
||||
// let parseUrls = parseUrlMap.get(flag);
|
||||
let parseUrls = siteJx[flag]; // custom sitejx
|
||||
if (!parseUrls) {
|
||||
if (siteJx.hasOwnProperty('*')) { // all jx
|
||||
parseUrls = siteJx['*'];
|
||||
} else {
|
||||
parseUrls = [];
|
||||
}
|
||||
}
|
||||
|
||||
if (parseUrls.length > 0) {
|
||||
const result = await getFinalVideo(flag, parseUrls, id);
|
||||
if (result !== null) {
|
||||
return JSON.stringify(result);
|
||||
}
|
||||
}
|
||||
|
||||
if (isVideo(id)) {
|
||||
const result = {
|
||||
parse: 0,
|
||||
playUrl: "",
|
||||
url: id
|
||||
};
|
||||
return JSON.stringify(result);
|
||||
} else {
|
||||
const result = {
|
||||
parse: 1,
|
||||
jx: "1",
|
||||
url: id
|
||||
};
|
||||
return JSON.stringify(result);
|
||||
}
|
||||
} catch (e) {
|
||||
// Handle any error here
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
async function search(key, quick) {
|
||||
try {
|
||||
const apiUrl = host;
|
||||
const url = getSearchUrl(apiUrl, encodeURIComponent(key));
|
||||
const json = await request(url, getHeaders(url));
|
||||
const obj = JSON.parse(json);
|
||||
let jsonArray = null;
|
||||
const videos = [];
|
||||
|
||||
if (obj.list instanceof Array) {
|
||||
jsonArray = obj.list;
|
||||
} else if (obj.data instanceof Object && obj.data.list instanceof Array) {
|
||||
jsonArray = obj.data.list;
|
||||
} else if (obj.data instanceof Array) {
|
||||
jsonArray = obj.data;
|
||||
}
|
||||
|
||||
if (jsonArray !== null) {
|
||||
for (const vObj of jsonArray) {
|
||||
if (vObj.vod_id) {
|
||||
const v = {
|
||||
vod_id: vObj.vod_id,
|
||||
vod_name: vObj.vod_name,
|
||||
vod_pic: vObj.vod_pic,
|
||||
vod_remarks: vObj.vod_remarks
|
||||
};
|
||||
videos.push(v);
|
||||
} else {
|
||||
const v = {
|
||||
vod_id: vObj.nextlink,
|
||||
vod_name: vObj.title,
|
||||
vod_pic: vObj.pic,
|
||||
vod_remarks: vObj.state
|
||||
};
|
||||
videos.push(v);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const result = { list: videos };
|
||||
return JSON.stringify(result);
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
|
||||
async function getFinalVideo(flag, parseUrls, url) {
|
||||
let htmlPlayUrl = "";
|
||||
for (const parseUrl of parseUrls) {
|
||||
if (parseUrl === "" || parseUrl === "null") {
|
||||
continue;
|
||||
}
|
||||
const playUrl = parseUrl + url;
|
||||
const content = await request(playUrl, null, 10000); // 10秒请求,能更好过滤webjx
|
||||
let tryJson = null;
|
||||
try {
|
||||
tryJson = jsonParse(url, content);
|
||||
} catch (error) { }
|
||||
|
||||
if (tryJson !== null && tryJson.hasOwnProperty("url") && tryJson.hasOwnProperty("header")) {
|
||||
tryJson.header = JSON.stringify(tryJson.header);
|
||||
return tryJson;
|
||||
}
|
||||
|
||||
if (content.includes("<html")) {
|
||||
let sniffer = false;
|
||||
for (const p of htmlVideoKeyMatch) {
|
||||
if (p.test(content)) {
|
||||
sniffer = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (sniffer) {
|
||||
htmlPlayUrl = parseUrl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (htmlPlayUrl !== "") { // 不支持sniffer
|
||||
const result = {
|
||||
parse: 0,
|
||||
playUrl: "",
|
||||
url: url
|
||||
};
|
||||
return JSON.stringify(result);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function jsonParse(input, json) {
|
||||
try {
|
||||
// 处理解析接口返回的报文,如果返回的报文中包含header信息,就加到返回值中
|
||||
let jsonPlayData = JSON.parse(json);
|
||||
// 处理293的解析结果url在data字段的解析
|
||||
if (jsonPlayData.hasOwnProperty("data") && typeof jsonPlayData.data === "object" && !jsonPlayData.hasOwnProperty("url")) {
|
||||
jsonPlayData = jsonPlayData.data;
|
||||
}
|
||||
|
||||
let url = jsonPlayData.url;
|
||||
|
||||
if (url.startsWith("//")) {
|
||||
url = "https:" + url;
|
||||
}
|
||||
if (!url.trim().startsWith("http")) {
|
||||
return null;
|
||||
}
|
||||
if (url === input) {
|
||||
if (isVip(url) || !isVideoFormat(url)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (isBlackVodUrl(input, url)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let headers = {};
|
||||
if (jsonPlayData.hasOwnProperty("header")) {
|
||||
headers = jsonPlayData.header;
|
||||
} else if (jsonPlayData.hasOwnProperty("Header")) {
|
||||
headers = jsonPlayData.Header;
|
||||
} else if (jsonPlayData.hasOwnProperty("headers")) {
|
||||
headers = jsonPlayData.headers;
|
||||
} else if (jsonPlayData.hasOwnProperty("Headers")) {
|
||||
headers = jsonPlayData.Headers;
|
||||
}
|
||||
|
||||
let ua = "";
|
||||
if (jsonPlayData.hasOwnProperty("user-agent")) {
|
||||
ua = jsonPlayData["user-agent"];
|
||||
} else if (jsonPlayData.hasOwnProperty("User-Agent")) {
|
||||
ua = jsonPlayData["User-Agent"];
|
||||
}
|
||||
if (ua.trim().length > 0) {
|
||||
headers["User-Agent"] = " " + ua;
|
||||
}
|
||||
|
||||
let referer = "";
|
||||
if (jsonPlayData.hasOwnProperty("referer")) {
|
||||
referer = jsonPlayData.referer;
|
||||
} else if (jsonPlayData.hasOwnProperty("Referer")) {
|
||||
referer = jsonPlayData.Referer;
|
||||
}
|
||||
if (referer.trim().length > 0) {
|
||||
headers["Referer"] = " " + referer;
|
||||
}
|
||||
|
||||
headers = fixJsonVodHeader(headers, input, url);
|
||||
|
||||
const taskResult = {
|
||||
header: headers,
|
||||
url: url,
|
||||
parse: "0"
|
||||
};
|
||||
|
||||
return taskResult;
|
||||
} catch (error) {
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function isVip(url) {
|
||||
try {
|
||||
let isVip = false;
|
||||
const host = new URL(url).hostname;
|
||||
const vipWebsites = ["iqiyi.com", "v.qq.com", "youku.com", "le.com", "tudou.com", "mgtv.com", "sohu.com", "acfun.cn", "bilibili.com", "baofeng.com", "pptv.com"];
|
||||
for (let b = 0; b < vipWebsites.length; b++) {
|
||||
if (host.includes(vipWebsites[b])) {
|
||||
if (vipWebsites[b] === "iqiyi.com") {
|
||||
// 爱奇艺需要特殊处理
|
||||
if (url.includes("iqiyi.com/a_") || url.includes("iqiyi.com/w_") || url.includes("iqiyi.com/v_")) {
|
||||
isVip = true;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
isVip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return isVip;
|
||||
} catch (e) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function isBlackVodUrl(input, url) {
|
||||
return url.includes("973973.xyz") || url.includes(".fit:");
|
||||
}
|
||||
|
||||
|
||||
function fixJsonVodHeader(headers, input, url) {
|
||||
if (headers === null) {
|
||||
headers = {};
|
||||
}
|
||||
|
||||
if (input.includes("www.mgtv.com")) {
|
||||
headers["Referer"] = " ";
|
||||
headers["User-Agent"] = " Mozilla/5.0";
|
||||
} else if (url.includes("titan.mgtv")) {
|
||||
headers["Referer"] = " ";
|
||||
headers["User-Agent"] = " Mozilla/5.0";
|
||||
} else if (input.includes("bilibili")) {
|
||||
headers["Referer"] = " https://www.bilibili.com/";
|
||||
headers["User-Agent"] = " " + Misc.UaWinChrome;
|
||||
}
|
||||
|
||||
return headers;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const snifferMatch = /http((?!http).){26,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)\?.*|http((?!http).){26,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg)|http((?!http).){26,}\/m3u8\?pt=m3u8.*|http((?!http).)*?default\.ixigua\.com\/.*|http((?!http).)*?cdn-tos[^\?]*|http((?!http).)*?\/obj\/tos[^\?]*|http.*?\/player\/m3u8play\.php\?url=.*|http.*?\/player\/.*?[pP]lay\.php\?url=.*|http.*?\/playlist\/m3u8\/\?vid=.*|http.*?\.php\?type=m3u8&.*|http.*?\/download.aspx\?.*|http.*?\/api\/up_api.php\?.*|https.*?\.66yk\.cn.*|http((?!http).)*?netease\.com\/file\/.*/;
|
||||
|
||||
function isVideoFormat(url) {
|
||||
if (snifferMatch.test(url)) {
|
||||
return !url.includes("cdn-tos") || !url.includes(".js");
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
function isVideo(url) {
|
||||
if (!url.includes(".mp4") || !url.includes(".m3u8")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function UA(url) {
|
||||
if (url.includes(".vod")) {
|
||||
return "okhttp/4.1.0";
|
||||
}
|
||||
}
|
||||
|
||||
function getCateUrl(URL) {
|
||||
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
return URL + "nav?token=";
|
||||
} else if (URL.includes(".vod")) {
|
||||
return URL + "/types";
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function getPlayUrlPrefix(URL) {
|
||||
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
return URL + "video_detail?id=";
|
||||
} else if (URL.includes(".vod")) {
|
||||
return URL + "/detail?vod_id=";
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function getRecommendUrl(URL) {
|
||||
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
return URL + "index_video?token=";
|
||||
} else if (URL.includes(".vod")) {
|
||||
return URL + "/vodPhbAll";
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function getFilterTypes(URL, typeExtend) {
|
||||
let str = "";
|
||||
|
||||
if (typeExtend !== null) {
|
||||
for (let key in typeExtend) {
|
||||
if (key === "class" || key === "area" || key === "lang" || key === "year") {
|
||||
try {
|
||||
|
||||
str += "筛选" + key + "+全部=+" + typeExtend[key].replace(/,/g, "+") + "\n";
|
||||
} catch (e) { }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (URL.includes(".vod")) {
|
||||
str += "\n" + "排序+全部=+最新=time+最热=hits+评分=score";
|
||||
} else if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
// Do nothing, leave the string as it is.
|
||||
} else {
|
||||
str = "分类+全部=+电影=movie+连续剧=tvplay+综艺=tvshow+动漫=comic+4K=movie_4k+体育=tiyu\n筛选class+全部=+喜剧+爱情+恐怖+动作+科幻+剧情+战争+警匪+犯罪+动画+奇幻+武侠+冒险+枪战+恐怖+悬疑+惊悚+经典+青春+文艺+微电影+古装+历史+运动+农村+惊悚+惊悚+伦理+情色+福利+三级+儿童+网络电影\n筛选area+全部=+大陆+香港+台湾+美国+英国+法国+日本+韩国+德国+泰国+印度+西班牙+加拿大+其他\n筛选year+全部=+2023+2022+2021+2020+2019+2018+2017+2016+2015+2014+2013+2012+2011+2010+2009+2008+2007+2006+2005+2004+2003+2002+2001+2000";
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
function getCateFilterUrlSuffix(URL) {
|
||||
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&limit=18&pg=#PN#";
|
||||
} else if (URL.includes(".vod")) {
|
||||
return "&class=筛选class&area=筛选area&lang=筛选lang&year=筛选year&by=排序&limit=18&page=#PN#";
|
||||
} else {
|
||||
return "&page=#PN#&area=筛选area&type=筛选class&start=筛选year";
|
||||
}
|
||||
}
|
||||
|
||||
function getCateFilterUrlPrefix(URL) {
|
||||
if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
return URL + "video?tid=";
|
||||
} else if (URL.includes(".vod")) {
|
||||
return URL + "?type=";
|
||||
} else {
|
||||
return URL + "?ac=list&class=";
|
||||
}
|
||||
}
|
||||
|
||||
function isBan(key) {
|
||||
return key === "伦理" || key === "情色" || key === "福利";
|
||||
}
|
||||
|
||||
function getSearchUrl(URL, KEY) {
|
||||
if (URL.includes(".vod")) {
|
||||
return URL + "?wd=" + KEY + "&page=";
|
||||
} else if (URL.includes("api.php/app") || URL.includes("xgapp")) {
|
||||
return URL + "search?text=" + KEY + "&pg=";
|
||||
} else if (urlPattern1.test(URL)) {
|
||||
return URL + "?ac=list&zm=" + KEY + "&page=";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
function findJsonArray(obj, match, result) {
|
||||
Object.keys(obj).forEach((k) => {
|
||||
try {
|
||||
const o = obj[k];
|
||||
if (k === match && Array.isArray(o)) {
|
||||
result.push(o);
|
||||
}
|
||||
if (typeof o === "object" && o !== null) {
|
||||
if (Array.isArray(o)) {
|
||||
o.forEach((item) => {
|
||||
if (typeof item === "object" && item !== null) {
|
||||
findJsonArray(item, match, result);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
findJsonArray(o, match, result);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function jsonArr2Str(array) {
|
||||
const strings = [];
|
||||
for (let i = 0; i < array.length; i++) {
|
||||
try {
|
||||
strings.push(array[i]);
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
return strings.join(",");
|
||||
}
|
||||
|
||||
function getHeaders(URL) {
|
||||
const headers = {};
|
||||
headers["User-Agent"] = UA(URL);
|
||||
return headers;
|
||||
}
|
||||
|
||||
function isJsonString(str) {
|
||||
try {
|
||||
JSON.parse(str);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
|
||||
+618
@@ -0,0 +1,618 @@
|
||||
import { Crypto, jinja2, _ } from './lib/cat.js';
|
||||
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
let cookie = '';
|
||||
let login = '';
|
||||
let vip = false;
|
||||
let extendObj = {};
|
||||
let bili_jct = '';
|
||||
let vod_audio_id = {
|
||||
30280: 192000,
|
||||
30232: 132000,
|
||||
30216: 64000,
|
||||
};
|
||||
|
||||
let vod_codec = {
|
||||
// 13: 'AV1',
|
||||
12: 'HEVC',
|
||||
7: 'AVC',
|
||||
};
|
||||
|
||||
const UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36';
|
||||
|
||||
async function request(reqUrl, ua, buffer) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: ua ? ua : { 'User-Agent': UA },
|
||||
timeout: 60000,
|
||||
buffer: buffer ? 1 : 0,
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function post(reqUrl, postData, ua, posttype) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'post',
|
||||
headers: ua ? ua : { 'User-Agent': UA },
|
||||
data: postData,
|
||||
timeout: 60000,
|
||||
postType: posttype,
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
function getHeaders() {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
};
|
||||
if (!_.isEmpty(cookie)) {
|
||||
headers.cookie = cookie;
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
async function getCookie() {
|
||||
let result = await req('https://www.bilibili.com', {
|
||||
method: 'get',
|
||||
headers: { 'User-Agent': UA },
|
||||
timeout: 60000,
|
||||
});
|
||||
const setCookieHeaders = result.headers['set-cookie'];
|
||||
cookie = setCookieHeaders.map((kk) => kk.split(';')[0] + ';').join('');
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
let extend = cfg.ext;
|
||||
|
||||
if (cfg.ext.hasOwnProperty('categories')) extend = cfg.ext.categories;
|
||||
if (cfg.ext.hasOwnProperty('cookie')) cookie = cfg.ext.cookie;
|
||||
if (cookie.startsWith('http')) cookie = await request(cookie);
|
||||
// 获取csrf
|
||||
const cookies = cookie.split(';');
|
||||
cookies.forEach(cookie => {
|
||||
if (cookie.includes('bili_jct')) {
|
||||
bili_jct = cookie.split('=')[1];
|
||||
}
|
||||
});
|
||||
|
||||
if (_.isEmpty(cookie)) await getCookie();
|
||||
let result = JSON.parse(await request('https://api.bilibili.com/x/web-interface/nav', getHeaders()));
|
||||
login = result.data.isLogin;
|
||||
vip = result.data.vipStatus;
|
||||
const ext = extend.split('#');
|
||||
const jsonData = [
|
||||
{
|
||||
key: 'order',
|
||||
name: '排序',
|
||||
value: [
|
||||
{ n: '综合排序', v: '0' },
|
||||
{ n: '最多点击', v: 'click' },
|
||||
{ n: '最新发布', v: 'pubdate' },
|
||||
{ n: '最多弹幕', v: 'dm' },
|
||||
{ n: '最多收藏', v: 'stow' },
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'duration',
|
||||
name: '时长',
|
||||
value: [
|
||||
{ n: '全部时长', v: '0' },
|
||||
{ n: '60分钟以上', v: '4' },
|
||||
{ n: '30~60分钟', v: '3' },
|
||||
{ n: '10~30分钟', v: '2' },
|
||||
{ n: '10分钟以下', v: '1' },
|
||||
],
|
||||
},
|
||||
];
|
||||
const newarr = [];
|
||||
const d = {};
|
||||
const sc = {
|
||||
type_name: "首页",
|
||||
type_id: "首页",
|
||||
land: 1,
|
||||
ratio: 1.33,
|
||||
}
|
||||
newarr.push(sc);
|
||||
for (const kk of ext) {
|
||||
const c = {
|
||||
type_name: kk,
|
||||
type_id: kk,
|
||||
land: 1,
|
||||
ratio: 1.33,
|
||||
};
|
||||
newarr.push(c);
|
||||
d[kk] = jsonData;
|
||||
}
|
||||
if (!_.isEmpty(bili_jct)) {
|
||||
const hc = {
|
||||
type_name: "历史记录",
|
||||
type_id: "历史记录",
|
||||
land: 1,
|
||||
ratio: 1.33,
|
||||
}
|
||||
newarr.push(hc);
|
||||
}
|
||||
extendObj = {
|
||||
classes: newarr,
|
||||
filter: d,
|
||||
};
|
||||
}
|
||||
|
||||
function home(filter) {
|
||||
try {
|
||||
const jSONObject = {
|
||||
class: extendObj.classes,
|
||||
};
|
||||
if (filter) {
|
||||
jSONObject.filters = extendObj.filter;
|
||||
}
|
||||
return JSON.stringify(jSONObject);
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
try {
|
||||
const list = [];
|
||||
const url = 'https://api.bilibili.com/x/web-interface/index/top/rcmd?ps=14&fresh_idx=1&fresh_idx_1h=1';
|
||||
|
||||
const response = await request(url, getHeaders());
|
||||
const responseData = JSON.parse(response);
|
||||
const vods = responseData.data.item;
|
||||
|
||||
for (const item of vods) {
|
||||
const vod = {};
|
||||
let imageUrl = item.pic;
|
||||
if (imageUrl.startsWith('//')) {
|
||||
imageUrl = 'https:' + imageUrl;
|
||||
}
|
||||
let cd = getFullTime(item.duration);
|
||||
|
||||
vod.vod_id = item.bvid;
|
||||
vod.vod_name = removeTags(item.title);
|
||||
vod.vod_pic = imageUrl;
|
||||
vod.vod_remarks = cd;
|
||||
vod.style = {
|
||||
type: 'rect',
|
||||
ratio: 1.33,
|
||||
},
|
||||
list.push(vod);
|
||||
}
|
||||
|
||||
const result = { list: list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) { }
|
||||
}
|
||||
|
||||
async function category(tid, page, filter, ext) {
|
||||
if (page < 1) page = 1;
|
||||
try {
|
||||
if (Object.keys(ext).length > 0 && ext.hasOwnProperty('tid') && ext['tid'].length > 0) {
|
||||
tid = ext['tid'];
|
||||
}
|
||||
let url = '';
|
||||
url = `https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=${encodeURIComponent(tid)}`;
|
||||
|
||||
if (Object.keys(ext).length > 0) {
|
||||
for (const k in ext) {
|
||||
if (k == 'tid') {
|
||||
continue;
|
||||
}
|
||||
url += `&${encodeURIComponent(k)}=${encodeURIComponent(ext[k])}`;
|
||||
}
|
||||
}
|
||||
|
||||
url += `&page=${encodeURIComponent(page)}`;
|
||||
|
||||
if (tid == "首页") {
|
||||
url = "https://api.bilibili.com/x/web-interface/index/top/rcmd?ps=14&fresh_idx=" + page + "&fresh_idx_1h=" + page;
|
||||
} else if (tid == "历史记录") {
|
||||
url = "https://api.bilibili.com/x/v2/history?pn=" + page;
|
||||
}
|
||||
|
||||
const data = JSON.parse(await request(url, getHeaders())).data;
|
||||
let items = data.result;
|
||||
if (tid == "首页") {
|
||||
items = data.item;
|
||||
} else if (tid == "历史记录") {
|
||||
items = data;
|
||||
}
|
||||
|
||||
const videos = [];
|
||||
for (const item of items) {
|
||||
const video = {};
|
||||
let pic = item.pic;
|
||||
if (pic.startsWith('//')) {
|
||||
pic = 'https:' + pic;
|
||||
}
|
||||
let cd = getFullTime(item.duration);
|
||||
|
||||
video.vod_remarks = cd;
|
||||
video.vod_id = item.bvid;
|
||||
video.vod_name = removeTags(item.title);
|
||||
video.vod_pic = pic;
|
||||
|
||||
video.style = {
|
||||
type: 'rect',
|
||||
ratio: 1.33,
|
||||
},
|
||||
videos.push(video);
|
||||
}
|
||||
|
||||
const result = {
|
||||
page: page,
|
||||
pagecount: data.numPages ?? (page + 1),
|
||||
limit: videos.length,
|
||||
total: videos.length * (page + 1),
|
||||
list: videos,
|
||||
};
|
||||
|
||||
return JSON.stringify(result);
|
||||
} catch (e) { }
|
||||
return null;
|
||||
}
|
||||
|
||||
async function detail(ids) {
|
||||
try {
|
||||
const bvid = ids;
|
||||
const detailUrl = `https://api.bilibili.com/x/web-interface/view?bvid=${bvid}`;
|
||||
|
||||
const detailData = JSON.parse(await request(detailUrl, getHeaders())).data;
|
||||
// 记录历史
|
||||
if (!_.isEmpty(bili_jct)) {
|
||||
const historyReport = 'https://api.bilibili.com/x/v2/history/report';
|
||||
let dataPost = {
|
||||
aid: detailData.aid,
|
||||
cid: detailData.cid,
|
||||
csrf: bili_jct,
|
||||
}
|
||||
await post(historyReport, dataPost, getHeaders(), 'form');
|
||||
}
|
||||
let cd = getFullTime(detailData.duration);
|
||||
const aid = detailData.aid;
|
||||
const video = {
|
||||
vod_id: bvid,
|
||||
vod_name: detailData.title,
|
||||
vod_pic: detailData.pic,
|
||||
type_name: detailData.tname,
|
||||
vod_year: '',
|
||||
vod_area: '',
|
||||
vod_remarks: cd,
|
||||
vod_actor: '',
|
||||
vod_director: '',
|
||||
vod_content: detailData.desc,
|
||||
};
|
||||
|
||||
const playurldata = 'https://api.bilibili.com/x/player/playurl?avid=' + aid + '&cid=' + detailData.cid + '&qn=127&fnval=4048&fourk=1';
|
||||
const playurldatas = JSON.parse(await request(playurldata, getHeaders()));
|
||||
|
||||
const playurldatalist = playurldatas.data;
|
||||
const accept_quality = playurldatalist.accept_quality;
|
||||
const accept_description = playurldatalist.accept_description;
|
||||
const qualitylist = [];
|
||||
const descriptionList = [];
|
||||
|
||||
for (let i = 0; i < accept_quality.length; i++) {
|
||||
if (!vip) {
|
||||
if (!login) {
|
||||
if (accept_quality[i] > 32) continue;
|
||||
} else {
|
||||
if (accept_quality[i] > 80) continue;
|
||||
}
|
||||
}
|
||||
descriptionList.push(base64Encode(accept_description[i]));
|
||||
qualitylist.push(accept_quality[i]);
|
||||
}
|
||||
|
||||
let treeMap = {};
|
||||
const jSONArray = detailData.pages;
|
||||
let playList = [];
|
||||
for (let j = 0; j < jSONArray.length; j++) {
|
||||
const jSONObject6 = jSONArray[j];
|
||||
const cid = jSONObject6.cid;
|
||||
const playUrl = j + '$' + aid + '+' + cid + '+' + qualitylist.join(':') + '+' + descriptionList.join(':');
|
||||
playList.push(playUrl);
|
||||
}
|
||||
treeMap['dash'] = playList.join('#');
|
||||
treeMap['mp4'] = playList.join('#');
|
||||
|
||||
const relatedUrl = 'https://api.bilibili.com/x/web-interface/archive/related?bvid=' + bvid;
|
||||
const relatedData = JSON.parse(await request(relatedUrl, getHeaders())).data;
|
||||
playList = [];
|
||||
for (let j = 0; j < relatedData.length; j++) {
|
||||
const jSONObject6 = relatedData[j];
|
||||
const cid = jSONObject6.cid;
|
||||
const title = jSONObject6.title;
|
||||
const aaid = jSONObject6.aid;
|
||||
const playUrl = title + '$' + aaid + '+' + cid + '+' + qualitylist.join(':') + '+' + descriptionList.join(':');
|
||||
playList.push(playUrl);
|
||||
}
|
||||
treeMap['相关'] = playList.join('#');
|
||||
|
||||
video.vod_play_from = Object.keys(treeMap).join("$$$");
|
||||
video.vod_play_url = Object.values(treeMap).join("$$$");
|
||||
|
||||
const list = [video];
|
||||
const result = { list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) { }
|
||||
return null;
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
try {
|
||||
const playHeaders = { Referer: 'https://www.bilibili.com', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36' };
|
||||
const ids = id.split('+');
|
||||
const aid = ids[0];
|
||||
const cid = ids[1];
|
||||
const qualityIds = ids[2].split(':');
|
||||
const qualityName = ids[3].split(':');
|
||||
if (flag == 'dash' || flag == '相关') {
|
||||
// dash mpd 代理
|
||||
const js2Base = await js2Proxy(true, siteType, siteKey, 'dash/', {});
|
||||
let urls = [];
|
||||
for (let i = 0; i < qualityIds.length; i++) {
|
||||
urls.push(base64Decode(qualityName[i]), js2Base + base64Encode(aid + '+' + cid + '+' + qualityIds[i]));
|
||||
}
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: urls,
|
||||
header: playHeaders,
|
||||
});
|
||||
} else if (flag == 'mp4') {
|
||||
// 直链
|
||||
let urls = [];
|
||||
for (let i = 0; i < qualityIds.length; i++) {
|
||||
const url = `https://api.bilibili.com/x/player/playurl?avid=${aid}&cid=${cid}&qn=${qualityIds[i]}&fourk=1`;
|
||||
const resp = JSON.parse(await request(url, getHeaders()));
|
||||
const data = resp.data;
|
||||
if (data.quality != qualityIds[i]) continue;
|
||||
let durl = data.durl[0].url;
|
||||
urls.push(base64Decode(qualityName[i]), durl);
|
||||
}
|
||||
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: urls,
|
||||
header: playHeaders,
|
||||
});
|
||||
} else {
|
||||
// 音频外挂
|
||||
let urls = [];
|
||||
let audios = [];
|
||||
for (let i = 0; i < qualityIds.length; i++) {
|
||||
const url = `https://api.bilibili.com/x/player/playurl?avid=${aid}&cid=${cid}&qn=${qualityIds[i]}&fnval=4048&fourk=1`;
|
||||
let resp = JSON.parse(await request(url, getHeaders()));
|
||||
const dash = resp.data.dash;
|
||||
const video = dash.video;
|
||||
const audio = dash.audio;
|
||||
for (let j = 0; j < video.length; j++) {
|
||||
const dashjson = video[j];
|
||||
if (dashjson.id == qualityIds[i]) {
|
||||
for (const key in vod_codec) {
|
||||
if (dashjson.codecid == key) {
|
||||
urls.push(base64Decode(qualityName[i]) + ' ' + vod_codec[key], dashjson.baseUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (audios.length == 0) {
|
||||
for (let j = 0; j < audio.length; j++) {
|
||||
const dashjson = audio[j];
|
||||
for (const key in vod_audio_id) {
|
||||
if (dashjson.id == key) {
|
||||
audios.push({
|
||||
title: _.floor(parseInt(vod_audio_id[key]) / 1024) + 'Kbps',
|
||||
bit: vod_audio_id[key],
|
||||
url: dashjson.baseUrl,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
audios = _.sortBy(audios, 'bit');
|
||||
}
|
||||
}
|
||||
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: urls,
|
||||
extra: {
|
||||
audio: audios,
|
||||
},
|
||||
header: playHeaders,
|
||||
});
|
||||
}
|
||||
} catch (e) { }
|
||||
return null;
|
||||
}
|
||||
|
||||
async function search(key, quick, pg) {
|
||||
let page = pg || 1;
|
||||
if (page == 0) page = 1;
|
||||
try {
|
||||
const ext = {
|
||||
duration: '0',
|
||||
};
|
||||
let resp = JSON.parse(await category(key, page, true, ext));
|
||||
const catVideos = resp.list;
|
||||
const pageCount = resp.pagecount;
|
||||
const videos = [];
|
||||
for (let i = 0; i < catVideos.length; ++i) {
|
||||
videos.push(catVideos[i]);
|
||||
}
|
||||
const result = {
|
||||
page: page,
|
||||
pagecount: pageCount,
|
||||
land: 1,
|
||||
ratio: 1.33,
|
||||
list: videos,
|
||||
};
|
||||
return JSON.stringify(result);
|
||||
} catch (e) { }
|
||||
return null;
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {
|
||||
let what = segments[0];
|
||||
let url = base64Decode(segments[1]);
|
||||
if (what == 'dash') {
|
||||
const ids = url.split('+');
|
||||
const aid = ids[0];
|
||||
const cid = ids[1];
|
||||
const str5 = ids[2];
|
||||
const urls = `https://api.bilibili.com/x/player/playurl?avid=${aid}&cid=${cid}&qn=${str5}&fnval=4048&fourk=1`;
|
||||
let videoList = '';
|
||||
let audioList = '';
|
||||
|
||||
let resp = JSON.parse(await request(urls, getHeaders()));
|
||||
const dash = resp.data.dash;
|
||||
const video = dash.video;
|
||||
const audio = dash.audio;
|
||||
|
||||
for (let i = 0; i < video.length; i++) {
|
||||
// if (i > 0) continue; // 只取一个
|
||||
const dashjson = video[i];
|
||||
if (dashjson.id == str5) {
|
||||
videoList += getDashMedia(dashjson);
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < audio.length; i++) {
|
||||
// if (i > 0) continue;
|
||||
const ajson = audio[i];
|
||||
for (const key in vod_audio_id) {
|
||||
if (ajson.id == key) {
|
||||
audioList += getDashMedia(ajson);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mpd = getDash(resp, videoList, audioList);
|
||||
|
||||
return JSON.stringify({
|
||||
code: 200,
|
||||
content: mpd,
|
||||
headers: {
|
||||
'Content-Type': 'application/dash+xml',
|
||||
},
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
code: 500,
|
||||
content: '',
|
||||
});
|
||||
}
|
||||
|
||||
function getDashMedia(dash) {
|
||||
try {
|
||||
let qnid = dash.id;
|
||||
const codecid = dash.codecid;
|
||||
const media_codecs = dash.codecs;
|
||||
const media_bandwidth = dash.bandwidth;
|
||||
const media_startWithSAP = dash.startWithSap;
|
||||
const media_mimeType = dash.mimeType;
|
||||
const media_BaseURL = dash.baseUrl.replace(/&/g, '&');
|
||||
const media_SegmentBase_indexRange = dash.SegmentBase.indexRange;
|
||||
const media_SegmentBase_Initialization = dash.SegmentBase.Initialization;
|
||||
const mediaType = media_mimeType.split('/')[0];
|
||||
let media_type_params = '';
|
||||
|
||||
if (mediaType == 'video') {
|
||||
const media_frameRate = dash.frameRate;
|
||||
const media_sar = dash.sar;
|
||||
const media_width = dash.width;
|
||||
const media_height = dash.height;
|
||||
media_type_params = `height='${media_height}' width='${media_width}' frameRate='${media_frameRate}' sar='${media_sar}'`;
|
||||
} else if (mediaType == 'audio') {
|
||||
for (const key in vod_audio_id) {
|
||||
if (qnid == key) {
|
||||
const audioSamplingRate = vod_audio_id[key];
|
||||
media_type_params = `numChannels='2' sampleRate='${audioSamplingRate}'`;
|
||||
}
|
||||
}
|
||||
}
|
||||
qnid += '_' + codecid;
|
||||
|
||||
return `<AdaptationSet lang="chi">
|
||||
<ContentComponent contentType="${mediaType}"/>
|
||||
<Representation id="${qnid}" bandwidth="${media_bandwidth}" codecs="${media_codecs}" mimeType="${media_mimeType}" ${media_type_params} startWithSAP="${media_startWithSAP}">
|
||||
<BaseURL>${media_BaseURL}</BaseURL>
|
||||
<SegmentBase indexRange="${media_SegmentBase_indexRange}">
|
||||
<Initialization range="${media_SegmentBase_Initialization}"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>`;
|
||||
} catch (e) {
|
||||
// Handle exceptions here
|
||||
}
|
||||
}
|
||||
|
||||
function getDash(ja, videoList, audioList) {
|
||||
const duration = ja.data.dash.duration;
|
||||
const minBufferTime = ja.data.dash.minBufferTime;
|
||||
return `<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" type="static" mediaPresentationDuration="PT${duration}S" minBufferTime="PT${minBufferTime}S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
|
||||
<Period duration="PT${duration}S" start="PT0S">
|
||||
${videoList}
|
||||
${audioList}
|
||||
</Period>
|
||||
</MPD>`;
|
||||
}
|
||||
|
||||
|
||||
function base64Encode(text) {
|
||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||
}
|
||||
|
||||
function base64Decode(text) {
|
||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||
}
|
||||
|
||||
|
||||
|
||||
function removeTags(input) {
|
||||
return input.replace(/<[^>]*>/g, '');
|
||||
}
|
||||
|
||||
function getFullTime(numberSec) {
|
||||
let totalSeconds = '';
|
||||
try {
|
||||
var timeParts = numberSec.split(":");
|
||||
var min = parseInt(timeParts[0]);
|
||||
var sec = parseInt(timeParts[1]);
|
||||
totalSeconds = min * 60 + sec;
|
||||
} catch (e) {
|
||||
totalSeconds = parseInt(numberSec);
|
||||
}
|
||||
if (isNaN(totalSeconds)) {
|
||||
return '无效输入';
|
||||
}
|
||||
if (totalSeconds >= 3600) {
|
||||
const hours = Math.floor(totalSeconds / 3600);
|
||||
const remainingSecondsAfterHours = totalSeconds % 3600;
|
||||
const minutes = Math.floor(remainingSecondsAfterHours / 60);
|
||||
const seconds = remainingSecondsAfterHours % 60;
|
||||
return `${hours}小时 ${minutes}分钟 ${seconds}秒`;
|
||||
} else {
|
||||
const minutes = Math.floor(totalSeconds / 60);
|
||||
const seconds = totalSeconds % 60;
|
||||
return `${minutes}分钟 ${seconds}秒`;
|
||||
}
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
proxy: proxy,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
import{Crypto,load,_}from"assets://js/lib/cat.js";let key="bilibili",url="",siteKey="",siteType=0;const UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",cookie={};async function request(reqUrl,referer,mth,data,hd){var headers={"User-Agent":UA,Cookie:_.map(cookie,(value,key)=>key+"="+value).join(";")},referer=(referer&&(headers.referer=encodeURIComponent(referer)),await req(reqUrl,{method:mth||"get",headers:headers,data:data,postType:"post"===mth?"form":""}));return referer.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype,url=cfg.ext}async function home(filter){return(await request(url)).replaceAll("1$/$1","1$/$0")}async function homeVod(){return"{}"}async function category(tid,pg,filter,extend){pg<=0&&(pg=1);let api=url+"?t="+tid+"&pg="+pg;return extend&&(tid=Object.entries(extend).map(([key,val]=entry)=>"&"+key+"="+val),api=(api+=tid)+("&f="+encodeURIComponent(JSON.stringify(extend)))),request(api)}async function detail(id){return request(url+"?ids="+id)}async function play(flag,id,flags){return request(url.replace("/bilibili","/play")+"?bvid="+id+"&from=open")}async function search(wd,quick){return request(url+"?wd="+wd)}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
|
||||
@@ -0,0 +1,136 @@
|
||||
import { _ } from './lib/cat.js';
|
||||
|
||||
let key = 'bookkan';
|
||||
let url = 'https://api.bookan.com.cn';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
return JSON.stringify({
|
||||
class: [
|
||||
{ type_id: '1305', type_name: '少年读物' },
|
||||
{ type_id: '1304', type_name: '儿童文学' },
|
||||
{ type_id: '1320', type_name: '国学经典' },
|
||||
{ type_id: '1306', type_name: '文艺少年' },
|
||||
{ type_id: '1309', type_name: '育儿心经' },
|
||||
{ type_id: '1310', type_name: '心理哲学' },
|
||||
{ type_id: '1307', type_name: '青春励志' },
|
||||
{ type_id: '1312', type_name: '历史小说' },
|
||||
{ type_id: '1303', type_name: '故事会' },
|
||||
{ type_id: '1317', type_name: '音乐戏剧' },
|
||||
{ type_id: '1319', type_name: '相声评书' },
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
pg = pg || 1;
|
||||
if (pg == 0) pg = 1;
|
||||
let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`);
|
||||
let data = JSON.parse(content).data;
|
||||
let books = [];
|
||||
for (const book of data.list) {
|
||||
books.push({
|
||||
book_id: book.id,
|
||||
book_name: book.name,
|
||||
book_pic: book.cover,
|
||||
book_remarks: book.extra.author,
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
page: data.current_page,
|
||||
pagecount: data.last_page,
|
||||
limit: 24,
|
||||
total: data.total,
|
||||
list: books,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`);
|
||||
let data = JSON.parse(content).data;
|
||||
|
||||
let book = {
|
||||
book_id: id,
|
||||
type_name: '',
|
||||
book_year: '',
|
||||
book_area: '',
|
||||
book_remarks: '',
|
||||
book_actor: '',
|
||||
book_director: '',
|
||||
book_content: '',
|
||||
};
|
||||
let us = _.map(data.list, function (b) {
|
||||
return formatPlayUrl(b.title) + '$' + b.file;
|
||||
}).join('#');
|
||||
book.volumes = '书卷';
|
||||
book.urls = us;
|
||||
|
||||
return JSON.stringify({
|
||||
list: [book],
|
||||
});
|
||||
}
|
||||
|
||||
function formatPlayUrl(name) {
|
||||
return name
|
||||
.trim()
|
||||
.replace(/<|>|《|》/g, '')
|
||||
.replace(/\$|#/g, ' ')
|
||||
.trim();
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
pg = pg || 1;
|
||||
if (pg == 0) pg = 1;
|
||||
let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`);
|
||||
let data = JSON.parse(content).data;
|
||||
let books = [];
|
||||
for (const book of data.list) {
|
||||
books.push({
|
||||
book_id: book.id,
|
||||
book_name: book.name,
|
||||
book_pic: book.cover,
|
||||
book_remarks: book.extra.author,
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
page: data.current_page,
|
||||
pagecount: data.last_page,
|
||||
limit: 20,
|
||||
total: data.total,
|
||||
list: books,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
import { load, _ } from './lib/cat.js';
|
||||
|
||||
let key = '童趣';
|
||||
let HOST = 'https://www.boosj.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
'Referer': HOST
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{ type_id: '', type_name: '全部' }, { type_id: 28, type_name: '辅食' }, { type_id: 582, type_name: '动画' }, { type_id: 3364, type_name: '儿童舞蹈' }, { type_id: 3366, type_name: '少儿英语' }, { type_id: 3367, type_name: '儿童歌曲' }, { type_id: 3622, type_name: '才艺' }, { type_id: 3782, type_name: '播视自制' }, { type_id: 3822, type_name: '故事' }, { type_id: 3842, type_name: '亲子教育' }, { type_id: 4402, type_name: '美术' }, { type_id: 4583, type_name: '其他' }, { type_id: 4762, type_name: '儿童游戏' }, { type_id: 4842, type_name: '识物' }, { type_id: 4843, type_name: '绘本' }, { type_id: 4844, type_name: '古诗' }, { type_id: 4845, type_name: '科普' }, { type_id: 5102, type_name: '儿童玩具' }, { type_id: 5142, type_name: '播视童趣儿童玩具' }];
|
||||
const filterObj = {};
|
||||
const jsonData = [
|
||||
{
|
||||
key: 'age',
|
||||
name: '年龄段',
|
||||
value: [
|
||||
{ n: '全部', v: '' },
|
||||
{ n: '6岁以上', v: '?p367=370' },
|
||||
{ n: '3~6岁', v: '?p367=369' },
|
||||
{ n: '0~3岁', v: '?p367=368' },
|
||||
],
|
||||
init: '',
|
||||
},
|
||||
{
|
||||
key: 'by',
|
||||
name: '排序',
|
||||
value: [
|
||||
{ n: '全部', v: '' },
|
||||
{ n: '最新发布', v: 'lately' },
|
||||
{ n: '最多播放', v: 'pop' },
|
||||
{ n: '最多评论', v: 'view' },
|
||||
],
|
||||
init: '',
|
||||
},
|
||||
];
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
filterObj[cls.type_id] = jsonData;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + '/search_res_3362__3364_1_.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('body div.bj-col4:has(h3)');
|
||||
let videos = _.map(items, (it) => {
|
||||
const a = $(it).find('a:first')[0];
|
||||
const img = $(it).find('img:first')[0];
|
||||
const remarks = $(it).find('span.played')[0];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: remarks.children[0].data || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof (pg) == 'undefined') pg = 1;
|
||||
const link = HOST + '/search_res_3362__' + tid + '_' + pg + '_' + (extend.by || '') + '.html' + (extend.age || '');
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('body div.bj-col4:has(h3)');
|
||||
let videos = _.map(items, (it) => {
|
||||
const a = $(it).find('a:first')[0];
|
||||
const img = $(it).find('img:first')[0];
|
||||
const remarks = $(it).find('span.played')[0];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: remarks.children[0].data || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.pub_paging > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 30,
|
||||
total: 30 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: "",
|
||||
};
|
||||
const playlist = ["点击播放" + "$" + vod.vod_id];
|
||||
vod.vod_play_from = "道长在线";
|
||||
vod.vod_play_url = playlist.join("#");
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const body = JSON.parse(await request('https://gslb.boosj.com/ipv2.json'));
|
||||
body._id = id.match(/\d+/)[0];
|
||||
const json = JSON.parse(await request(buildUrl(body.gslb, body)));
|
||||
const purl = json.url + '?' + json.t
|
||||
// console.debug('童趣purl =====>' + purl); // js_debug.log
|
||||
let headers = {
|
||||
'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 9; 22081212C Build/PQ3B.190801.002)',
|
||||
};
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: purl,
|
||||
header: headers,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
var data = JSON.parse(await request('https://search.boosj.com/m_ajax?q=' + wd + '&p=' + pg + '&typeId=3362')).body;
|
||||
let videos = _.map(data.result, (it) => {
|
||||
return {
|
||||
vod_id: it.playUrl,
|
||||
vod_name: it.resourceName,
|
||||
vod_pic: it.imageUrl,
|
||||
vod_remarks: it.clickNumStr || '',
|
||||
}
|
||||
});
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: data.pageCount,
|
||||
limit: 30,
|
||||
total: data.rowCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'path';
|
||||
import uglifyjs from 'uglify-js';
|
||||
|
||||
const copySpider = ['app', 'kunyu77_open', 'alist_open'];
|
||||
|
||||
const root = process.cwd();
|
||||
|
||||
const src = path.join(root);
|
||||
const out = path.join(root, 'dist');
|
||||
|
||||
function minify(s, d) {
|
||||
var jsContent = fs.readFileSync(s).toString();
|
||||
jsContent = jsContent.replace('./lib/cat.js', 'assets://js/lib/cat.js');
|
||||
jsContent = jsContent.replace('./cat.js', 'assets://js/lib/cat.js');
|
||||
jsContent = uglifyjs.minify(jsContent, {
|
||||
mangle: false,
|
||||
});
|
||||
fs.writeFileSync(d, jsContent.code);
|
||||
}
|
||||
|
||||
function listAllFiles(dirPath, arrayOfFiles) {
|
||||
var files = fs.readdirSync(dirPath);
|
||||
|
||||
arrayOfFiles = arrayOfFiles || [];
|
||||
|
||||
files.forEach(function (file) {
|
||||
if (fs.statSync(dirPath + '/' + file).isDirectory()) {
|
||||
arrayOfFiles = listAllFiles(dirPath + '/' + file, arrayOfFiles);
|
||||
} else {
|
||||
arrayOfFiles.push(path.join(dirPath, '/', file));
|
||||
}
|
||||
});
|
||||
|
||||
return arrayOfFiles;
|
||||
}
|
||||
|
||||
function src2Out() {
|
||||
if (fs.existsSync(out)) fs.rmSync(out, { recursive: true, force: true });
|
||||
|
||||
fs.mkdirSync(out, { recursive: true });
|
||||
const libSrc = path.join(src, 'lib');
|
||||
const libOut = path.join(out, 'lib');
|
||||
fs.mkdirSync(libOut, { recursive: true });
|
||||
const libs = listAllFiles(libSrc);
|
||||
for (let index = 0; index < libs.length; index++) {
|
||||
const element = libs[index];
|
||||
const relative = path.relative(libSrc, element);
|
||||
minify(element, path.join(libOut, relative));
|
||||
}
|
||||
|
||||
for (const sp of copySpider) {
|
||||
minify(path.join(src, sp + '.js'), path.join(out, sp + '.js'));
|
||||
}
|
||||
}
|
||||
|
||||
src2Out();
|
||||
|
||||
fs.copyFileSync(path.join(src, 'config_open.json'), path.join(out, 'config_open.json'));
|
||||
|
||||
console.log('done');
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1BNEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lCHB1c2gOdHlwZV9pZBJzdHJpbmdpZnkOZmlsdGVycwR7fQZ0aWQEcGcMZXh0ZW5kDHZpZGVvcyA/YWM9dmlkZW9saXN0JnQ9CCZwZz0IbGlzdAx2b2RfaWQQdm9kX25hbWUOdm9kX3BpYxZ2b2RfcmVtYXJrcxBwYXJzZUludAhwYWdlEnBhZ2Vjb3VudApsaW1pdAp0b3RhbARpZAZ2b2QkP2FjPXZpZGVvbGlzdCZpZHM9EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEAD6gDAAEAqgMADgAGAaABAAAAARAKSwCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAm2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAcYDDQGoAw4BCOg0vgBfBgC+AV8HAL4CXwgAvgNfCQC+BF8KAL4FXwsAvgZfDAC+B18NAL4IXw4AvglfDwApv+Cz4QTkAAAA4r9fBAAmAABfBQAppAMBDAEANgYNDSEXAAaoAg5iBgG2AwEAAQIEAGMBygMAAQCsAwEIrgMCCLIDBAi0AwUIz0HmAAAAEWYAAA7PQecAAAARZgEADs9B6AAAAJcESAAAAKnoDs9B6AAAABFmAgAO6jDPQegAAACXBEkAAACp6CHPQegAAABB6QAAABFmAgAOz0HoAAAAQdoAAAARZgMADgYupAMJCAM6Ok46WFNUDkMGAbgDAAEAAwEAFgHUAwEAILADAwhhAAALx2IAAATrAAAAcWUAAEliAAAopAMUAxINRA5iBgG6AwEBAQQBAB0C0gMAAQDYAwEAILgDBwBhAAA47QAAAM8L2+xM7gAAAO6Lx2IAAEHvAAAALqQDGgQSJiYSDmIGAbwDAQcBBwQA5QEI4AMAAQDiAwEAMOQDAQEw5gMBAjDoAwEDMOoDAQQg7AMBBSDuAwIGILIDBAi6AwgAqgMADLQDBQhhBQBhBABhAwBhAgBhAQBhAABlAADH3GIAAO2LyDiYAAAAQvgAAABiAQAkAQDJYgIAQR4AAADKJgAAwQQLwQVhBgBiAwB96nnBBmUCAEL5AAAAZQMAJAEAlug/ZQMAQvoAAABiBgBB+wAAACQBAOhRYgQAQvwAAAALYgYAQf0AAABM/QAAAGIGAEH7AAAATPsAAAAkAQAO6ihiBABC/AAAAAtiBgBB/QAAAEz9AAAAYgYAQfsAAABM+wAAACQBAA6AAOiFDoM4mAAAAEL+AAAAC2IEAEweAAAAYgUATP8AAAAkAQAupAMiEV0XJlgwHBI6WGzHDcchOisrDmIGAb4DAAAAAQAABgAEAAEAAC6kAzgBAw5iBgHAAwQFBAcCAPUBCYIEAAEAhAQAAQDgAwABAIYEAAEA4gMBADDkAwEBMOYDAQIwiAQBAyDuAwMEILIDBAi6AwgAYQMAYQIAYQEAYQAA0DhFAAAAqRHpBQ7Qs6ToA7TUZQAABAUBAACdz50EBgEAAJ3QncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMkmAADKYQQAYgIAQQcBAAB96kTBBGIDAEL8AAAAC2IEAEEIAQAATAgBAABiBABBCQEAAEwJAQAAYgQAQQoBAABMCgEAAGIEAEELAQAATAsBAAAkAQAOgADoug6DOJgAAABC/gAAAAs4DAEAANDtTA0BAABiAgBBDgEAAEwOAQAAOAwBAABiAgBBDwEAAO1MDwEAAGICAEEQAQAATBABAABiAwBMBwEAACQBAC6kAz0UP11nJlgXUzBEREREFyM6P0RiRCsOYgYBwgMBBQEEAwCcAgaiBAABAOIDAQAw5AMBATDmAwECMO4DAQMwpAQBBCCyAwQIugMIAKoDAAxhBABhAwBhAgBhAQBhAABlAAAEEwEAAJ3PncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMliAgBBBwEAALNHymUCAEL5AAAAYgMAJAEA6AcEAAEAAC4LYgMAQQgBAABMCAEAAGIDAEEJAQAATAkBAABiAwBB+wAAAEz7AAAAYgMAQQoBAABMCgEAAGIDAEEUAQAATBQBAABiAwBBFQEAAEwVAQAAYgMAQRYBAAAR6QMOv0wWAQAAYgMAQRcBAAAR6QMOv0wXAQAAYgMAQQsBAAAR6QMOv0wLAQAAYgMAQRgBAABMGAEAAGIDAEEZAQAATBkBAABiAwBBGgEAAEwaAQAAwQQ4mAAAAEL+AAAAC2IEACYBAEwHAQAAJAEALqQDVhhOPyZYOlMcCAhERERERERdXV1EREQOOjoOYgYBxAMDAAMEAAAbA7YEAAEAogQAAQDaAQABADiYAAAAQv4AAAALs0z4AAAA0EzpAAAAJAEALqQDcwQDOiEhDmIGAcYDAwUDBwIA3AEIuAQAAQC6BAABAIQEAAEA4gMBADDkAwEBMOYDAQIwiAQBAyCkBAMEMLIDBAi6AwgAYQMAYQIAYQEAYQAA0ThFAAAAqRHpBQ7Rs6ToA7TVZQAABB4BAACdz50EBgEAAJ3RncfcYgAA7YvIOJgAAABC+AAAAGIBACQBAMkmAADKYQQAYgIAQQcBAAB96kTBBGIDAEL8AAAAC2IEAEEIAQAATAgBAABiBABBCQEAAEwJAQAAYgQAQQoBAABMCgEAAGIEAEELAQAATAsBAAAkAQAOgADoug6DOJgAAABC/gAAAAs4DAEAAGICAEENAQAA7UwNAQAAYgIAQQ4BAABMDgEAAGIDAEwHAQAAJAEALqQDexI/XWcmWBdTMEREREQXIjpiRCsOQwYBqAMAAAACBwAyALYDBgC8AwkAvgMKAMADCwDCAwwAxAMNAMYDDgAL20zbAAAA3EzeAAAA3UzfAAAA3kzgAAAAXgQATOEAAABeBQBM4gAAAF4GAEzjAAAAKKQDkQEJAwghISEhKysr
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1BMEGNhaWppLmpzGC4vbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgJfDnNpdGVLZXkQc2l0ZVR5cGUEVUEOYmFzZVVybAhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAxoZWFkZXIUVXNlci1BZ2VudAZ1cmwGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlEHR5cGVfcGlkCHB1c2gOdHlwZV9pZBJ0eXBlX25hbWUSc3RyaW5naWZ5DmZpbHRlcnMEe30GdGlkBHBnDGV4dGVuZAx2aWRlb3MgP2FjPXZpZGVvbGlzdCZ0PQgmcGc9CGxpc3QMdm9kX2lkEHZvZF9uYW1lDnZvZF9waWMWdm9kX3JlbWFya3MQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwEaWQGdm9kJD9hYz12aWRlb2xpc3QmaWRzPQ5pc0VtcHR5EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEADqgDAAEAqgMADgAGAaABAAAAAQ8KRQCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAG2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAagDDQEI6DS+AF8FAL4BXwYAvgJfBwC+A18IAL4EXwkAvgVfCgC+Bl8LAL4HXwwAvghfDQC+CV8OACm/4LPhBOMAAADiv18EACmkAwELAQA2Bg0NIQAElgIOYgYBtAMBAAECAwAjAcgDAAEArAMBCK4DAgiyAwQIz0HlAAAAEWYAAA7PQeYAAAARZgEADs9B5wAAABFmAgAOBi6kAwgEAzo6Og5DBgG2AwABAAMBABYB0AMBACCwAwMIYQAAC8diAAAE6QAAAHFlAABJYgAAKKQDDgMSDUQOYgYBuAMBAQEEAQAdAtQDAAEA1gMBACC2AwYAYQAAOOwAAADPC9vsTO0AAADui8diAABB7gAAAC6kAxQEEiYmEg5iBgG6AwEHAQcCAKIBCN4DAAEA4AMBADDiAwEBMOQDAQIw5gMBAzDoAwEEIOoDAQUg7AMCBiCyAwQIuAMHAGEFAGEEAGEDAGECAGEBAGEAAGUAAMfcYgAA7YvIOJgAAABC9wAAAGIBACQBAMliAgBBHgAAAMomAADBBAvBBWEGAGIDAH3qNsEGYgYAQfgAAACzqugoYgQAQvkAAAALYgYAQfoAAABM+gAAAGIGAEH7AAAATPsAAAAkAQAOgADoyA6DOJgAAABC/AAAAAtiBABMHgAAAGIFAEz9AAAAJAEALqQDHA5dFyZYMBwSOj/HITorKw5iBgG8AwAAAAEAAAYABP4AAAAupAMuAQMOYgYBvgMEBQQHAgDqAQn+AwABAIAEAAEA3gMAAQCCBAABAOADAQAw4gMBATDkAwECMIQEAQMg7AMDBCCyAwQIuAMHAGEDAGECAGEBAGEAANCzpOgDtNRlAAAEAwEAAJ3PnQQEAQAAndCdx9xiAADti8g4mAAAAEL3AAAAYgEAJAEAySYAAMphBABiAgBBBQEAAH3qRMEEYgMAQvkAAAALYgQAQQYBAABMBgEAAGIEAEEHAQAATAcBAABiBABBCAEAAEwIAQAAYgQAQQkBAABMCQEAACQBAA6AAOi6DoM4mAAAAEL8AAAACzgKAQAA0O1MCwEAAGICAEEMAQAATAwBAAA4CgEAAGICAEENAQAA7UwNAQAAYgIAQQ4BAABMDgEAAGIDAEwFAQAAJAEALqQDMxQ/JmcmWBdTMEREREQXIzo/RGJEKw5iBgHAAwEFAQQDAJwCBp4EAAEA4AMBADDiAwEBMOQDAQIw7AMBAzCgBAEEILIDBAi4AwcAqgMADGEEAGEDAGECAGEBAGEAAGUAAAQRAQAAnc+dx9xiAADti8g4mAAAAEL3AAAAYgEAJAEAyWICAEEFAQAAs0fKZQIAQhIBAABiAwAkAQDoBwT+AAAALgtiAwBBBgEAAEwGAQAAYgMAQQcBAABMBwEAAGIDAEH7AAAATPsAAABiAwBBCAEAAEwIAQAAYgMAQRMBAABMEwEAAGIDAEEUAQAATBQBAABiAwBBFQEAABHpAw6/TBUBAABiAwBBFgEAABHpAw6/TBYBAABiAwBBCQEAABHpAw6/TAkBAABiAwBBFwEAAEwXAQAAYgMAQRgBAABMGAEAAGIDAEEZAQAATBkBAADBBDiYAAAAQvwAAAALYgQAJgEATAUBAAAkAQAupANMGE4/Jlg6UxwICERERERERF1dXURERA46Og5iBgHCAwMAAwQAABsDtAQAAQCeBAABANoBAAEAOJgAAABC/AAAAAuzTPcAAADQTOoAAAAkAQAupANpBAM6ISEOYgYBxAMDBQMHAgDRAQi2BAABALgEAAEAgAQAAQDgAwEAMOIDAQEw5AMBAjCEBAEDIKAEAwQwsgMECLgDBwBhAwBhAgBhAQBhAADRs6ToA7TVZQAABB0BAACdz50EBAEAAJ3RncfcYgAA7YvIOJgAAABC9wAAAGIBACQBAMkmAADKYQQAYgIAQQUBAAB96kTBBGIDAEL5AAAAC2IEAEEGAQAATAYBAABiBABBBwEAAEwHAQAAYgQAQQgBAABMCAEAAGIEAEEJAQAATAkBAAAkAQAOgADoug6DOJgAAABC/AAAAAs4CgEAAGICAEELAQAA7UwLAQAAYgIAQQwBAABMDAEAAGIDAEwFAQAAJAEALqQDcRI/JmcmWBdTMEREREQXIjpiRCsOQwYBqAMAAAACBwAyALQDBQC6AwgAvAMJAL4DCgDAAwsAwgMMAMQDDQAL20zaAAAA3EzdAAAA3UzeAAAA3kzfAAAAXgQATOAAAABeBQBM4QAAAF4GAEziAAAAKKQDhwEJAwghISEhKysr
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
// 无搜索功能
|
||||
import { _ } from './lib/cat.js';
|
||||
let key = '视聚场';
|
||||
let HOST = 'http://api.cntv.cn';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
},
|
||||
});
|
||||
return res.content
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{ type_id: "TOPC1451528971114112", type_name: "新闻联播" }, { type_id: "TOPC1451558976694518", type_name: "焦点访谈" }, { type_id: "TOPC1451464665008914", type_name: "今日说法" }, { type_id: "TOPC1451378757637200", type_name: "等着我" }, { type_id: "TOPC1451559129520755", type_name: "新闻直播间" }, { type_id: "TOPC1451540328102649", type_name: "海峡两岸" }, { type_id: "TOPC1451530382483536", type_name: "天网" }, { type_id: "TOPC1451540389082713", type_name: "今日关注" }, { type_id: "TOPC1451557893544236", type_name: "探索·发现" }, { type_id: "TOPC1665739007799851", type_name: "高端访谈" }, { type_id: "TOPC1451557052519584", type_name: "百家讲坛" }, { type_id: "TOPC1451464884159276", type_name: "开讲啦" }, { type_id: "TOPC1451464884159276", type_name: "故事里的中国" }, { type_id: "TOPC1514182710380601", type_name: "对话" }, { type_id: "TOPC1451559038345600", type_name: "面对面" }, { type_id: "TOPC1451378967257534", type_name: "动物世界" }, { type_id: "TOPC1451558190239536", type_name: "走进科学" }, { type_id: "TOPC1451525103989666", type_name: "人与自然" }, { type_id: "TOPC1451557421544786", type_name: "地理·中国" }, { type_id: "TOPC1451541349400938", type_name: "远方的家" }, { type_id: "TOPC1451558150787467", type_name: "自然传奇" }, { type_id: "TOPC1451534366388377", type_name: "是真的吗" }, { type_id: "TOPC1451467630488780", type_name: "星光大道" }, { type_id: "TOPC1451557646802924", type_name: "健康之路" }, { type_id: "TOPC1451559025546574", type_name: "动画大放映" }, { type_id: "TOPC1451378857272262", type_name: "第一动画乐园" }, { type_id: "TOPC1451541414450906", type_name: "精彩音乐汇" }, { type_id: "TOPC1451534421925242", type_name: "音乐厅" }, { type_id: "TOPC1451541994820527", type_name: "民歌·中国" }, { type_id: "TOPC1575253587571324", type_name: "跟着书本去旅行" }, { type_id: "TOPC1451354597100320", type_name: "中国电影报道" }, { type_id: "TOPC1451469943519994", type_name: "星推荐" }, { type_id: "TOPC1571217727564820", type_name: "方圆剧阵" }, { type_id: "TOPC1451558856402351", type_name: "空中剧院" }, { type_id: "TOPC1650782829200997", type_name: "正大综艺" }, { type_id: "TOPC1451550970356385", type_name: "体坛快讯" }, { type_id: "TOPC1451530259915198", type_name: "第一时间" }, { type_id: "TOPC1451465894294259", type_name: "开门大吉" }, { type_id: "TOPC1451464884159276", type_name: "开讲啦" }, { type_id: "TOPC1451558858788377", type_name: "共同关注" }, { type_id: "TOPC1451527941788652", type_name: "军事报道" }, { type_id: "TOPC1451558819463311", type_name: "新闻调查" }, { type_id: "TOPC1451559097947700", type_name: "新闻30分" }, { type_id: "TOPC1451559066181661", type_name: "新闻1+1" }, { type_id: "TOPC1451540448405749", type_name: "今日亚洲" }, { type_id: "TOPC1451559129520755", type_name: "新闻直播间" }, { type_id: "TOPC1451558428005729", type_name: "24小时" }, { type_id: "TOPC1451539894330405", type_name: "中国新闻" }, { type_id: "TOPC1451558779639282", type_name: "午夜新闻" }, { type_id: "TOPC1451558496100826", type_name: "朝闻天下" }, { type_id: "TOPC1451528792881669", type_name: "晚间新闻" }, { type_id: "TOPC1451559180488841", type_name: "新闻周刊" }, { type_id: "TOPC1601362002656197", type_name: "经济半小时" }, { type_id: "TOPC1451533652476962", type_name: "经济大讲堂" }, { type_id: "TOPC1453100395512779", type_name: "正点财经" }, { type_id: "TOPC1451546588784893", type_name: "生活圈" }, { type_id: "TOPC1451526037568184", type_name: "生活提示" }, { type_id: "TOPC1451558532019883", type_name: "东方时空" }, { type_id: "TOPC1451533782742171", type_name: "经济信息联播" }, { type_id: "TOPC1571034705435323", type_name: "今日环球" }, { type_id: "TOPC1451543462858283", type_name: "一线" }];
|
||||
const filterObj = {};
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
})
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=TOPC1451558856402351&n=10&sort=desc&p=1&mode=0&serviceId=tvcctv'));
|
||||
let videos = _.map(data.data.list, (it) => {
|
||||
return {
|
||||
vod_id: it.guid,
|
||||
vod_name: it.title,
|
||||
vod_pic: it.image,
|
||||
vod_remarks: it.time || '',
|
||||
}
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof pg == 'undefined') pg = 1;
|
||||
const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + pg + '&mode=0&serviceId=tvcctv'));
|
||||
let videos = _.map(data.data.list, (it) => {
|
||||
return {
|
||||
vod_id: it.guid,
|
||||
vod_name: it.title,
|
||||
vod_pic: it.image,
|
||||
vod_remarks: it.time || '',
|
||||
}
|
||||
});
|
||||
const pgChk = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + (parseInt(pg) + 1) + '&mode=0&serviceId=tvcctv')).data.list;
|
||||
const pgCount = pgChk.length > 0 ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: parseInt(pgCount),
|
||||
limit: 10,
|
||||
total: parseInt(data.total),
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: '',
|
||||
};
|
||||
const playlist = ['点击播放' + '$' + 'https://hls.cntv.myhwcdn.cn/asp/hls/2000/0303000a/3/default/' + id + '/2000.m3u8'];
|
||||
vod.vod_play_from = key;
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
// console.debug('视聚场 id =====>' + id); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
})
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
return '{}'
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,680 @@
|
||||
{
|
||||
"video": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "wogg",
|
||||
"name": "🎬️乐享汇fans丨玩偶4K",
|
||||
"type": 3,
|
||||
"api": "wogg_open.js",
|
||||
"ext": "079bdf65cdfb43b8af75c54506e4a40d"
|
||||
},
|
||||
{
|
||||
"key": "ytvip",
|
||||
"name": "🎬️乐享汇fans丨YT4K",
|
||||
"type": 3,
|
||||
"api": "yt_open.js",
|
||||
"ext": "http://ytcms.lyyytv.cn/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "subaibai",
|
||||
"name": "🎬️乐享汇fans丨素白",
|
||||
"type": 3,
|
||||
"api": "subaibai_open.js"
|
||||
},
|
||||
{
|
||||
"key": "kkys",
|
||||
"name": "🎬️乐享汇fans丨快看",
|
||||
"type": 3,
|
||||
"api": "kkys_open.js"
|
||||
},
|
||||
{
|
||||
"key": "ikanbot",
|
||||
"name": "🎬️乐享汇fans丨爱看",
|
||||
"type": 3,
|
||||
"api": "ikanbot_open.js"
|
||||
},
|
||||
{
|
||||
"key": "libvio",
|
||||
"name": "🎬️乐享汇fans丨立播",
|
||||
"type": 3,
|
||||
"api": "libvio_open.js"
|
||||
},
|
||||
{
|
||||
"key": "ng",
|
||||
"name": "🎬️乐享汇fans丨南瓜",
|
||||
"type": 3,
|
||||
"api": "ng_open.js"
|
||||
},
|
||||
{
|
||||
"key": "czzy",
|
||||
"name": "🎬️乐享汇fans丨厂长①",
|
||||
"type": 3,
|
||||
"api": "czzy_open.js"
|
||||
},
|
||||
{
|
||||
"key": "czzy2",
|
||||
"name": "🎬️乐享汇fans丨厂长②",
|
||||
"type": 3,
|
||||
"api": "czzy2_open.js"
|
||||
},
|
||||
{
|
||||
"key": "czzy3",
|
||||
"name": "🎬️乐享汇fans丨厂长③",
|
||||
"type": 3,
|
||||
"api": "czzy3_open.js"
|
||||
},
|
||||
{
|
||||
"key": "zxzj",
|
||||
"name": "🎬️乐享汇fans丨在家",
|
||||
"type": 3,
|
||||
"api": "zxzj_open.js"
|
||||
},
|
||||
{
|
||||
"key": "kunyu77",
|
||||
"name": "🎬️乐享汇fans丨七七",
|
||||
"type": 3,
|
||||
"api": "kunyu77_open.js"
|
||||
},
|
||||
{
|
||||
"key": "caiji",
|
||||
"name": "🎬️乐享汇fans | 采集",
|
||||
"type": 3,
|
||||
"api": "caiji_open.js",
|
||||
"ext": "https://ikunzyapi.com/api.php/provide/vod"
|
||||
},
|
||||
{
|
||||
"key": "69mj",
|
||||
"name": "🎨乐享汇fans丨美剧",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://www.69mj.com/xgapp.php/v2/"
|
||||
},
|
||||
{
|
||||
"key": "aidi",
|
||||
"name": "🎨乐享汇fans丨爱迪",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://api123.adys.app/xgapp.php/v3/"
|
||||
},
|
||||
{
|
||||
"key": "yaya",
|
||||
"name": "🎨乐享汇fans丨鸭鸭",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://yayayaaapp.ynf.icu/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "kuku",
|
||||
"name": "🎨乐享汇fans丨酷酷",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://cms.realdou.cn:35264/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "beijihu",
|
||||
"name": "🎨乐享汇fans丨极狐",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://www.kuin.one/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "kuk",
|
||||
"name": "🎨乐享汇fans丨天堂",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://dytt996.com/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "kku",
|
||||
"name": "🎨乐享汇fans丨酷影",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://www.gsjtlxy.top/xgapp.php/v3/"
|
||||
},
|
||||
{
|
||||
"key": "kkku",
|
||||
"name": "🎨乐享汇fans丨琦琦",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://mp4.ghlyys.com/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "ruidou",
|
||||
"name": "🎨乐享汇fans丨锐豆",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://ys.realdou.cn:2683/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "yiying",
|
||||
"name": "🎨乐享汇fans丨壹影",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://22222.yiyingys.asia/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "mayi",
|
||||
"name": "🎨乐享汇fans丨蚂蚁",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://wushutvcms.byzz.top/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "sukan",
|
||||
"name": "🎨乐享汇fans丨速看",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://sk100.tv/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "midi",
|
||||
"name": "🎨乐享汇fans丨明帝",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://ys.md214.cn/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "dadou",
|
||||
"name": "🎨乐享汇fans丨大豆",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://www.dadou.cm/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "qtw",
|
||||
"name": "🎨乐享汇fans丨彩虹",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://ys.qtw.asia/lvdou_api.php/v1.vod"
|
||||
},
|
||||
{
|
||||
"key": "miniku",
|
||||
"name": "🎨乐享汇fans丨迷你",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://www.miniku.cc/xgapp.php/v1/"
|
||||
},
|
||||
{
|
||||
"key": "天天视频",
|
||||
"name": "🎨乐享汇fans丨天天",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://ttsp.live/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "玉米",
|
||||
"name": "🎨乐享汇fans丨玉米",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "http://caiji.ghlyys.com/yumi/api.php/app/"
|
||||
},
|
||||
{
|
||||
"key": "1080dyw",
|
||||
"name": "🎨乐享汇fans丨电影网",
|
||||
"type": 3,
|
||||
"api": "appysv2.js",
|
||||
"ext": "https://www.1080dyw.cc/api.php/v1.vod"
|
||||
},
|
||||
{
|
||||
"key": "xinlang",
|
||||
"name": "📺乐享汇fans | 新浪",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.xinlangapi.com/xinlangapi.php/provide/vod/from/xlm3u8"
|
||||
},
|
||||
{
|
||||
"key": "bdzy",
|
||||
"name": "📺乐享汇fans | 百度",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.apibdzy.com/api.php/provide/vod/from/dbm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "bfzy",
|
||||
"name": "📺乐享汇fans | 暴风",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://bfzyapi.com/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "languang",
|
||||
"name": "📺乐享汇fans | 蓝光",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://www.zzrhgg.com/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "lehuo",
|
||||
"name": "📺乐享汇fans | 乐活",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://cj.vodimg.top/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "piaoling",
|
||||
"name": "📺乐享汇fans | 飘零",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://p2100.net/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "shenmajuhe",
|
||||
"name": "📺乐享汇fans | 神马",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://img.smdyw.top/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "yingtu",
|
||||
"name": "📺乐享汇fans | 影图",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://cj.vodimg.top/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "damo",
|
||||
"name": "📺乐享汇fans | 大漠",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://damozy.com/api.php/provide/vod/from/M3U8/"
|
||||
},
|
||||
{
|
||||
"key": "feifan",
|
||||
"name": "📺乐享汇fans | 非凡",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://cj.ffzyapi.com/api.php/provide/vod/from/ffm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "feisu",
|
||||
"name": "📺乐享汇fans | 飞速",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.feisuzyapi.com/api.php/provide/vod/from/fsm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "guangsu",
|
||||
"name": "📺乐享汇fans | 光速",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.guangsuapi.com/api.php/provide/vod/from/gsm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "hongniu",
|
||||
"name": "📺乐享汇fans | 红牛",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.hongniuzy2.com/api.php/provide/vod/from/hnm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "jinying",
|
||||
"name": "📺乐享汇fans | 金鹰",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://jinyingzy.com/provide/vod/from/jinyingm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "jisu",
|
||||
"name": "📺乐享汇fans | 极速",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://jszyapi.com/api.php/provide/vod/from/jsm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "kuaiche",
|
||||
"name": "📺乐享汇fans | 快车",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://caiji.kczyapi.com/api.php/provide/vod/from/kcm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "liangzi",
|
||||
"name": "📺乐享汇fans | 量子",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://cj.lziapi.com/api.php/provide/vod/from/lzm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "qihu",
|
||||
"name": "📺乐享汇fans | 奇虎",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://caiji.qhzyapi.com/api.php/provide/vod/from/qhm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "ikun",
|
||||
"name": "📺乐享汇fans | 艾坤",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://ikunzyapi.com/api.php/provide/vod"
|
||||
},
|
||||
{
|
||||
"key": "cntv",
|
||||
"name": "🟢乐享汇fans丨央视网",
|
||||
"type": 3,
|
||||
"api": "cntv_open.js"
|
||||
},
|
||||
{
|
||||
"key": "ubestkid",
|
||||
"name": "🟢乐享汇fans丨贝乐虎",
|
||||
"type": 3,
|
||||
"api": "ubestkid_open.js"
|
||||
},
|
||||
{
|
||||
"key": "tuxiaobei",
|
||||
"name": "🟢乐享汇fans丨兔小贝",
|
||||
"type": 3,
|
||||
"api": "tuxiaobei_open.js"
|
||||
},
|
||||
{
|
||||
"key": "boosj",
|
||||
"name": "🟢乐享汇fans丨童趣",
|
||||
"type": 3,
|
||||
"api": "boosj_open.js"
|
||||
},
|
||||
{
|
||||
"key": "bili",
|
||||
"name": "🟢乐享汇fans丨我哔",
|
||||
"type": 3,
|
||||
"api": "mybili_open.js"
|
||||
},
|
||||
{
|
||||
"key": "bilibili",
|
||||
"name": "🟢乐享汇fans丨哔哩",
|
||||
"type": 3,
|
||||
"api": "bili_open.js",
|
||||
"ext": { "categories": "音乐#动画#电影#电视剧#番剧#综艺#影视#国创#娱乐#游戏#搞笑#单机游戏#沙雕动画#沙雕穿越#沙雕", "cookie": "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "kuqimv",
|
||||
"name": "🟢乐享汇fans丨MV网",
|
||||
"type": 3,
|
||||
"api": "kuqimv_open.js"
|
||||
},
|
||||
{
|
||||
"key": "sharenice",
|
||||
"name": "🟢乐享汇fans丨短视频",
|
||||
"type": 3,
|
||||
"api": "sharenice_open.js"
|
||||
},
|
||||
{
|
||||
"key": "dj0898",
|
||||
"name": "🟢乐享汇fans丨DJ网",
|
||||
"type": 3,
|
||||
"api": "dj0898_open.js"
|
||||
},
|
||||
{
|
||||
"key": "duboku",
|
||||
"name": "🟢乐享汇fans丨独播①",
|
||||
"type": 3,
|
||||
"api": "duboku_open.js"
|
||||
},
|
||||
{
|
||||
"key": "dubokufq",
|
||||
"name": "🟢乐享汇fans丨独播②✈️",
|
||||
"type": 3,
|
||||
"api": "dubokufq_open.js"
|
||||
},
|
||||
{
|
||||
"key": "nivod",
|
||||
"name": "🟢乐享汇fans丨泥巴✈️",
|
||||
"type": 3,
|
||||
"api": "nivod_open.js",
|
||||
"ext": "888解忧愁"
|
||||
}
|
||||
]
|
||||
},
|
||||
"read": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "bookan",
|
||||
"name": "🎧乐享汇fans丨博看",
|
||||
"type": 10,
|
||||
"api": "bookan_open.js"
|
||||
},
|
||||
{
|
||||
"key": "lbgs",
|
||||
"name": "🎧乐享汇fans丨老白",
|
||||
"type": 10,
|
||||
"api": "lbgs_open.js"
|
||||
},
|
||||
{
|
||||
"key": "230ts_book",
|
||||
"name": "🎧乐享汇fans丨艾尚①",
|
||||
"type": 10,
|
||||
"api": "230ts_book_open.js"
|
||||
},
|
||||
{
|
||||
"key": "230ts",
|
||||
"name": "🎧乐享汇fans丨艾尚②",
|
||||
"type": 3,
|
||||
"api": "230ts_open.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pan": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "alist",
|
||||
"name": "乐享汇fans云盘大全",
|
||||
"type": 40,
|
||||
"api": "alist_open.js",
|
||||
"ext": [
|
||||
{
|
||||
"name": "🟢丫仙女",
|
||||
"server": "http://alist.xiaoya.pro/",
|
||||
"startPage": "/",
|
||||
"showAll": false,
|
||||
"search": true,
|
||||
"headers": {
|
||||
"Authorization": ""
|
||||
},
|
||||
"params": {
|
||||
"/abc": {
|
||||
"password": "123"
|
||||
},
|
||||
"/abc/abc": {
|
||||
"password": "123"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "🟢正奕合集",
|
||||
"server": "http://www.jczyl.top:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟢东哥",
|
||||
"server": "http://101.34.67.237:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟢美云",
|
||||
"server": "https://h.dfjx.ltd/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小新盘",
|
||||
"server": "https://pan.cdnxin.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟢白云tv",
|
||||
"server": "http://breadmyth.asuscomm.com:22222/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小雅分类",
|
||||
"server": "http://www.214728327.xyz:5207/"
|
||||
},
|
||||
{
|
||||
"name": "🟢瑶瑶",
|
||||
"server": "https://lyly.run.goorm.io/"
|
||||
},
|
||||
{
|
||||
"name": "🟢潇洒个人",
|
||||
"server": "https://alist.azad.asia/"
|
||||
},
|
||||
{
|
||||
"name": "🟢鹏程",
|
||||
"server": "https://pan.pengcheng.team/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小丫",
|
||||
"server": "http://alist.xiaoya.pro/"
|
||||
},
|
||||
{
|
||||
"name": "🟢触光",
|
||||
"server": "https://pan.ichuguang.com"
|
||||
},
|
||||
{
|
||||
"name": "🟢星梦",
|
||||
"server": "https://pan.bashroot.top"
|
||||
},
|
||||
{
|
||||
"name": "🟢弱水分享",
|
||||
"server": "http://shicheng.wang:555/"
|
||||
},
|
||||
{
|
||||
"name": "🟢神器云",
|
||||
"server": "https://alist.ygxz.xyz/"
|
||||
},
|
||||
{
|
||||
"name": "🟢ecve资源",
|
||||
"server": "https://pan.ecve.cn/"
|
||||
},
|
||||
{
|
||||
"name": "🟢雨呢",
|
||||
"server": "https://pan.clun.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟢OEIO",
|
||||
"server": "https://o.oeio.repl.co/"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "🟢酷呵盘",
|
||||
"server": "https://pan.kuhehe.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟢分享者",
|
||||
"server": "https://melist.me/"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "🟢目瞪口呆",
|
||||
"server": "https://pan.mdgd.cc/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小陈",
|
||||
"server": "https://ypan.cc/"
|
||||
},
|
||||
{
|
||||
"name": "🟢动漫盘",
|
||||
"server": "http://pan.smjc.cc"
|
||||
},
|
||||
{
|
||||
"name": "🟢神秘小盘",
|
||||
"server": "https://yun.ltt.zone/"
|
||||
},
|
||||
{
|
||||
"name" : "🟢神奇云",
|
||||
"server" : "https://al.chirmyram.com/"
|
||||
|
||||
},
|
||||
{
|
||||
"name": "🟢SODAZ1",
|
||||
"server": "https://pan.sodaz.xyz/"
|
||||
},
|
||||
{
|
||||
"name": "🟢ccaa",
|
||||
"server": "http://ww1.ccaac.xyz/"
|
||||
},
|
||||
{
|
||||
"name": "🟢姹莱坞",
|
||||
"server": "https://alist.agczsz.top/",
|
||||
"passwd": "agree"
|
||||
},
|
||||
{
|
||||
"name": "🟢杜比",
|
||||
"server": "https://dubi.tk"
|
||||
},
|
||||
{
|
||||
"name": "🟢一只鱼",
|
||||
"server": "https://alist.youte.ml"
|
||||
},
|
||||
{
|
||||
"name": "🟢神族九帝",
|
||||
"server": "https://alist.shenzjd.com"
|
||||
},
|
||||
{
|
||||
"name": "🟢老谭",
|
||||
"server": "https://pan.cqtjy.cn/"
|
||||
},
|
||||
{
|
||||
"name": "🟢皓星繁天",
|
||||
"server": "https://pan.hxft.xyz/"
|
||||
},
|
||||
{
|
||||
"name" : "🟢迅维云盘",
|
||||
"server" : "https://pan.xwbeta.com"
|
||||
|
||||
},
|
||||
{
|
||||
"name" : "🟢姬路白雪",
|
||||
"server" : "https://pan.jlbx.xyz"
|
||||
|
||||
},
|
||||
{
|
||||
"name": "🟢肥灿",
|
||||
"server": "http://43.200.153.107:55609/"
|
||||
},
|
||||
{
|
||||
"name": "🟢悦享盘",
|
||||
"server": "https://pity.eu.org/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小雅备用",
|
||||
"server": "http://123.60.188.109:5678/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小黄瓜",
|
||||
"server": "http://sbpan.tk/"
|
||||
},
|
||||
{"name": "🟢梓凌妙妙",
|
||||
"server": "https://zi0.cc/"},
|
||||
{"name": "🟢微资·随意盘",
|
||||
"server": "https://apps.weixinqqq.com/"},
|
||||
{
|
||||
"name": "🟢雨呢备用",
|
||||
"server": "https://clun.eu.org/"
|
||||
},
|
||||
{
|
||||
"name": "🟢潇洒备用",
|
||||
"server": "http://www.azad.asia:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟡A大杂物库",
|
||||
"server": "https://alist.qyide.com/"
|
||||
},
|
||||
{
|
||||
"name": "🟡诸神小盘",
|
||||
"server": "https://pan.zsxg.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟡福利盘",
|
||||
"server": "http://69.161.221.160:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟡罗汉果盘",
|
||||
"server": "https://lala-ofbip.run.goorm.site/"
|
||||
},
|
||||
{
|
||||
"name": "🟡爱豆福利",
|
||||
"server": "https://alist.eduedu.eu.org/"
|
||||
},
|
||||
{
|
||||
"name": "公众号:乐享汇fans",
|
||||
"server": "https://pan.xwbeta.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,788 @@
|
||||
{
|
||||
"video": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "91av",
|
||||
"name": "🟡乐享汇fans丨九一",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://91av.cyou/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "91md",
|
||||
"name": "🟡乐享汇fans丨九麻",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://91md.me/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "madou",
|
||||
"name": "🟡乐享汇fans丨麻豆",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://wuxu.cc/api.php/provide/vod/from/mdm3u8/"
|
||||
},
|
||||
{
|
||||
"key": "tianmei",
|
||||
"name": "🟡乐享汇fans丨天美①",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://www.tianmei.pw/api.php/provide/vod/from/m3u8/"
|
||||
},
|
||||
{
|
||||
"key": "tmyy",
|
||||
"name": "🟡乐享汇fans丨天美②",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://tmyy.cc/api.php/provide/vod/from/m3u8/"
|
||||
},
|
||||
{
|
||||
"key": "madouse",
|
||||
"name": "🟡乐享汇fans丨果冻",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://madouse.cc/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "chujia",
|
||||
"name": "🟡乐享汇fans丨精东",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://chujia.cc/api.php/provide/vod/from/m3u8/"
|
||||
},
|
||||
{
|
||||
"key": "qqcm",
|
||||
"name": "🟡乐享汇fans丨传媒",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://qqcm.sbs/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "shayuapi",
|
||||
"name": "🟡乐享汇fans丨鲨鱼",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://shayuapi.com/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "apilyzy",
|
||||
"name": "🟡乐享汇fans丨老鸭",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.apilyzy.com/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "sewozy",
|
||||
"name": "🟡乐享汇fans丨涩窝",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://sewozyapi.com/api.php/provide/vod"
|
||||
},
|
||||
{
|
||||
"key": "lajiao",
|
||||
"name": "🟡乐享汇fans丨辣椒",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://apilj.com/api.php/provide/vod/at/json/"
|
||||
},
|
||||
{
|
||||
"key": "xiaocao",
|
||||
"name": "🟡乐享汇fans丨小草",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.caoliuzyw.com/api.php/provide/vod"
|
||||
},
|
||||
{
|
||||
"key": "apiyikanapi",
|
||||
"name": "🟡乐享汇fans丨易看",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.yikanapi.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "zy018",
|
||||
"name": "🟡乐享汇fans丨十八",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.zy018.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "9szy",
|
||||
"name": "🟡乐享汇fans丨九色",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://9szy.net/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "apibukazyw",
|
||||
"name": "🟡乐享汇fans丨不卡",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.bukazyw.fun/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "kuaiavzy",
|
||||
"name": "🟡乐享汇fans丨快爱",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://kuaiavzy.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "apivodkok2",
|
||||
"name": "🟡乐享汇fans丨KOK2",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.vodkok2.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "api.maozyapi.com",
|
||||
"name": "🟡乐享汇fans丨猫咪",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.maozyapi.com/inc/apijson_vod.php"
|
||||
},
|
||||
{
|
||||
"key": "siwazywtw",
|
||||
"name": "🟡乐享汇fans丨袜丝①",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.siwazyw.tv/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "siwa",
|
||||
"name": "🟡乐享汇fans丨丝袜②",
|
||||
"api": "caiji.js",
|
||||
"type": 3,
|
||||
"ext": "https://haiwai.siwazyw.org/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "semao",
|
||||
"name": "🟡乐享汇fans丨色猫",
|
||||
"api": "caiji.js",
|
||||
"type": 3,
|
||||
"ext": "https://caiji.semaozy.net/inc/apijson_vod.php"
|
||||
},
|
||||
{
|
||||
"key": "198211",
|
||||
"name": "🟡乐享汇fans丨花色",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://198.211.49.156/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "putaozyw",
|
||||
"name": "🟡乐享汇fans丨葡萄",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://caiji.putaozyw.net/inc/apijson_vod.php"
|
||||
},
|
||||
{
|
||||
"key": "apiddapi",
|
||||
"name": "🟡乐享汇fans丨滴滴",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.ddapi.cc/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "apixbapi",
|
||||
"name": "🟡乐享汇fans丨雪豹",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.xbapi.cc/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "apiyirenziyuan",
|
||||
"name": "🟡乐享汇fans丨依人",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.yirenziyuan.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "kaiyunzy4",
|
||||
"name": "🟡乐享汇fans丨开云",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://kaiyunzy5.com/inc/apijson_vod.php"
|
||||
},
|
||||
{
|
||||
"key": "seyavod",
|
||||
"name": "🟡乐享汇fans丨色鸭",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.seyavod.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "jizhiapi",
|
||||
"name": "🟡乐享汇fans丨极致",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://jizhiapi.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "timizy10",
|
||||
"name": "🟡乐享汇fans丨甜蜜",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://timizy10.cc/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "naixxzy",
|
||||
"name": "🟡乐享汇fans丨奶香",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://naixxzy.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "aosikazy",
|
||||
"name": "🟡乐享汇fans丨奥斯",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://aosikazy.com/api.php/provide/vod/?ac=list"
|
||||
},
|
||||
{
|
||||
"key": "sexnguon",
|
||||
"name": "🟡乐享汇fans丨色南",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.sexnguon.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "156249",
|
||||
"name": "🟡乐享汇fans丨蛋蛋",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://156.249.29.8/inc/apijson_vod.php"
|
||||
},
|
||||
{
|
||||
"key": "kkzy",
|
||||
"name": "🟡乐享汇fans丨写真",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://kkzy.me/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "apig14o",
|
||||
"name": "🟡乐享汇fans丨萝莉",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://api.g14o.cc/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "bominzy",
|
||||
"name": "🟡乐享汇fans丨博民",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.bominzy.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "155api",
|
||||
"name": "🟡乐享汇fans丨十五",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://155api.com/api.php/provide/vod/?ac=list"
|
||||
},
|
||||
{
|
||||
"key": "avre00",
|
||||
"name": "🟡乐享汇fans丨黄瓜",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.avre00.com/api.php/provide/vod/?ac=list"
|
||||
},
|
||||
{
|
||||
"key": "mtav",
|
||||
"name": "🟡乐享汇fans丨桃桃",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://mtav.art/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "888dav.com",
|
||||
"name": "🟡乐享汇fans丨八八",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.888dav.com/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "apittzy.com",
|
||||
"name": "🟡乐享汇fans丨天天",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://apittzy.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "8day",
|
||||
"name": "🟡乐享汇fans丨八天",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://8day.icu/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "5bo1",
|
||||
"name": "🟡乐享汇fans丨五播",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://5bo1.xyz/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "92free",
|
||||
"name": "🟡乐享汇fans丨久爱",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://92free.icu/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "tmav",
|
||||
"name": "🟡乐享汇fans丨美亚",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://tmav.art/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "sezy",
|
||||
"name": "🟡乐享汇fans丨色网",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://sezy.website/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "xxavs",
|
||||
"name": "🟡乐享汇fans丨湿园",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://xxavs.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "auezy",
|
||||
"name": "🟡乐享汇fans丨优异",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://a.uezy.pw/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "hongxiuzy",
|
||||
"name": "🟡乐享汇fans丨红袖",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://hongxiuzy.com/api.php/provide/vod/"
|
||||
},
|
||||
{
|
||||
"key": "apilsbzy1",
|
||||
"name": "🟡乐享汇fans丨色逼",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://apilsbzy1.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "toto-long",
|
||||
"name": "🟡乐享汇fans丨橘猫",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://to.to-long.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "huangpian",
|
||||
"name": "🟡乐享汇fans丨黄片",
|
||||
"api": "caiji.js",
|
||||
"type": 3,
|
||||
"ext": "https://www.pgxdy.com/api/json.php"
|
||||
},
|
||||
{
|
||||
"key": "apittzy",
|
||||
"name": "🟡乐享汇fans丨探探",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://apittzy.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "huakuiapi",
|
||||
"name": "🟡乐享汇fans丨花魁",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://caiji.huakuiapi.com/inc/apijson_vod.php"
|
||||
},
|
||||
{
|
||||
"key": "hghhh",
|
||||
"name": "🟡乐享汇fans丨皇冠",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://hghhh.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "slapibf",
|
||||
"name": "🟡乐享汇fans丨森林",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://slapibf.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "apiyutu",
|
||||
"name": "🟡乐享汇fans丨玉兔",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://apiyutu.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "hszy",
|
||||
"name": "🟡乐享汇fans丨黄色",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://hszy.me/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "haopianapi",
|
||||
"name": "🟡乐享汇fans丨好片",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://haopianapi.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "ziyuan",
|
||||
"name": "🟡乐享汇fans丨湿裤",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://ziyuan.skm3u8.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "jkunzyapi",
|
||||
"name": "🟡乐享汇fans丨鸡坤",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://jkunzyapi.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "10042",
|
||||
"name": "🟡乐享汇fans丨马厂",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://100.42.227.80/api/macs.php"
|
||||
},
|
||||
{
|
||||
"key": "888dav",
|
||||
"name": "🟡乐享汇fans丨抖阴",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.888dav.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "msnii",
|
||||
"name": "🟡乐享汇fans丨美女",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.msnii.com/api/json.php"
|
||||
},
|
||||
{
|
||||
"key": "xrbsp",
|
||||
"name": "🟡乐享汇fans丨淫水",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.xrbsp.com/api/json.php"
|
||||
},
|
||||
{
|
||||
"key": "gdlsp",
|
||||
"name": "🟡乐享汇fans丨香奶",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.gdlsp.com/api/json.php"
|
||||
},
|
||||
{
|
||||
"key": "kxgav",
|
||||
"name": "🟡乐享汇fans丨白嫖",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.kxgav.com/api/json.php"
|
||||
},
|
||||
{
|
||||
"key": "afasu",
|
||||
"name": "🟡乐享汇fans丨湿妹",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://www.afasu.com/api/json.php"
|
||||
},
|
||||
{
|
||||
"key": "dadiapi",
|
||||
"name": "🟡乐享汇fans丨大地",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://dadiapi.com/api.php"
|
||||
},
|
||||
{
|
||||
"key": "lbapi9",
|
||||
"name": "🟡乐享汇fans丨乐播",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "https://lbapi9.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "fhapi9",
|
||||
"name": "🟡乐享汇fans丨番号",
|
||||
"type": 3,
|
||||
"api": "caiji.js",
|
||||
"ext": "http://fhapi9.com/api.php/provide/vod/at/json"
|
||||
},
|
||||
{
|
||||
"key": "mtsp",
|
||||
"name": "🟡乐享汇fans丨蜜桃",
|
||||
"type": 3,
|
||||
"api": "mtsp_open.js"
|
||||
},
|
||||
{
|
||||
"key": "18av",
|
||||
"name": "🟡乐享汇fans丨18AV",
|
||||
"type": 3,
|
||||
"api": "18av_open.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"read": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "bookan",
|
||||
"name": "🎧乐享汇fans丨博看",
|
||||
"type": 10,
|
||||
"api": "bookan_open.js"
|
||||
},
|
||||
{
|
||||
"key": "lbgs",
|
||||
"name": "🎧乐享汇fans丨老白",
|
||||
"type": 10,
|
||||
"api": "lbgs_open.js"
|
||||
},
|
||||
{
|
||||
"key": "230ts_book",
|
||||
"name": "🎧乐享汇fans丨艾尚①",
|
||||
"type": 10,
|
||||
"api": "230ts_book_open.js"
|
||||
},
|
||||
{
|
||||
"key": "230ts",
|
||||
"name": "🎧乐享汇fans丨艾尚②",
|
||||
"type": 3,
|
||||
"api": "230ts_open.js"
|
||||
}
|
||||
]
|
||||
},
|
||||
"pan": {
|
||||
"sites": [
|
||||
{
|
||||
"key": "alist",
|
||||
"name": "乐享汇fans云盘大全",
|
||||
"type": 40,
|
||||
"api": "alist_open.js",
|
||||
"ext": [
|
||||
{
|
||||
"name": "🟢丫仙女",
|
||||
"server": "http://alist.xiaoya.pro/",
|
||||
"startPage": "/",
|
||||
"showAll": false,
|
||||
"search": true,
|
||||
"headers": {
|
||||
"Authorization": ""
|
||||
},
|
||||
"params": {
|
||||
"/abc": {
|
||||
"password": "123"
|
||||
},
|
||||
"/abc/abc": {
|
||||
"password": "123"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "🟢正奕合集",
|
||||
"server": "http://www.jczyl.top:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟢东哥",
|
||||
"server": "http://101.34.67.237:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟢美云",
|
||||
"server": "https://h.dfjx.ltd/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小新盘",
|
||||
"server": "https://pan.cdnxin.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟢白云tv",
|
||||
"server": "http://breadmyth.asuscomm.com:22222/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小雅分类",
|
||||
"server": "http://www.214728327.xyz:5207/"
|
||||
},
|
||||
{
|
||||
"name": "🟢瑶瑶",
|
||||
"server": "https://lyly.run.goorm.io/"
|
||||
},
|
||||
{
|
||||
"name": "🟢潇洒个人",
|
||||
"server": "https://alist.azad.asia/"
|
||||
},
|
||||
{
|
||||
"name": "🟢鹏程",
|
||||
"server": "https://pan.pengcheng.team/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小丫",
|
||||
"server": "http://alist.xiaoya.pro/"
|
||||
},
|
||||
{
|
||||
"name": "🟢触光",
|
||||
"server": "https://pan.ichuguang.com"
|
||||
},
|
||||
{
|
||||
"name": "🟢星梦",
|
||||
"server": "https://pan.bashroot.top"
|
||||
},
|
||||
{
|
||||
"name": "🟢弱水分享",
|
||||
"server": "http://shicheng.wang:555/"
|
||||
},
|
||||
{
|
||||
"name": "🟢神器云",
|
||||
"server": "https://alist.ygxz.xyz/"
|
||||
},
|
||||
{
|
||||
"name": "🟢ecve资源",
|
||||
"server": "https://pan.ecve.cn/"
|
||||
},
|
||||
{
|
||||
"name": "🟢雨呢",
|
||||
"server": "https://pan.clun.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟢OEIO",
|
||||
"server": "https://o.oeio.repl.co/"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "🟢酷呵盘",
|
||||
"server": "https://pan.kuhehe.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟢分享者",
|
||||
"server": "https://melist.me/"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "🟢目瞪口呆",
|
||||
"server": "https://pan.mdgd.cc/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小陈",
|
||||
"server": "https://ypan.cc/"
|
||||
},
|
||||
{
|
||||
"name": "🟢动漫盘",
|
||||
"server": "http://pan.smjc.cc"
|
||||
},
|
||||
{
|
||||
"name": "🟢神秘小盘",
|
||||
"server": "https://yun.ltt.zone/"
|
||||
},
|
||||
{
|
||||
"name" : "🟢神奇云",
|
||||
"server" : "https://al.chirmyram.com/"
|
||||
|
||||
},
|
||||
{
|
||||
"name": "🟢SODAZ1",
|
||||
"server": "https://pan.sodaz.xyz/"
|
||||
},
|
||||
{
|
||||
"name": "🟢ccaa",
|
||||
"server": "http://ww1.ccaac.xyz/"
|
||||
},
|
||||
{
|
||||
"name": "🟢姹莱坞",
|
||||
"server": "https://alist.agczsz.top/",
|
||||
"passwd": "agree"
|
||||
},
|
||||
{
|
||||
"name": "🟢杜比",
|
||||
"server": "https://dubi.tk"
|
||||
},
|
||||
{
|
||||
"name": "🟢一只鱼",
|
||||
"server": "https://alist.youte.ml"
|
||||
},
|
||||
{
|
||||
"name": "🟢神族九帝",
|
||||
"server": "https://alist.shenzjd.com"
|
||||
},
|
||||
{
|
||||
"name": "🟢老谭",
|
||||
"server": "https://pan.cqtjy.cn/"
|
||||
},
|
||||
{
|
||||
"name": "🟢皓星繁天",
|
||||
"server": "https://pan.hxft.xyz/"
|
||||
},
|
||||
{
|
||||
"name" : "🟢迅维云盘",
|
||||
"server" : "https://pan.xwbeta.com"
|
||||
|
||||
},
|
||||
{
|
||||
"name" : "🟢姬路白雪",
|
||||
"server" : "https://pan.jlbx.xyz"
|
||||
|
||||
},
|
||||
{
|
||||
"name": "🟢肥灿",
|
||||
"server": "http://43.200.153.107:55609/"
|
||||
},
|
||||
{
|
||||
"name": "🟢悦享盘",
|
||||
"server": "https://pity.eu.org/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小雅备用",
|
||||
"server": "http://123.60.188.109:5678/"
|
||||
},
|
||||
{
|
||||
"name": "🟢小黄瓜",
|
||||
"server": "http://sbpan.tk/"
|
||||
},
|
||||
{"name": "🟢梓凌妙妙",
|
||||
"server": "https://zi0.cc/"},
|
||||
{"name": "🟢微资·随意盘",
|
||||
"server": "https://apps.weixinqqq.com/"},
|
||||
{
|
||||
"name": "🟢雨呢备用",
|
||||
"server": "https://clun.eu.org/"
|
||||
},
|
||||
{
|
||||
"name": "🟢潇洒备用",
|
||||
"server": "http://www.azad.asia:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟡A大杂物库",
|
||||
"server": "https://alist.qyide.com/"
|
||||
},
|
||||
{
|
||||
"name": "🟡诸神小盘",
|
||||
"server": "https://pan.zsxg.top/"
|
||||
},
|
||||
{
|
||||
"name": "🟡福利盘",
|
||||
"server": "http://69.161.221.160:5244/"
|
||||
},
|
||||
{
|
||||
"name": "🟡罗汉果盘",
|
||||
"server": "https://lala-ofbip.run.goorm.site/"
|
||||
},
|
||||
{
|
||||
"name": "🟡爱豆福利",
|
||||
"server": "https://alist.eduedu.eu.org/"
|
||||
},
|
||||
{
|
||||
"name": "公众号:乐享汇fans",
|
||||
"server": "https://pan.xwbeta.com"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,240 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'czzy';
|
||||
let url = 'https://cz01.fun/';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
const cookie = {};
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
Cookie: _.map(cookie, (value, key) => {
|
||||
return `${key}=${value}`;
|
||||
}).join(';'),
|
||||
};
|
||||
if (referer) headers.referer = encodeURIComponent(referer);
|
||||
let res = await req(reqUrl, {
|
||||
method: mth || 'get',
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: mth === 'post' ? 'form' : '',
|
||||
});
|
||||
if (res.headers['set-cookie']) {
|
||||
const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie'];
|
||||
const cks = set_cookie.split(';');
|
||||
for (const c of cks) {
|
||||
const tmp = c.trim();
|
||||
if (tmp.startsWith('result=')) {
|
||||
cookie.result = tmp.substring(7);
|
||||
return await request(reqUrl, reqUrl, 'post', {
|
||||
result: cookie.result,
|
||||
});
|
||||
} else if (tmp.startsWith('esc_search_captcha=1')) {
|
||||
cookie.esc_search_captcha = 1;
|
||||
delete cookie.result;
|
||||
return await request(reqUrl);
|
||||
}
|
||||
}
|
||||
// console.log(res.headers['set-cookie']);
|
||||
}
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let filterObj = {};
|
||||
const html = await request(url + '/movie_bt');
|
||||
const $ = load(html);
|
||||
const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]');
|
||||
const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a');
|
||||
let tag = {
|
||||
key: 'tag',
|
||||
name: '类型',
|
||||
value: _.map(tags, (n) => {
|
||||
let v = n.attribs['cat-url'] || '';
|
||||
v = v.substring(v.lastIndexOf('/') + 1);
|
||||
return { n: n.children[0].data, v: v };
|
||||
}),
|
||||
};
|
||||
tag['init'] = tag.value[0].v;
|
||||
let classes = _.map(series, (s) => {
|
||||
let typeId = s.attribs['cat-url'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1);
|
||||
filterObj[typeId] = [tag];
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: s.children[0].data,
|
||||
};
|
||||
});
|
||||
const sortName = ['电影', '电视剧', '国产剧', '美剧', '韩剧', '日剧', '海外剧(其他)', '华语电影', '印度电影', '日本电影', '欧美电影', '韩国电影', '动画', '俄罗斯电影', '加拿大电影'];
|
||||
classes = _.sortBy(classes, (c) => {
|
||||
const index = sortName.indexOf(c.type_name);
|
||||
return index === -1 ? sortName.length : index;
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const tag = extend.tag || '';
|
||||
const link = url + '/movie_bt' + (tag.length > 0 ? `/movie_bt_tags/${tag}` : '') + '/movie_bt_series/' + tid + (pg > 1 ? `/page/${pg}` : '');
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.mrb > ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
const a = $(item).find('a:first')[0];
|
||||
const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
const jidi = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: jidi || hdinfo || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src
|
||||
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||
.replace(/&.{1,5};/g, '')
|
||||
.replace(/\s{2,}/g, ' ');
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(url + '/movie/' + id + '.html');
|
||||
const $ = load(html);
|
||||
const detail = $('ul.moviedteail_list > li');
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_pic: $('div.dyimg img:first').attr('src'),
|
||||
vod_remarks: '',
|
||||
vod_content: stripHtmlTag($('div.yp_context').html()).trim(),
|
||||
};
|
||||
for (const info of detail) {
|
||||
const i = $(info).text().trim();
|
||||
if (i.startsWith('地区:')) {
|
||||
vod.vod_area = i.substring(3);
|
||||
} else if (i.startsWith('年份:')) {
|
||||
vod.vod_year = i.substring(3);
|
||||
} else if (i.startsWith('导演:')) {
|
||||
vod.vod_director = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('主演:')) {
|
||||
vod.vod_actor = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('语言:')) {
|
||||
vod.vod_lang = i.substring(3);
|
||||
}
|
||||
}
|
||||
const playlist = _.map($('div.paly_list_btn > a'), (a) => {
|
||||
return a.children[0].data + '$' + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, '$1');
|
||||
});
|
||||
vod.vod_play_from = key;
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = url + '/v_play/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const iframe = $('body iframe[src*=Cloud]');
|
||||
if (iframe.length > 0) {
|
||||
const iframeHtml = (
|
||||
await req(iframe[0].attribs.src, {
|
||||
headers: {
|
||||
Referer: link,
|
||||
'User-Agent': UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
let code = iframeHtml
|
||||
.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));
|
||||
}
|
||||
const playUrl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7);
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const js = $('script:contains(window.wp_nonce)').html();
|
||||
const group = js.match(/(var.*)eval\((\w*\(\w*\))\)/);
|
||||
const md5 = Crypto;
|
||||
const result = eval(group[1] + group[2]);
|
||||
const playUrl = result.match(/url:.*?['"](.*?)['"]/)[1];
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const html = await request(url + '/?s=' + wd);
|
||||
const $ = load(html);
|
||||
const items = $('div.search_list > ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
const a = $(item).find('a:first')[0];
|
||||
const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
const jidi = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: jidi || hdinfo || '',
|
||||
};
|
||||
});
|
||||
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,240 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'czzy';
|
||||
let url = 'https://cz01.me';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
const cookie = {};
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
Cookie: _.map(cookie, (value, key) => {
|
||||
return `${key}=${value}`;
|
||||
}).join(';'),
|
||||
};
|
||||
if (referer) headers.referer = encodeURIComponent(referer);
|
||||
let res = await req(reqUrl, {
|
||||
method: mth || 'get',
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: mth === 'post' ? 'form' : '',
|
||||
});
|
||||
if (res.headers['set-cookie']) {
|
||||
const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie'];
|
||||
const cks = set_cookie.split(';');
|
||||
for (const c of cks) {
|
||||
const tmp = c.trim();
|
||||
if (tmp.startsWith('result=')) {
|
||||
cookie.result = tmp.substring(7);
|
||||
return await request(reqUrl, reqUrl, 'post', {
|
||||
result: cookie.result,
|
||||
});
|
||||
} else if (tmp.startsWith('esc_search_captcha=1')) {
|
||||
cookie.esc_search_captcha = 1;
|
||||
delete cookie.result;
|
||||
return await request(reqUrl);
|
||||
}
|
||||
}
|
||||
// console.log(res.headers['set-cookie']);
|
||||
}
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let filterObj = {};
|
||||
const html = await request(url + '/movie_bt');
|
||||
const $ = load(html);
|
||||
const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]');
|
||||
const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a');
|
||||
let tag = {
|
||||
key: 'tag',
|
||||
name: '类型',
|
||||
value: _.map(tags, (n) => {
|
||||
let v = n.attribs['cat-url'] || '';
|
||||
v = v.substring(v.lastIndexOf('/') + 1);
|
||||
return { n: n.children[0].data, v: v };
|
||||
}),
|
||||
};
|
||||
tag['init'] = tag.value[0].v;
|
||||
let classes = _.map(series, (s) => {
|
||||
let typeId = s.attribs['cat-url'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1);
|
||||
filterObj[typeId] = [tag];
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: s.children[0].data,
|
||||
};
|
||||
});
|
||||
const sortName = ['电影', '电视剧', '国产剧', '美剧', '韩剧', '日剧', '海外剧(其他)', '华语电影', '印度电影', '日本电影', '欧美电影', '韩国电影', '动画', '俄罗斯电影', '加拿大电影'];
|
||||
classes = _.sortBy(classes, (c) => {
|
||||
const index = sortName.indexOf(c.type_name);
|
||||
return index === -1 ? sortName.length : index;
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const tag = extend.tag || '';
|
||||
const link = url + '/movie_bt' + (tag.length > 0 ? `/movie_bt_tags/${tag}` : '') + '/movie_bt_series/' + tid + (pg > 1 ? `/page/${pg}` : '');
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.mrb > ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
const a = $(item).find('a:first')[0];
|
||||
const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
const jidi = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: jidi || hdinfo || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src
|
||||
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||
.replace(/&.{1,5};/g, '')
|
||||
.replace(/\s{2,}/g, ' ');
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(url + '/movie/' + id + '.html');
|
||||
const $ = load(html);
|
||||
const detail = $('ul.moviedteail_list > li');
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_pic: $('div.dyimg img:first').attr('src'),
|
||||
vod_remarks: '',
|
||||
vod_content: stripHtmlTag($('div.yp_context').html()).trim(),
|
||||
};
|
||||
for (const info of detail) {
|
||||
const i = $(info).text().trim();
|
||||
if (i.startsWith('地区:')) {
|
||||
vod.vod_area = i.substring(3);
|
||||
} else if (i.startsWith('年份:')) {
|
||||
vod.vod_year = i.substring(3);
|
||||
} else if (i.startsWith('导演:')) {
|
||||
vod.vod_director = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('主演:')) {
|
||||
vod.vod_actor = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('语言:')) {
|
||||
vod.vod_lang = i.substring(3);
|
||||
}
|
||||
}
|
||||
const playlist = _.map($('div.paly_list_btn > a'), (a) => {
|
||||
return a.children[0].data + '$' + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, '$1');
|
||||
});
|
||||
vod.vod_play_from = key;
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = url + '/v_play/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const iframe = $('body iframe[src*=Cloud]');
|
||||
if (iframe.length > 0) {
|
||||
const iframeHtml = (
|
||||
await req(iframe[0].attribs.src, {
|
||||
headers: {
|
||||
Referer: link,
|
||||
'User-Agent': UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
let code = iframeHtml
|
||||
.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));
|
||||
}
|
||||
const playUrl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7);
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const js = $('script:contains(window.wp_nonce)').html();
|
||||
const group = js.match(/(var.*)eval\((\w*\(\w*\))\)/);
|
||||
const md5 = Crypto;
|
||||
const result = eval(group[1] + group[2]);
|
||||
const playUrl = result.match(/url:.*?['"](.*?)['"]/)[1];
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const html = await request(url + '/?s=' + wd);
|
||||
const $ = load(html);
|
||||
const items = $('div.search_list > ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
const a = $(item).find('a:first')[0];
|
||||
const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
const jidi = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: jidi || hdinfo || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
+244
@@ -0,0 +1,244 @@
|
||||
// 自动从 地址发布页 获取&跳转url地址
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'czzy';
|
||||
let host = 'https://www.czzy.site'; // 厂长地址发布页
|
||||
// let url = 'https://cz01.cc';
|
||||
let url = '';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
const cookie = {};
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
Cookie: _.map(cookie, (value, key) => {
|
||||
return `${key}=${value}`;
|
||||
}).join(';'),
|
||||
};
|
||||
if (referer) headers.referer = encodeURIComponent(referer);
|
||||
let res = await req(reqUrl, {
|
||||
method: mth || 'get',
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: mth === 'post' ? 'form' : '',
|
||||
});
|
||||
if (res.headers['set-cookie']) {
|
||||
const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie'];
|
||||
const cks = set_cookie.split(';');
|
||||
for (const c of cks) {
|
||||
const tmp = c.trim();
|
||||
if (tmp.startsWith('result=')) {
|
||||
cookie.result = tmp.substring(7);
|
||||
return await request(reqUrl, reqUrl, 'post', {
|
||||
result: cookie.result,
|
||||
});
|
||||
} else if (tmp.startsWith('esc_search_captcha=1')) {
|
||||
cookie.esc_search_captcha = 1;
|
||||
delete cookie.result;
|
||||
return await request(reqUrl);
|
||||
}
|
||||
}
|
||||
// console.log(res.headers['set-cookie']);
|
||||
}
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
let html = await request(host);
|
||||
url = html.match(/推荐访问<a href="(.*)"/)[1];
|
||||
console.debug('厂长跳转地址 =====>' + url); // js_debug.log
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let filterObj = {};
|
||||
const html = await request(url + '/movie_bt');
|
||||
const $ = load(html);
|
||||
const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a');
|
||||
let tag = {
|
||||
key: 'tag',
|
||||
name: '类型',
|
||||
value: _.map(tags, (n) => {
|
||||
let v = n.attribs['cat-url'] || '';
|
||||
v = v.substring(v.lastIndexOf('/') + 1);
|
||||
return { n: n.children[0].data, v: v };
|
||||
}),
|
||||
};
|
||||
tag['init'] = tag.value[0].v;
|
||||
const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]');
|
||||
let classes = _.map(series, (s) => {
|
||||
let typeId = s.attribs['cat-url'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1);
|
||||
filterObj[typeId] = [tag];
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: s.children[0].data,
|
||||
};
|
||||
});
|
||||
const sortName = ['电影', '电视剧', '国产剧', '美剧', '韩剧', '日剧', '海外剧(其他)', '华语电影', '印度电影', '日本电影', '欧美电影', '韩国电影', '动画', '俄罗斯电影', '加拿大电影'];
|
||||
classes = _.sortBy(classes, (c) => {
|
||||
const index = sortName.indexOf(c.type_name);
|
||||
return index === -1 ? sortName.length : index;
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const tag = extend.tag || '';
|
||||
const link = url + '/movie_bt' + (tag.length > 0 ? `/movie_bt_tags/${tag}` : '') + '/movie_bt_series/' + tid + (pg > 1 ? `/page/${pg}` : '');
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.mrb > ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
const a = $(item).find('a:first')[0];
|
||||
const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
const jidi = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: jidi || hdinfo || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src
|
||||
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||
.replace(/&.{1,5};/g, '')
|
||||
.replace(/\s{2,}/g, ' ');
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(url + '/movie/' + id + '.html');
|
||||
const $ = load(html);
|
||||
const detail = $('ul.moviedteail_list > li');
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_pic: $('div.dyimg img:first').attr('src'),
|
||||
vod_remarks: '',
|
||||
vod_content: stripHtmlTag($('div.yp_context').html()).trim(),
|
||||
};
|
||||
for (const info of detail) {
|
||||
const i = $(info).text().trim();
|
||||
if (i.startsWith('地区:')) {
|
||||
vod.vod_area = i.substring(3);
|
||||
} else if (i.startsWith('年份:')) {
|
||||
vod.vod_year = i.substring(3);
|
||||
} else if (i.startsWith('导演:')) {
|
||||
vod.vod_director = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('主演:')) {
|
||||
vod.vod_actor = _.map($(info).find('a'), (a) => {
|
||||
return a.children[0].data;
|
||||
}).join('/');
|
||||
} else if (i.startsWith('语言:')) {
|
||||
vod.vod_lang = i.substring(3);
|
||||
}
|
||||
}
|
||||
const playlist = _.map($('div.paly_list_btn > a'), (a) => {
|
||||
return a.children[0].data + '$' + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, '$1');
|
||||
});
|
||||
vod.vod_play_from = key;
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = url + '/v_play/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const iframe = $('body iframe[src*=Cloud]');
|
||||
if (iframe.length > 0) {
|
||||
const iframeHtml = (
|
||||
await req(iframe[0].attribs.src, {
|
||||
headers: {
|
||||
Referer: link,
|
||||
'User-Agent': UA,
|
||||
},
|
||||
})
|
||||
).content;
|
||||
let code = iframeHtml
|
||||
.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));
|
||||
}
|
||||
const playUrl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7);
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
} else {
|
||||
const js = $('script:contains(window.wp_nonce)').html();
|
||||
const group = js.match(/(var.*)eval\((\w*\(\w*\))\)/);
|
||||
const md5 = Crypto;
|
||||
const result = eval(group[1] + group[2]);
|
||||
const playUrl = result.match(/url:.*?['"](.*?)['"]/)[1];
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const html = await request(url + '/?s=' + wd);
|
||||
const $ = load(html);
|
||||
const items = $('div.search_list > ul > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
const a = $(item).find('a:first')[0];
|
||||
const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
const jidi = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: jidi || hdinfo || '',
|
||||
};
|
||||
});
|
||||
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,162 @@
|
||||
import { load, _ } from "./lib/cat.js";
|
||||
|
||||
let key = "世纪DJ音乐网_book";
|
||||
let HOST = "http://m.dj0898.com";
|
||||
let siteKey = "";
|
||||
let siteType = 0;
|
||||
|
||||
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";
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: "get",
|
||||
headers: {
|
||||
"User-Agent": agentSp || MOBILE_UA,
|
||||
Referer: HOST,
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const 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: "🎧其他舞曲" }, { type_id: 6, type_name: "🎧国外电音" }, { type_id: 8, type_name: "🎧慢歌连版" }, { type_id: 9, type_name: "🎧酒吧潮歌" }, { type_id: 10, type_name: "🎧中文串烧" }, { type_id: 11, type_name: "🎧外文串烧" }, { type_id: 12, type_name: "🎧中外串烧" }, { type_id: 13, type_name: "🎧车载串烧" }, { type_id: 14, type_name: "🎧越鼓串烧" }, { type_id: 40, type_name: "🎧3D/环绕" }, { type_id: 45, type_name: "🎧口水旋律" }, { type_id: 46, type_name: "🎧精品收藏" }, { type_id: 47, type_name: "🎧开场舞曲" }, { type_id: 48, type_name: "🎧印度舞曲" }, { type_id: 49, type_name: "🎧编排套曲" }, { type_id: 20, type_name: "🎧DuTch" }, { type_id: 21, type_name: "🎧Mash up" }, { type_id: 22, type_name: "🎧ClubHouse" }, { type_id: 23, type_name: "🎧ElectroHouse" }, { type_id: 24, type_name: "🎧越南鼓Dj" }, { type_id: 30, type_name: "🎧Funky" }, { type_id: 31, type_name: "🎧Reggae" }, { type_id: 32, type_name: "🎧Rnb" }, { type_id: 33, type_name: "🎧Hip Hop" }, { type_id: 34, type_name: "🎧Dubstep" }, { type_id: 8017, type_name: "🎧Hardstyle" }, { type_id: 8018, type_name: "🎧Hands Up" }];
|
||||
const filterObj = {};
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + "/dance/lists/id/10/1";
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("ul.djddv_djList > li");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a")[1];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const tt = $(it).find("strong:first")[0];
|
||||
const remarks = $(it).find("font")[5];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: tt.children[0].data,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: "🎵" + remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof pg == "undefined") pg = 1;
|
||||
const link = HOST + "/dance/lists/id/" + tid + "/" + pg;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("ul.djddv_djList > li");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a")[1];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const tt = $(it).find("strong:first")[0];
|
||||
const remarks = $(it).find("font")[5];
|
||||
return {
|
||||
book_id: a.attribs.href,
|
||||
book_name: tt.children[0].data,
|
||||
book_pic: img.attribs["src"],
|
||||
book_remarks: "🎵" + remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 60,
|
||||
total: 60 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
book_id: id,
|
||||
type_name: '',
|
||||
book_year: '',
|
||||
book_area: '',
|
||||
book_remarks: '',
|
||||
book_actor: '',
|
||||
book_director: '',
|
||||
book_content: '',
|
||||
};
|
||||
const playlist = ["点击播放" + "$" + vod.book_id];
|
||||
vod.volumes = "道长在线";
|
||||
vod.urls = playlist.join("#");
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const html = await request(id);
|
||||
const $ = load(html);
|
||||
const audio = $("body audio[src*=http]");
|
||||
const audioUrl = audio[0].attribs.src;
|
||||
// console.debug('世纪DJ音乐网 audioUrl =====>' + audioUrl); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: audioUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0 || typeof pg == "undefined") pg = 1;
|
||||
const link = HOST + "/index.php/dance/so/key?key=" + wd + "&cid=0&p=" + pg;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("ul.djddv_djList > li");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a")[1];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const tt = $(it).find("strong:first")[0];
|
||||
const remarks = $(it).find("font:first")[0];
|
||||
return {
|
||||
book_id: a.attribs.href,
|
||||
book_name: tt.children[0].data,
|
||||
book_pic: img.attribs["src"],
|
||||
book_remarks: "🎵" + remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 60,
|
||||
total: 60 * pgCount,
|
||||
list: videos,
|
||||
land: 1,
|
||||
ratio: 1.78,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
import { load, _ } from "assets://js/lib/cat.js";
|
||||
|
||||
let key = "世纪DJ音乐网";
|
||||
let HOST = "http://m.dj0898.com";
|
||||
let siteKey = "";
|
||||
let siteType = 0;
|
||||
|
||||
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";
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: "get",
|
||||
headers: {
|
||||
"User-Agent": agentSp || MOBILE_UA,
|
||||
Referer: HOST,
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const 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: "🎧其他舞曲" }, { type_id: 6, type_name: "🎧国外电音" }, { type_id: 8, type_name: "🎧慢歌连版" }, { type_id: 9, type_name: "🎧酒吧潮歌" }, { type_id: 10, type_name: "🎧中文串烧" }, { type_id: 11, type_name: "🎧外文串烧" }, { type_id: 12, type_name: "🎧中外串烧" }, { type_id: 13, type_name: "🎧车载串烧" }, { type_id: 14, type_name: "🎧越鼓串烧" }, { type_id: 40, type_name: "🎧3D/环绕" }, { type_id: 45, type_name: "🎧口水旋律" }, { type_id: 46, type_name: "🎧精品收藏" }, { type_id: 47, type_name: "🎧开场舞曲" }, { type_id: 48, type_name: "🎧印度舞曲" }, { type_id: 49, type_name: "🎧编排套曲" }, { type_id: 20, type_name: "🎧DuTch" }, { type_id: 21, type_name: "🎧Mash up" }, { type_id: 22, type_name: "🎧ClubHouse" }, { type_id: 23, type_name: "🎧ElectroHouse" }, { type_id: 24, type_name: "🎧越南鼓Dj" }, { type_id: 30, type_name: "🎧Funky" }, { type_id: 31, type_name: "🎧Reggae" }, { type_id: 32, type_name: "🎧Rnb" }, { type_id: 33, type_name: "🎧Hip Hop" }, { type_id: 34, type_name: "🎧Dubstep" }, { type_id: 8017, type_name: "🎧Hardstyle" }, { type_id: 8018, type_name: "🎧Hands Up" }];
|
||||
const filterObj = {};
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + "/dance/lists/id/10/1";
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("ul.djddv_djList > li");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a")[1];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const tt = $(it).find("strong:first")[0];
|
||||
const remarks = $(it).find("font")[5];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: tt.children[0].data,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: "🎵" + remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof pg == "undefined") pg = 1;
|
||||
const link = HOST + "/dance/lists/id/" + tid + "/" + pg;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("ul.djddv_djList > li");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a")[1];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const tt = $(it).find("strong:first")[0];
|
||||
const remarks = $(it).find("font")[5];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: tt.children[0].data,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: "🎵" + remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 60,
|
||||
total: 60 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: "",
|
||||
};
|
||||
const playlist = ["点击播放" + "$" + vod.vod_id];
|
||||
vod.vod_play_from = "道长在线";
|
||||
vod.vod_play_url = playlist.join("#");
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const html = await request(id);
|
||||
const $ = load(html);
|
||||
const audio = $("body audio[src*=http]");
|
||||
const audioUrl = audio[0].attribs.src;
|
||||
// console.debug('世纪DJ音乐网 audioUrl =====>' + audioUrl); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: audioUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0 || typeof pg == "undefined") pg = 1;
|
||||
const link = HOST + "/index.php/dance/so/key?key=" + wd + "&cid=0&p=" + pg;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("ul.djddv_djList > li");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a")[1];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const tt = $(it).find("strong:first")[0];
|
||||
const remarks = $(it).find("font:first")[0];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: tt.children[0].data,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: "🎵" + remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 60,
|
||||
total: 60 * pgCount,
|
||||
list: videos,
|
||||
land: 1,
|
||||
ratio: 1.78,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
import { Crypto, load, _, jinja2 } from './lib/cat.js';
|
||||
|
||||
let key = 'duboku';
|
||||
let url = 'https://u.duboku.io';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || UA,
|
||||
'Referer': url
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const class_parse = $('ul.nav-list > li > a[href*=vodtype]');
|
||||
let classes = [];
|
||||
classes = _.map(class_parse, (cls) => {
|
||||
let typeId = cls.attribs['href'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html','');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
let filterObj = {
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"陆剧","v":"13"},{"n":"日韩剧","v":"15"},{"n":"短剧","v":"21"},{"n":"台泰剧","v":"14"},{"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":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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":"情感"},{"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":"美国"}]},{"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"}]},{"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":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"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":"其他"}]},{"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"}]},{"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"}]}],
|
||||
"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":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"15":[{"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":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"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":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"14":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"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":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}]
|
||||
};
|
||||
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = url + '/vodshow/2--hits---------.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.myui-panel_bd > ul.myui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: it.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
|
||||
const link = url + '/vodshow/' + (extend.CateId || tid) + '-'+(extend.area || '')+'-'+(extend.by || 'time')+'-'+(extend.class || '')+'-'+(extend.lang || '')+'-'+(extend.letter || '')+'---' + (`${pg}`) + '---'+(extend.year || '')+'.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.myui-panel_bd > ul.myui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: it.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('ul.myui-page > li > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(url + '/voddetail/' + id + '.html');
|
||||
const $ = load(html);
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim(),
|
||||
vod_type: $('.myui-content__detail p:first a').text(),
|
||||
vod_actor: $('.myui-content__detail p:nth-child(5)').text().replace('主演:',''),
|
||||
vod_director: $('.myui-content__detail p:nth-child(6)').text().replace('导演:',''),
|
||||
vod_pic: $('div.myui-content__thumb img:first').attr('data-original'),
|
||||
vod_remarks :$('#rating:first span').text().replace(/\s{2,}/g, ' '),
|
||||
vod_content: $('span.data').text().trim(),
|
||||
};
|
||||
const playlist = _.map($('ul.sort-list > li > a'), (it) => {
|
||||
return it.children[0].data + '$' + it.attribs.href.replace(/\/vodplay\/(.*).html/g, '$1');
|
||||
});
|
||||
vod.vod_play_from = key;
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = url + '/vodplay/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const js = JSON.parse($('script:contains(player_)').html().replace('var player_data=',''));
|
||||
const playUrl = js.url.replace('index.m3u8','hls\/index.m3u8');
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
let data = JSON.parse(await request(url + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list;
|
||||
let videos = [];
|
||||
for (const vod of data) {
|
||||
videos.push({
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.pic,
|
||||
vod_remarks: '',
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
// 修复 Windows版 播放转圈圈
|
||||
import { load, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'duboku';
|
||||
let HOST = 'https://www.duboku.tv';
|
||||
// let HOST = 'https://u.duboku.io';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
'Referer': HOST
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(HOST);
|
||||
const $ = load(html);
|
||||
const class_parse = $('ul.nav-list > li > a[href*=vodtype]');
|
||||
let classes = [];
|
||||
classes = _.map(class_parse, (cls) => {
|
||||
let typeId = cls.attribs['href'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html','');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
let filterObj = {
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"陆剧","v":"13"},{"n":"日韩剧","v":"15"},{"n":"短剧","v":"21"},{"n":"台泰剧","v":"14"},{"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":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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":"情感"},{"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":"美国"}]},{"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"}]},{"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":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"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":"其他"}]},{"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"}]},{"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"}]}],
|
||||
"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":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"15":[{"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":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"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":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"14":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"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":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}]
|
||||
};
|
||||
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + '/vodshow/2--hits---------.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.myui-panel_bd > ul.myui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: it.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const link = HOST + '/vodshow/' + (extend.CateId || tid) + '-'+(extend.area || '')+'-'+(extend.by || 'time')+'-'+(extend.class || '')+'-'+(extend.lang || '')+'-'+(extend.letter || '')+'---' + (`${pg}`) + '---'+(extend.year || '')+'.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.myui-panel_bd > ul.myui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: it.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('ul.myui-page > li > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(HOST + '/voddetail/' + id + '.html');
|
||||
const $ = load(html);
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim(),
|
||||
vod_type: $('.myui-content__detail p:first a').text(),
|
||||
vod_actor: $('.myui-content__detail p:nth-child(5)').text().replace('主演:',''),
|
||||
vod_director: $('.myui-content__detail p:nth-child(6)').text().replace('导演:',''),
|
||||
vod_pic: $('div.myui-content__thumb img:first').attr('data-original'),
|
||||
vod_remarks :$('#rating:first span').text().replace(/\s{2,}/g, ' '),
|
||||
vod_content: $('span.data').text().trim(),
|
||||
};
|
||||
const playlist = _.map($('ul.sort-list > li > a'), (it) => {
|
||||
return it.children[0].data + '$' + it.attribs.href.replace(/\/vodplay\/(.*).html/g, '$1');
|
||||
});
|
||||
// vod.vod_play_from = key;
|
||||
vod.vod_play_from = '道长在线';
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = HOST + '/vodplay/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const js = JSON.parse($('script:contains(player_)').html().replace(/var player_.*=/,''));
|
||||
const playUrl = js.url;
|
||||
let headers = {
|
||||
"referer": HOST+"/static/player/vidjs.html",
|
||||
};
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
header: headers,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&wd=' + wd + '&limit=50')).list;
|
||||
let videos = [];
|
||||
for (const vod of data) {
|
||||
videos.push({
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.pic,
|
||||
vod_remarks: '',
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
limit: 50,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
import { Crypto, load, _, jinja2 } from './lib/cat.js';
|
||||
|
||||
let key = 'duboku';
|
||||
let url = 'https://www.duboku.tv';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || UA,
|
||||
'Referer': url
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const class_parse = $('ul.nav-list > li > a[href*=vodtype]');
|
||||
let classes = [];
|
||||
classes = _.map(class_parse, (cls) => {
|
||||
let typeId = cls.attribs['href'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html','');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
let filterObj = {
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"陆剧","v":"13"},{"n":"日韩剧","v":"15"},{"n":"短剧","v":"21"},{"n":"台泰剧","v":"14"},{"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":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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":"情感"},{"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":"美国"}]},{"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"}]},{"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":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"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":"其他"}]},{"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"}]},{"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"}]}],
|
||||
"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":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"15":[{"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":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"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":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"14":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"悬疑","v":"悬疑"},{"n":"武侠","v":"武侠"},{"n":"科幻","v":"科幻"},{"n":"都市","v":"都市"},{"n":"爱情","v":"爱情"},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春","v":"青春"},{"n":"偶像","v":"偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"乡村","v":"乡村"},{"n":"年代","v":"年代"},{"n":"警匪","v":"警匪"},{"n":"谍战","v":"谍战"},{"n":"冒险","v":"冒险"},{"n":"罪案","v":"罪案"},{"n":"宫廷","v":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}],
|
||||
"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":"宫廷"},{"n":"BL","v":"BL"}]},{"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"}]},{"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"}]}]
|
||||
};
|
||||
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = url + '/vodshow/2--hits---------.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.myui-panel_bd > ul.myui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: it.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
|
||||
const link = url + '/vodshow/' + (extend.CateId || tid) + '-'+(extend.area || '')+'-'+(extend.by || 'time')+'-'+(extend.class || '')+'-'+(extend.lang || '')+'-'+(extend.letter || '')+'---' + (`${pg}`) + '---'+(extend.year || '')+'.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.myui-panel_bd > ul.myui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const it = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: it.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('ul.myui-page > li > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(url + '/voddetail/' + id + '.html');
|
||||
const $ = load(html);
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim(),
|
||||
vod_type: $('.myui-content__detail p:first a').text(),
|
||||
vod_actor: $('.myui-content__detail p:nth-child(5)').text().replace('主演:',''),
|
||||
vod_director: $('.myui-content__detail p:nth-child(6)').text().replace('导演:',''),
|
||||
vod_pic: $('div.myui-content__thumb img:first').attr('data-original'),
|
||||
vod_remarks :$('#rating:first span').text().replace(/\s{2,}/g, ' '),
|
||||
vod_content: $('span.data').text().trim(),
|
||||
};
|
||||
const playlist = _.map($('ul.sort-list > li > a'), (it) => {
|
||||
return it.children[0].data + '$' + it.attribs.href.replace(/\/vodplay\/(.*).html/g, '$1');
|
||||
});
|
||||
vod.vod_play_from = key;
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = url + '/vodplay/' + id + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const js = JSON.parse($('script:contains(player_)').html().replace('var player_data=',''));
|
||||
const playUrl = js.url.replace('index.m3u8','hls\/index.m3u8');
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
let data = JSON.parse(await request(url + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list;
|
||||
let videos = [];
|
||||
for (const vod of data) {
|
||||
videos.push({
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.pic,
|
||||
vod_remarks: '',
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,261 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'ikanbot';
|
||||
let url = 'https://www.aikanbot.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || UA,
|
||||
'referer': url
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
function getClass($) {
|
||||
const nav = $('ul.nav-pills:eq(1) > li > a');
|
||||
let tags = {
|
||||
key: 'tag',
|
||||
name: '标签',
|
||||
value: _.map(nav, (n) => {
|
||||
return { n: n.children[0].data, v: n.attribs.href };
|
||||
}),
|
||||
};
|
||||
tags['init'] = tags.value[0].v;
|
||||
const title = $('title:first').text().split('-')[0].substring(2);
|
||||
return { cls: { type_id: tags.value[0].v, type_name: title }, tags: [tags] };
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [];
|
||||
let filterObj = {};
|
||||
for (const cate of ['/hot/index-movie-热门.html', '/hot/index-tv-热门.html']) {
|
||||
const html = await request(url + cate);
|
||||
const $ = load(html);
|
||||
const { cls, tags } = getClass($);
|
||||
classes.push(cls);
|
||||
filterObj[cls.type_id] = tags;
|
||||
}
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const items = $('div.v-list a.item');
|
||||
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
return {
|
||||
vod_id: item.attribs.href,
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: jsBase + base64Encode(img.attribs['data-src']),
|
||||
vod_remarks: '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const link = url + (extend.tag || tid).replace('.html', pg > 1 ? `-p-${pg}.html` : '.html');
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('div.v-list a.item');
|
||||
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
let videos = _.map(items, (item) => {
|
||||
const img = $(item).find('img:first')[0];
|
||||
return {
|
||||
vod_id: item.attribs.href,
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: jsBase + base64Encode(img.attribs['data-src']),
|
||||
vod_remarks: '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.page-more > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(url + id);
|
||||
const $ = load(html);
|
||||
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
const detail = $('div.detail');
|
||||
const remarks = $('span#line-tips').text();
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_pic: jsBase + base64Encode($('div.item-root > img')[0].attribs['data-src']),
|
||||
vod_remarks: '',
|
||||
vod_content: remarks || '',
|
||||
vod_name: $(detail).find('h2').text().trim(),
|
||||
vod_year: $(detail).find('h3:nth-child(3)').text(),
|
||||
vod_area: $(detail).find('h3:nth-child(4)').text(),
|
||||
vod_actor: $(detail).find('h3:nth-child(5)').text(),
|
||||
};
|
||||
const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2&token=9109590b194731fde643ce27924fcf6f', {
|
||||
headers: {
|
||||
Referer: 'play',
|
||||
'User-Agent': UA,
|
||||
},
|
||||
});
|
||||
const list = JSON.parse(res.content).data.list;
|
||||
let playlist = {};
|
||||
let arr = []
|
||||
for (const l of list) {
|
||||
const flagData = JSON.parse(l.resData);
|
||||
for (const f of flagData) {
|
||||
const from = f.flag;
|
||||
const urls = f.url;
|
||||
if (!from || !urls) continue;
|
||||
if (playlist[from]) continue;
|
||||
playlist[from] = urls;
|
||||
}
|
||||
}
|
||||
for (var key in playlist) {
|
||||
if ('kuaikan' == key) {
|
||||
arr.push({
|
||||
flag: '快看',
|
||||
url: playlist[key],
|
||||
sort: 4
|
||||
})
|
||||
} else if ('bfzym3u8' == key) {
|
||||
arr.push({
|
||||
flag: '暴风',
|
||||
url: playlist[key],
|
||||
sort: 1
|
||||
})
|
||||
} else if ('ffm3u8' == key) {
|
||||
arr.push({
|
||||
flag: '非凡',
|
||||
url: playlist[key],
|
||||
sort: 2
|
||||
})
|
||||
} else if ('lzm3u8' == key) {
|
||||
arr.push({
|
||||
flag: '量子',
|
||||
url: playlist[key],
|
||||
sort: 3
|
||||
})
|
||||
} else {
|
||||
arr.push({
|
||||
flag: key,
|
||||
url: playlist[key],
|
||||
sort: 5
|
||||
})
|
||||
}
|
||||
}
|
||||
arr.sort((a, b) => a.sort - b.sort);
|
||||
let playFrom = [];
|
||||
let playList = [];
|
||||
arr.map(val => {
|
||||
playFrom.push(val.flag);
|
||||
playList.push(val.url);
|
||||
})
|
||||
vod.vod_play_from = playFrom.join("$$$");
|
||||
vod.vod_play_url = playList.join("$$$");
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
function base64Encode(text) {
|
||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||
}
|
||||
|
||||
function base64Decode(text) {
|
||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {
|
||||
let what = segments[0];
|
||||
let url = base64Decode(segments[1]);
|
||||
if (what == 'img') {
|
||||
var resp = await req(url, {
|
||||
buffer: 2,
|
||||
headers: {
|
||||
Referer: url,
|
||||
'User-Agent': UA,
|
||||
},
|
||||
});
|
||||
return JSON.stringify({
|
||||
code: resp.code,
|
||||
buffer: 2,
|
||||
content: resp.content,
|
||||
headers: resp.headers,
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
code: 500,
|
||||
content: '',
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
const html = await request(url + '/search?q=' + wd + '&p=' + pg);
|
||||
const $ = load(html);
|
||||
const items = $('div.media');
|
||||
var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
let videos = _.map(items, (item) => {
|
||||
const a = $(item).find('a:first')[0];
|
||||
const img = $(item).find('img:first')[0];
|
||||
const remarks = $($(item).find('span.label')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: jsBase + base64Encode(img.attribs['data-src']),
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div.page-more > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
proxy: proxy,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import{Crypto,dayjs,jinja2,_}from"assets://js/lib/cat.js";let key="kkys",url="https://api1.baibaipei.com:8899",device={},siteKey="",siteType=0;async function request(reqUrl,postData,agentSp,get){var ts=dayjs().valueOf().toString(),rand=randStr(32),sign=Crypto.MD5("abcdexxxdd2daklmn25129_"+ts+"_"+rand).toString().toLowerCase(),agentSp={"user-agent":agentSp||device.ua},sign=(reqUrl.includes("baibaipei")&&(agentSp["device-id"]=device.id,agentSp["push-token"]="",agentSp.sign=sign,agentSp.time=ts,agentSp.md5=rand,agentSp.version="2.1.0",agentSp["system-model"]=device.model,agentSp["system-brand"]=device.brand,agentSp["system-version"]=device.release),await req(reqUrl,{method:get?"get":"post",headers:agentSp,data:postData||{},postType:get?"":"form"}));return sign.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype;cfg=await local.get(key,"device");if(0<cfg.length)try{device=JSON.parse(cfg)}catch(error){}_.isEmpty(device)&&((device=randDevice()).id=randStr(33).toLowerCase(),device.ua="okhttp/4.1.0",await local.set(key,"device",JSON.stringify(device)))}async function home(filter){var classes=[],filterObj={};for(const type of JSON.parse(await request(url+"/api.php/Index/getTopVideoCategory")).data){var typeName=type.nav_name;if("推荐"!=typeName){var typeId=type.nav_type_id.toString();if(classes.push({type_id:typeId,type_name:typeName}),filter)try{var key,filterAll=[],filterData=JSON.parse(await request(url+"/api.php/Video/getFilterType",{type:typeId})).data;for(key of Object.keys(filterData)){var itemValues=filterData[key];"plot"===key&&(key="class");let typeExtendName="";switch(key){case"class":typeExtendName="类型";break;case"area":typeExtendName="地区";break;case"lang":typeExtendName="语言";break;case"year":typeExtendName="年代";break;case"sort":typeExtendName="排序"}if(0!==typeExtendName.length){var newTypeExtend={key:key,name:typeExtendName},newTypeExtendKV=[];for(let j=0;j<itemValues.length;j++){var name=itemValues[j],value="sort"===key?j+"":"全部"===name?"0":name;newTypeExtendKV.push({n:name,v:value})}newTypeExtend.init="sort"===key?"1":newTypeExtendKV[0].v,newTypeExtend.value=newTypeExtendKV,filterAll.push(newTypeExtend)}}_.isEmpty(filterAll)||(filterObj[typeId]=filterAll)}catch(e){console.log(e)}}}return JSON.stringify({class:classes,filters:filterObj})}async function homeVod(){var videos=[];for(const item of JSON.parse(await request(url+"/api.php/Index/getHomePage",{type:1,p:1})).data.video)if(0===item.title.styleType)for(const vObj of item.list)videos.push({vod_id:vObj.vod_id,vod_name:vObj.vod_name,vod_pic:vObj.vod_pic,vod_remarks:vObj.vod_remarks||vObj.vod_score||""});return JSON.stringify({list:videos})}async function category(tid,pg,filter,extend){0==pg&&(pg=1);var reqUrl=url+"/api.php/Video/getFilterVideoList",extend=JSON.parse(jinja2(`{
|
||||
"type": "{{tid}}",
|
||||
"p": "{{pg}}",
|
||||
"area": "{{ext.area|default(0)}}",
|
||||
"year": "{{ext.year|default(0)}}",
|
||||
"sort": "{{ext.sort|default(0)}}",
|
||||
"class": "{{ext.class|default(0)}}"
|
||||
}`,{ext:extend,tid:tid,pg:pg})),tid=(console.log(extend),JSON.parse(await request(reqUrl,extend)).data),videos=[];for(const vod of tid.data)videos.push({vod_id:vod.vod_id,vod_name:vod.vod_name,vod_pic:vod.vod_pic,vod_remarks:vod.vod_remarks||vod.vod_score||""});return JSON.stringify({page:parseInt(tid.current_page),pagecount:parseInt(tid.last_page),limit:parseInt(tid.per_page),total:parseInt(tid.total),list:videos})}async function detail(id){var id=JSON.parse(await request(url+"/api.php/Video/getVideoInfo",{video_id:id})).data.video,vod={vod_id:id.vod_id,vod_name:id.vod_name,vod_pic:id.vod_pic,type_name:id.vod_class,vod_year:id.vod_year,vod_area:id.vod_area,vod_remarks:id.vod_remarks||"",vod_actor:id.vod_actor,vod_director:id.vod_director,vod_content:id.vod_content.trim()},playlist={};for(const item of id.vod_play){var from=item.playerForm;if("jp"!==from&&"xg"!==from){let urls=[];for(const u of item.url)urls.push(formatPlayUrl(vod.vod_name,u.title)+"$"+u.play_url);!playlist.hasOwnProperty(from)&&0<urls.length&&(playlist[from]=urls)}}parse=id.parse||[],vod.vod_play_from=_.keys(playlist).join("$$$");var vod_play_url=[];for(const urlist of _.values(playlist))vod_play_url.push(urlist.join("#"));return vod.vod_play_url=vod_play_url.join("$$$"),JSON.stringify({list:[vod]})}var parse=[];async function play(flag,id,flags){try{if((0<=id.indexOf("youku")||0<=id.indexOf("iqiyi")||0<=id.indexOf("v.qq.com")||0<=id.indexOf("pptv")||0<=id.indexOf("le.com")||0<=id.indexOf("1905.com")||0<=id.indexOf("mgtv"))&&0<parse.length)for(let index=0;index<parse.length;index++)try{var p=parse[index];let res=await req(p+id,{headers:{"user-agent":"okhttp/4.1.0"}});if((result=jsonParse(id,JSON.parse(res.content))).url)return result.parse=0,JSON.stringify(result)}catch(error){}if(0<=id.indexOf("jqq-")){var jqqHeader=await request(url+"/jqqheader.json",null,null,!0),jqqHeaders=JSON.parse(jqqHeader),ids=id.split("-"),jxJqq=await req("https://api.juquanquanapp.com/app/drama/detail?dramaId="+ids[1]+"&episodeSid="+ids[2]+"&quality=LD",{headers:jqqHeaders}),jqqInfo=JSON.parse(jxJqq.content);if(jqqInfo.data.playInfo.url)return JSON.stringify({parse:0,playUrl:"",url:jqqInfo.data.playInfo.url})}var result,res=await request(url+"/video.php",{url:id});return(result=jsonParse(id,JSON.parse(res).data)).url?(result.parse=0,JSON.stringify(result)):JSON.stringify({parse:0,playUrl:"",url:id})}catch(e){return console.log(e),JSON.stringify({parse:0,url:id})}}async function search(wd,quick){var videos=[];for(const vod of JSON.parse(await request(url+"/api.php/Search/getSearch",{key:wd,type_id:0,p:1})).data.data)videos.push({vod_id:vod.vod_id,vod_name:vod.vod_name,vod_pic:vod.vod_pic,vod_remarks:vod.vod_remarks||vod.vod_score||""});return JSON.stringify({list:videos})}const charStr="abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";function randStr(len,withNum){for(var _str="",containsNum=void 0===withNum||withNum,i=0;i<len;i++){var idx=_.random(0,containsNum?charStr.length-1:charStr.length-11);_str+=charStr[idx]}return _str}function randDevice(){return{brand:"Huawei",model:"HUAWEI Mate 20",release:"10",buildId:randStr(3,!1).toUpperCase()+_.random(11,99)+randStr(1,!1).toUpperCase()}}function formatPlayUrl(src,name){return name.trim().replaceAll(src,"").replace(/<|>|《|》/g,"").replace(/\$|#/g," ").trim()}function jsonParse(input,json){try{let url=json.url??"";if(!(url=url.startsWith("//")?"https:"+url:url).startsWith("http"))return{};let headers=json.headers||{};var ua=(json["user-agent"]||"").trim(),referer=(0<ua.length&&(headers["User-Agent"]=ua),(json.referer||"").trim());return 0<referer.length&&(headers.Referer=referer),_.keys(headers).forEach(hk=>{headers[hk]||delete headers[hk]}),{header:headers,url:url}}catch(error){console.log(error)}return{}}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
|
||||
@@ -0,0 +1 @@
|
||||
import{Crypto,dayjs,jinja2,Uri,_}from"assets://js/lib/cat.js";let key="kunyu77",url="http://api.tyun77.cn",device={},timeOffset=0,siteKey="",siteType=0;async function request(reqUrl,agentSp){var sj=dayjs().unix()-timeOffset,uri=new Uri(reqUrl);uri.addQueryParam("pcode","010110005"),uri.addQueryParam("version","2.1.6"),uri.addQueryParam("devid",device.id),uri.addQueryParam("package","com.sevenVideo.app.android"),uri.addQueryParam("sys","android"),uri.addQueryParam("sysver",device.release),uri.addQueryParam("brand",device.brand),uri.addQueryParam("model",device.model.replaceAll(" ","_")),uri.addQueryParam("sj",sj);let keys=[];for(var k,i=0;i<uri.queryPairs.length;i++)keys.push(uri.queryPairs[i][0]);keys=_.sortBy(keys,function(name){return name});let tkSrc=uri.path();for(k of keys){var v=uri.getQueryParamValue(k),v=encodeURIComponent(v);tkSrc+=v}tkSrc=tkSrc+sj+"XSpeUFjJ",console.log(tkSrc);reqUrl=Crypto.MD5(tkSrc).toString().toLowerCase(),console.log(reqUrl),agentSp={"user-agent":agentSp||"okhttp/3.12.0",t:sj,TK:reqUrl},sj=await req(uri.toString(),{headers:agentSp}),reqUrl=sj.headers.date,agentSp=sj.content,sj=dayjs(reqUrl).unix();return timeOffset=dayjs().unix()-sj,agentSp}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype;cfg=await local.get(key,"device");if(0<cfg.length)try{device=JSON.parse(cfg)}catch(error){}_.isEmpty(device)&&((device=randDevice()).id=randStr(32).toLowerCase(),device.ua="Dalvik/2.1.0 (Linux; U; Android "+device.release+"; "+device.model+" Build/"+device.buildId+")",await local.set(key,"device",JSON.stringify(device))),await request(url+"/api.php/provide/getDomain"),await request(url+"/api.php/provide/config"),await request(url+"/api.php/provide/checkUpgrade"),await request(url+"/api.php/provide/channel")}async function home(filter){var data=JSON.parse(await request(url+"/api.php/provide/filter")).data,classes=[],filterObj={},filterAll=[];for(const key in data)if(classes.push({type_id:key,type_name:data[key][0].cat}),filter)try{var typeId=key.toString();if(_.isEmpty(filterAll)){var filterData=JSON.parse(await request(url+"/api.php/provide/searchFilter?type_id=0&pagenum=1&pagesize=1")).data.conditions,year={key:"year",name:"年份",init:""};let yearValues=[];yearValues.push({n:"全部",v:""}),filterData.y.forEach(e=>{yearValues.push({n:e.name,v:e.value})}),year.value=yearValues;var area={key:"area",name:"地区",init:""};let areaValues=[];areaValues.push({n:"全部",v:""}),filterData.a.forEach(e=>{areaValues.push({n:e.name,v:e.value})}),area.value=areaValues;var type={key:"category",name:"类型",init:""};let typeValues=[];typeValues.push({n:"全部",v:""}),filterData.scat.forEach(e=>{typeValues.push({n:e.name,v:e.value})}),type.value=typeValues,filterAll.push(year,area,type)}_.isEmpty(filterAll)||(filterObj[typeId]=filterAll)}catch(e){console.log(e)}return JSON.stringify({class:classes,filters:filterObj})}async function homeVod(){var videos=[];for(const block of JSON.parse(await request(url+"/api.php/provide/homeBlock?type_id=0")).data.blocks){var name=block.block_name;if(!(0<=name.indexOf("热播")))for(const content of block.contents)videos.push({vod_id:content.id,vod_name:content.title,vod_pic:content.videoCover,vod_remarks:content.msg})}return JSON.stringify({list:videos})}async function category(tid,pg,filter,extend){var tid=url+"/api.php/provide/searchFilter?type_id="+tid+"&pagenum="+pg+"&pagesize=24&",pg=(tid+=jinja2("year={{ext.year}}&category={{ext.category}}&area={{ext.area}}",{ext:extend}),JSON.parse(await request(tid)).data),videos=[];for(const vod of pg.result)videos.push({vod_id:vod.id,vod_name:vod.title,vod_pic:vod.videoCover,vod_remarks:vod.msg});return JSON.stringify({page:parseInt(pg.page),pagecount:pg.pagesize,limit:24,total:pg.total,list:videos})}async function detail(id){var data=JSON.parse(await request(url+"/api.php/provide/videoDetail?ids="+id)).data,vod=(console.log(data),{vod_id:data.id,vod_name:data.videoName,vod_pic:data.videoCover,type_name:data.subCategory,vod_year:data.year,vod_area:data.area,vod_remarks:data.msg,vod_actor:data.actor,vod_director:data.director,vod_content:data.brief.trim()}),playlist={};for(const episode of JSON.parse(await request(url+"/api.php/provide/videoPlaylist?ids="+id)).data.episodes)for(const playurl of episode.playurls){var from=playurl.playfrom;let t=formatPlayUrl(vod.vod_name,playurl.title);0==t.length&&(t=playurl.title.trim()),playlist.hasOwnProperty(from)||(playlist[from]=[]),playlist[from].push(t+"$"+playurl.playurl)}vod.vod_play_from=_.keys(playlist).join("$$$");var vod_play_url=[];for(const urlist of _.values(playlist))vod_play_url.push(urlist.join("#"));return vod.vod_play_url=vod_play_url.join("$$$"),JSON.stringify({list:[vod]})}async function play(flag,id,flags){try{var data=JSON.parse(await request(url+"/api.php/provide/parserUrl?url="+id+"&retryNum=0")).data,playHeader=data.playHeader,jxUrl=data.url,res=await req(jxUrl,{headers:{"user-agent":"okhttp/3.12.0"}}),result=jsonParse(id,JSON.parse(res.content));retuLine truncated
|
||||
@@ -0,0 +1,173 @@
|
||||
// 修正:分类改静态 (网站频繁变动分类)
|
||||
import { load, _ } from "assets://js/lib/cat.js";
|
||||
|
||||
let key = "酷奇MV";
|
||||
let HOST = "https://www.kuqimv.com";
|
||||
let siteKey = "";
|
||||
let siteType = 0;
|
||||
const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36";
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
const headers = {
|
||||
"User-Agent": PC_UA,
|
||||
};
|
||||
if (referer) headers.referer = encodeURIComponent(referer);
|
||||
let res = await req(reqUrl, {
|
||||
method: mth || "get",
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: mth === "post" ? "form" : "",
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
var classes = [{ "type_id": "1", "type_name": "华语高清" }, { "type_id": "2", "type_name": "日韩精选" }, { "type_id": "3", "type_name": "欧美MV" }, { "type_id": "4", "type_name": "高清现场" }, { "type_id": "5", "type_name": "影视MV" }, { "type_id": "6", "type_name": "夜店视频" }, { "type_id": "7", "type_name": "车模视频" }, { "type_id": "8", "type_name": "热舞视频" }, { "type_id": "9", "type_name": "美女写真" }, { "type_id": "10", "type_name": "美女打碟" }];
|
||||
// const html = await request(HOST);
|
||||
// const $ = load(html);
|
||||
// const class_parse = $(".lei_fl > a[href*=play]");
|
||||
// const classes = [];
|
||||
// classes = _.map(class_parse, (cls) => {
|
||||
// const typeId = cls.attribs["href"];
|
||||
// typeId = typeId.substring(typeId.lastIndexOf("/") + 1).replace(".html", "");
|
||||
// return {
|
||||
// type_id: typeId,
|
||||
// type_name: cls.children[0].data,
|
||||
// };
|
||||
// });
|
||||
const filterObj = {};
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + "/play/9_1.html";
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $("div.mv_list > li");
|
||||
let videos = _.map(items, (it) => {
|
||||
const a = $(it).find("a:first")[0];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const singer = $($(it).find("div.singer")[0]).text().trim();
|
||||
const remarks = $($(it).find("span.lei_03")[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: "🎤" + singer + "|" + remarks || "",
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof pg == "undefined") pg = 1;
|
||||
const link = HOST + "/play/" + tid + "_" + pg + ".html";
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $("div.mv_list > li");
|
||||
let videos = _.map(items, (it) => {
|
||||
const a = $(it).find("a:first")[0];
|
||||
const img = $(it).find("img:first")[0];
|
||||
const singer = $($(it).find("div.singer")[0]).text().trim();
|
||||
const remarks = $($(it).find("span.lei_03")[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: "🎤" + singer + "|" + remarks || "",
|
||||
};
|
||||
});
|
||||
const hasMore = $("div.lei_page > a:contains(下一页)").length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: "",
|
||||
};
|
||||
const playlist = ["观看视频" + "$" + id];
|
||||
vod.vod_play_from = "道长在线";
|
||||
vod.vod_play_url = playlist.join("#");
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = HOST + "/skin/kuqimv/play.php";
|
||||
const ref = HOST + "/play/" + id + ".html";
|
||||
const pdata = { id: id };
|
||||
const playUrl = JSON.parse(await request(link, ref, "post", pdata)).url;
|
||||
const headers = {
|
||||
Referer: HOST,
|
||||
};
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
header: headers,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0 || typeof pg == "undefined") pg = 1;
|
||||
const link = HOST + "/search.php?key=" + wd + "&pages=" + pg;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $("div.video_list > li");
|
||||
let videos = _.map(items, (it) => {
|
||||
const a = $(it).find("a:first")[0];
|
||||
const singer = $($(it).find("div.singer")[0]).text().trim();
|
||||
const remarks = $($(it).find("span.lei_04")[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: "https://www.kuqimv.com/static/images/cover/singer.jpg",
|
||||
vod_remarks: "🎤" + singer + "|" + remarks || "",
|
||||
};
|
||||
});
|
||||
const hasMore = $("div.lei_page > a:contains(>)").length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
land: 1,
|
||||
ratio: 1.78,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1CiARhsYmdzX29wZW4uanMYLi9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuDENyeXB0bwpkYXlqcwJfBmtleQxkZXZpY2UOc2l0ZUtleRBzaXRlVHlwZRRhcHBWZXJzaW9uCmFwcFVBDmFwcERhdGEYbmF0aXZlRW5jb2RlBHBrCnhuYW1lGGJhc2U2NEVuY29kZRhiYXNlNjREZWNvZGUaZm9ybWF0UGxheVVybA5jaGFyU3RyDnJhbmRTdHIUcmFuZERldmljZQ5yZXF1ZXN0CGluaXQIaG9tZQ5ob21lVm9kDGltZ1VybBBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gMbGFvYmFpCjEuMS43sAlIQmtaRkJ0NmQzNTlkeEZrWVh0NmNYRVpmM3hvR1JrVUd4VTRkSDF3YzMxZWVIaDZWVkpGVVZwZGN3QkJDSEI0Wlh4M2RYVjJkWGxqQVhWMGVIMTJlbEZ6Y1hobGZIQkFaMDVaVEZCTUEyeDBXMXBzZFVKeFNuNWhZVDVuU1c5M1FGSkJkRjlFVFZJRURHSjdaVXBhWDFkT2IySkJiR0JPVTF3TVlBOU9la3hrY0ZSR1hBcDNYbWhqQlZWRWNtSUFUMmh4Q3d3TFNWMTZZUjBYT0JKOWVFdGpmRzV4RG44U1VHNWNmbHA5VDBGUVhHRnZaVndEY1FGaFpIUUhDRlJuWmdCaWZtWU5ZbmhpUmdOM1VFeFZla0lPV1ZKbkMxdHVmSFVFU2trK1prdDdhMkpxYkZnSFoxWlRYWEZYYmdCK1pVUnRTV0Z6VjFGL1gxQkZSbDV5VDJSZmNucEVBZ05XVVhRTGMzaHdWWEJNVDJGTVduQlJEUU5CWVhSWVFqZ05mWEFBRzBSZFJHaEdibVpNQVhkd1UxZEFSRXA0UXdNQ1lWMTdmMkYxQjE1M2NWaFdWM0phU1FCeVJIMWtjZ0pxWG5CTUVnaEFCZ0YrQ0FJU0IzQkJQbEZ2WDBwZlVGVkFkVzErYUZNSlVWTmRmWHBiY1d0bFUzNU1Wbk5qY0FaQVhBMXFDa0JMZGxsVFlWTkFBV2hmV21OQVRBeGpkbXBnWDNWMFFYRjBlSDg0VUVOd2RYVmxlSFF5SHhRWkZCeHhlbjBXYUdkN2VIQnlGSDk4YnhVZkZCa1V6YWJhY2RlZmdoamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OQJlAmECdAJyGGZyb21DaGFyQ29kZRRjaGFyQ29kZUF0BmVuYwxCYXNlNjQSc3RyaW5naWZ5CFV0ZjgKcGFyc2UIdHJpbRRyZXBsYWNlQWxsDnJlcGxhY2UCIAJuDHJhbmRvbQxIdWF3ZWkKYnJhbmQcSFVBV0VJIE1hdGUgMjAKbW9kZWwOcmVsZWFzZRZ0b1VwcGVyQ2FzZQ5idWlsZElkBnJlcQxtZXRob2QUVXNlci1BZ2VudBhodHRwX3JlZmVyZXIOUmVmZXJlcg5oZWFkZXJzCGRhdGEIcG9zdAhmb3JtEHBvc3RUeXBlDmNvbnRlbnQIc2tleQpzdHlwZQpsb2NhbA5pc0VtcHR5FnRvTG93ZXJDYXNlBGlkQERhbHZpay8yLjEuMCAoTGludXg7IFU7IEFuZHJvaWQgBDsgDiBCdWlsZC8CKQR1YTooTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIMQBOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzY4LjAuMzQ0MC43MCBNb2JpbGUgU2FmYXJpLzUzNy4zNilUaHR0cHM6Ly9sYWdzLm9zcy1jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20vCi5qc29uGCQ2YzFjZWY3OGFlPQhyc2FYElJTQS9QS0NTMQIvAm8CaQJzEGpzb25fdXJsHGNhdC9pbmRleC5qc29uCnRpdGxlBQZSe3wIdHlwZQV7fItXDHJlZHVjZQp0eXBlcwJ2CHNvcnQFkmOPXgZob3QIcHVzaAXYnqSLBe1w6JUF3o99jwxzZXJpYWwFjFvTfg50eXBlX2lkEnR5cGVfbmFtZQ5maWx0ZXJzFHN0YXJ0c1dpdGgIaHR0cA5pbWdfdXJsAnASY2F0X2xpc3QvCmJvb2tzDmJvb2tfaWQSYm9va19uYW1lBnBpYxBib29rX3BpYxhib29rX3JlbWFya3MIcGFnZQxzY3JvbGwScGFnZWNvdW50CmxpbWl0CnRvdGFsCGxpc3QKY29udC8KYXVkaW8IdGltZRJib29rX3llYXISYm9va19hcmVhDHRlbGxlchRib29rX2FjdG9yGmJvb2tfZGlyZWN0b3IQc3lub3BzaXMYYm9va19jb250ZW50Bm1hcBJwbGF5X2RhdGECIwVmTndTDnZvbHVtZXMIdXJscwIkAi0OcGxheV9pZAh1bml4Am0IbWQ1WAZhaWQGcGlkDmFwaV91cmwkZW5jb2RlVVJJQ29tcG9uZW50DHBhcmFtcw52ZXJzaW9uBnVybA5yZWZlcmVyDGhlYWRlchBzZWFyY2gwMA+kAwGmAwEAHagDAAMAqgMAAawDAAKuAwAOAAYBoAEAAAABHhKWAQCqAwAMrAMBDK4DAgywAwAJsgMBCbQDAgm2AwMJuAMECboDBQm8AwYJvgMHCcADCAnCAwkBxAMKAcYDCwHIAwwBygMNDcwDDgHOAw8B0AMQAdIDEQHUAxIB1gMTAdgDFAHaAxUB3AMWAYYCFwHeAxgB4AMZAagDGgEI6FK+Al8NAL4DXw4AvgRfDwC+BV8RAL4GXxIAvgdfEwC+CF8UAL4JXxUAvgpfFgC+C18XAL4MXxgAvg1fGQC+Dl8aAL4PXxsAvhBfHAC+EV8dACkE8QAAAOILXwQAv18FALNfBgAE8gAAAF8HAL9fCAALXwkAvQBfCgAE8wAAAF8LAL4BTeEAAABfDAAE9AAAAF8QACmkAwEEAQBUAgcUMTQ0OTY4Mjk0OQ5DBgEAAgICCAAAUgTqAwABAOwDAAEA7gMBACDwAwIBIGEAAL/HYQEAs8hiAQDP56PoPWIAADiTAAAAQvkAAADPQvoAAABiAQAkAQDQQvoAAABiAQDQ55wkAQCuJAEAnRFjAAAOYgEAkWMBAA7qvWIAACikAwEADkMGAcQDAQABBQEAKwHqAwABAKoDAAxlAABB+wAAAEH8AAAAQv0AAABlAABB+wAAAEH+AAAAQv8AAADPJAEAJQEApAMBAA5DBgHGAwEAAQYDADIB6gMAAQDCAwwAqgMADL4DCgjbZQEAQfsAAABB/gAAAEL9AAAAZQEAQfsAAABB/AAAAEL/AAAAzyQBACQBAGUCACMCAKQDAQAOQwYByAMCAAIEAAQ7AuoDAAEA7AMAAQDQQgABAAAkAABCAQEAAM+/JAIAQgIBAAC9AL0BM78kAgBCAgEAAL0CvQMzBAMBAAAkAgBCAAEAACUAAKQDAQAHDzwAfAA+AHwACjB8AAswB4IBAQEAOgAAAAgGAAAABAf1////CwAJIgAAAAkVAAAACQgAAAABPAAHAwAAAAE+AAcDAAAAAQowBwMAAAABCzAMAAoHCFwkfCMHTgEBACAAAAAIBgAAAAQH9f///wsACQgAAAABJAAHAwAAAAEjAAwACg5DBgHMAwIEAgUCAEkG6gMAAQDsAwABAO4DAAAA8AMBACCIBAABAOoDAwIgrgMCDMoDEAxhAQC/xwbQqxHpAw7QyLPJxc+j6DNhAwBlAABCBQEAALNiAQDoCWUBAOe0nuoIZQEA57sLniQCAMrDZQEAYgMAR53HkwLqysMopAMBAA5DBgHOAwAAAAYCAU0AzAMRAK4DAgwLBAYBAABMBwEAAAQIAQAATAkBAAC9AEwKAQAA27a0lu5CCwEAACQAAGUBAEIFAQAAuwu7YyQCAJ3btLSW7kILAQAAJAAAnUwMAQAAKKQDAQAHBDEwDmIGAdADAwADBQIAUQPqAwABAOwDAAEA7gMAAQC6AwgIvAMJCDgNAQAA0AvPTA4BAAALZQAATA8BAABlAQBBEAEAAEwRAQAATBIBAADREekDDgtMEwEAAAQUAQAAz6noCAQVAQAA6gK/TBYBAADui0EXAQAALqQDAQAOYgYB0gMBCAENDQDaAwnqAwABAOwDAAAA7gMAAQDqAwQAA+oDBgAg8AMAAgCIBAAFAOoDBwQw6gMIAAO0AwUItgMGCLADAwiyAwQIrgMCDM4DEgDMAxEAugMICNADEwC4AwcIxgMOAMADCwi8AwkIz0EYAQAAEWYAAA7PQRkBAAARZgEADgTZAAAAxzgaAQAAQkEAAABlAgDDJAIAi8zns6XoJmwaAAAAOJgAAABC/wAAAMQkAQARZgMADg7qC8lsBwAAAA7qAi9lBABCGwEAAGUDACQBABHofQ5eBQDsEWYDAA5lAwBeBgC7IO1CHAEAACQAAEMdAQAAZQMABB4BAABlAwBBCgEAAJ0EHwEAAJ1lAwBBCQEAAJ0EIAEAAJ1lAwBBDAEAAJ0EIQEAAJ1DIgEAADgaAQAAQkIAAABlAgDDOJgAAABC/QAAAGUDACQBACQDAIsOBCMBAABlAwBBCgEAAJ0EHwEAAJ1lAwBBCQEAAJ0EIAEAAJ1lAwBBDAEAAJ0EJAEAAJ0RZgcADmyuAAAAYQMAXggABEEAAAAEJQEAAGUJAJ0EJgEAAJ3ui8o4mAAAAEL/AAAAYgMAJAEAQRMBAABCXQAAAAQnAQAAJAEAwQS/wQVhBgDABH3qJ8EGwAU4KAEAAAQpAQAAs5a0lmIGALOWXgoAZQsA7bSWIgcAncEFgADo1w6DOJgAAABC/wAAAMAFJAEAEWYMAA5lDABBIgEAAAQqAQAAnWUJAJ1lBwCdEWYHAA4O6gzBB2wHAAAADuoCLwYupAMBAA5
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
(function(_0x24a2d2,_0x5e8b9c){const _0x5df84b=_0x8314,_0x37f89b=_0x24a2d2();while(!![]){try{const _0x2c4d4a=-parseInt(_0x5df84b(0x1f5))/0x1*(-parseInt(_0x5df84b(0x1f6))/0x2)+parseInt(_0x5df84b(0x200))/0x3+-parseInt(_0x5df84b(0x1eb))/0x4*(parseInt(_0x5df84b(0x1ea))/0x5)+parseInt(_0x5df84b(0x1ed))/0x6*(-parseInt(_0x5df84b(0x1e2))/0x7)+-parseInt(_0x5df84b(0x1fc))/0x8*(-parseInt(_0x5df84b(0x1f3))/0x9)+-parseInt(_0x5df84b(0x1ec))/0xa*(parseInt(_0x5df84b(0x1e4))/0xb)+-parseInt(_0x5df84b(0x1e8))/0xc;if(_0x2c4d4a===_0x5e8b9c)break;else _0x37f89b['push'](_0x37f89b['shift']());}catch(_0x42d019){_0x37f89b['push'](_0x37f89b['shift']());}}}(_0x3662,0xc4f19));const _0x5403fe=(function(){let _0x33197a=!![];return function(_0x25661f,_0x19ca25){const _0x33a295=_0x33197a?function(){const _0x229372=_0x8314;if(_0x19ca25){const _0x236c2e=_0x19ca25[_0x229372(0x1ee)](_0x25661f,arguments);return _0x19ca25=null,_0x236c2e;}}:function(){};return _0x33197a=![],_0x33a295;};}()),_0x1a5007=_0x5403fe(this,function(){const _0x516ca0=_0x8314;let _0x4c830a;try{const _0x1d20d6=Function(_0x516ca0(0x1e3)+_0x516ca0(0x1f0)+');');_0x4c830a=_0x1d20d6();}catch(_0x4bf3f9){_0x4c830a=window;}const _0x1f4472=_0x4c830a[_0x516ca0(0x1e6)]=_0x4c830a['console']||{},_0x2283f3=[_0x516ca0(0x1f2),_0x516ca0(0x1f1),_0x516ca0(0x1fe),'error',_0x516ca0(0x1f7),'table','trace'];for(let _0x3cf6e9=0x0;_0x3cf6e9<_0x2283f3[_0x516ca0(0x1fa)];_0x3cf6e9++){const _0x1e114f=_0x5403fe['constructor'][_0x516ca0(0x1f9)]['bind'](_0x5403fe),_0x1a6a55=_0x2283f3[_0x3cf6e9],_0xde1b62=_0x1f4472[_0x1a6a55]||_0x1e114f;_0x1e114f['__proto__']=_0x5403fe['bind'](_0x5403fe),_0x1e114f['toString']=_0xde1b62[_0x516ca0(0x1ef)][_0x516ca0(0x1f8)](_0xde1b62),_0x1f4472[_0x1a6a55]=_0x1e114f;}});_0x1a5007();import{_}from'./cat.js';import{initSome,setToken,setShareId,getVod,playerContent,playerContentByFlag}from'./ali_api.js';async function initAli(_0x3f10ce){await initSome(),await setToken(_0x3f10ce);}function _0x3662(){const _0x323ddf=['match','info','debug','4684176HcWJTq','1211idbeaQ','return\x20(function()\x20','99lEeIGW','-----playContent-------','console','split','19834608jNlQAs','isEmpty','100qLvEjd','123404oxGYjD','132210InTKLS','1722UonmUS','apply','toString','{}.constructor(\x22return\x20this\x22)(\x20)','warn','log','261ILDdxF','stringify','3049bfdvKa','206pnNeHh','exception','bind','prototype','length','trim','377872dYbZkZ'];_0x3662=function(){return _0x323ddf;};return _0x3662();}async function detailContent(_0x1094f1){const _0x55be27=_0x8314,_0x5c056c=/www.aliyundrive.com\/s\/([^\/]+)(\/folder\/([^\/]+))?/;let _0x4cb453=_0x1094f1[_0x55be27(0x1fb)](),_0x49069b=_0x4cb453[_0x55be27(0x1fd)](_0x5c056c);if(_[_0x55be27(0x1e9)](_0x49069b))return'';let _0x1e8a67=_0x49069b[0x1],_0x1943ab=_0x49069b['length']==0x3?_0x49069b[0x3]:'';await setShareId(_0x1e8a67);let _0x5cddd0=await getVod(_0x4cb453,_0x1943ab),_0x538833=JSON[_0x55be27(0x1f4)]({'list':[_0x5cddd0]});return console[_0x55be27(0x1ff)](_0x538833),_0x538833;}function _0x8314(_0x1e522d,_0x76b569){const _0x4e0a8c=_0x3662();return _0x8314=function(_0x1a5007,_0x5403fe){_0x1a5007=_0x1a5007-0x1e2;let _0x6a32f1=_0x4e0a8c[_0x1a5007];return _0x6a32f1;},_0x8314(_0x1e522d,_0x76b569);}async function playContent(_0x292f90,_0xb9135b,_0x254b54){const _0x1a1dc4=_0x8314;let _0x356b9e=_0xb9135b[_0x1a1dc4(0x1e7)]('+'),_0x241b39=_0x292f90=='原画'?await playerContent(_0x356b9e):await playerContentByFlag(_0x356b9e,_0x292f90);return console[_0x1a1dc4(0x1ff)](_0x1a1dc4(0x1e5)),console[_0x1a1dc4(0x1ff)](_0x241b39),_0x241b39;}export{initAli,detailContent,playContent};
|
||||
@@ -0,0 +1 @@
|
||||
const _0x475d0a=_0x1960;(function(_0x58bdb9,_0xcc9f09){const _0x54b68f=_0x1960,_0x24ba8c=_0x58bdb9();while(!![]){try{const _0x4f195b=parseInt(_0x54b68f(0xdd))/0x1+-parseInt(_0x54b68f(0x14d))/0x2+-parseInt(_0x54b68f(0x140))/0x3+parseInt(_0x54b68f(0x153))/0x4*(parseInt(_0x54b68f(0x115))/0x5)+-parseInt(_0x54b68f(0xf2))/0x6*(-parseInt(_0x54b68f(0x10d))/0x7)+parseInt(_0x54b68f(0x17f))/0x8+-parseInt(_0x54b68f(0x186))/0x9*(parseInt(_0x54b68f(0x152))/0xa);if(_0x4f195b===_0xcc9f09)break;else _0x24ba8c['push'](_0x24ba8c['shift']());}catch(_0x3fb5b5){_0x24ba8c['push'](_0x24ba8c['shift']());}}}(_0x2ae1,0x95c58));function _0x1960(_0x3b3566,_0x2e9adf){const _0x4fdc09=_0x2ae1();return _0x1960=function(_0x3a65fa,_0x389bb7){_0x3a65fa=_0x3a65fa-0xcb;let _0x369b0a=_0x4fdc09[_0x3a65fa];return _0x369b0a;},_0x1960(_0x3b3566,_0x2e9adf);}const _0x389bb7=(function(){let _0x1a7634=!![];return function(_0x5b6f22,_0x4aa7a8){const _0x30095d=_0x1a7634?function(){const _0x56cf0a=_0x1960;if(_0x4aa7a8){const _0x28af2f=_0x4aa7a8[_0x56cf0a(0xd4)](_0x5b6f22,arguments);return _0x4aa7a8=null,_0x28af2f;}}:function(){};return _0x1a7634=![],_0x30095d;};}()),_0x3a65fa=_0x389bb7(this,function(){const _0x43683a=_0x1960,_0x1b43ef=function(){const _0x112fa4=_0x1960;let _0x285433;try{_0x285433=Function(_0x112fa4(0x16e)+'{}.constructor(\x22return\x20this\x22)(\x20)'+');')();}catch(_0x5b0321){_0x285433=window;}return _0x285433;},_0x26fa0b=_0x1b43ef(),_0x1de15d=_0x26fa0b[_0x43683a(0xde)]=_0x26fa0b[_0x43683a(0xde)]||{},_0x58df9d=[_0x43683a(0x127),'warn',_0x43683a(0xd3),_0x43683a(0x178),_0x43683a(0x158),'table',_0x43683a(0x14c)];for(let _0x460471=0x0;_0x460471<_0x58df9d[_0x43683a(0x13c)];_0x460471++){const _0x21102a=_0x389bb7[_0x43683a(0x13d)][_0x43683a(0x12b)][_0x43683a(0xf5)](_0x389bb7),_0x3ab8f5=_0x58df9d[_0x460471],_0x1c5cad=_0x1de15d[_0x3ab8f5]||_0x21102a;_0x21102a[_0x43683a(0x160)]=_0x389bb7[_0x43683a(0xf5)](_0x389bb7),_0x21102a[_0x43683a(0x172)]=_0x1c5cad[_0x43683a(0x172)][_0x43683a(0xf5)](_0x1c5cad),_0x1de15d[_0x3ab8f5]=_0x21102a;}});_0x3a65fa();import{_,jinja2}from'./cat.js';import*as _0x5f2ae7 from'./utils.js';class User{constructor(){const _0x10e3ff=_0x1960;this[_0x10e3ff(0x16a)]='',this[_0x10e3ff(0x100)]='',this['tokenType']='',this[_0x10e3ff(0x131)]='',this[_0x10e3ff(0xee)]='';}static['objectFrom'](_0x168463){const _0x59ea84=_0x1960;if(_[_0x59ea84(0x187)](_0x168463))return new User();let _0x69ec9c=JSON['parse'](_0x168463),_0x4764ce=new User();return _0x4764ce[_0x59ea84(0x16a)]=_0x69ec9c['default_drive_id'],_0x4764ce['userId']=_0x69ec9c['user_id'],_0x4764ce['tokenType']=_0x69ec9c['token_type'],_0x4764ce[_0x59ea84(0x131)]=_0x69ec9c[_0x59ea84(0xfd)],_0x4764ce[_0x59ea84(0xee)]=_0x69ec9c['refresh_token'],_0x4764ce;}[_0x475d0a(0x180)](){const _0x3fecce=_0x475d0a;return _[_0x3fecce(0x187)](this[_0x3fecce(0x16a)])?'':this[_0x3fecce(0x16a)];}['getUserId'](){const _0x507a53=_0x475d0a;return _[_0x507a53(0x187)](this[_0x507a53(0x100)])?'':this[_0x507a53(0x100)];}[_0x475d0a(0xf7)](){const _0x363170=_0x475d0a;return _[_0x363170(0x187)](this[_0x363170(0x15b)])?'':this[_0x363170(0x15b)];}[_0x475d0a(0xd0)](){const _0x460056=_0x475d0a;return _[_0x460056(0x187)](this['accessToken'])?'':this[_0x460056(0x131)];}['getRefreshToken'](){const _0x454d4f=_0x475d0a;return _[_0x454d4f(0x187)](this[_0x454d4f(0xee)])?'':this[_0x454d4f(0xee)];}[_0x475d0a(0x170)](_0x47f5b0){this['refreshToken']=_0x47f5b0;}[_0x475d0a(0x102)](){const _0x5b2741=_0x475d0a;return this['getTokenType']()+'\x20'+this[_0x5b2741(0xd0)]();}['isAuthed'](){const _0x47d844=_0x475d0a;return this['getTokenType']()[_0x47d844(0x13c)]>0x0&&this[_0x47d844(0xd0)]()['length']>0x0;}[_0x475d0a(0x13f)](){const _0x3df0d2=_0x475d0a;return this[_0x3df0d2(0xee)]='',this[_0x3df0d2(0x131)]='',this;}async[_0x475d0a(0x117)](){const _0x308ba6=_0x475d0a;return await local[_0x308ba6(0x156)](_0x308ba6(0x162),_0x308ba6(0x12d),this[_0x308ba6(0x172)]()),this;}[_0x475d0a(0x172)](){const _0x409a17=_0x475d0a;var _0x23e797={'default_drive_id':this[_0x409a17(0x180)](),'user_id':this[_0x409a17(0x12c)](),'token_type':this[_0x409a17(0xf7)](),'access_token':this[_0x409a17(0xd0)](),'refresh_token':this[_0x409a17(0x112)]()};return JSON[_0x409a17(0xfb)](_0x23e797);}}class OAuth{constructor(){const _0x5bbff3=_0x475d0a;this[_0x5bbff3(0x15b)]='',this[_0x5bbff3(0x131)]='',this['refreshToken']='';}static[_0x475d0a(0xcf)](_0x31d5ae){const _0x40ac24=_0x475d0a;console[_0x40ac24(0x127)]('OAuthobjectFrom-----\x20'),console['log'](_0x31d5ae);if(_['isEmpty'](_0x31d5ae))return new OAuth();let _0x55f3e2=JSON[_0x40ac24(0x12e)](_0x31d5ae),_0x4d660e=new OAuth();return _0x4d660e[_0x40ac24(0x15b)]=_0x55f3e2[_0x40ac24(0x12f)],_0x4d660e['accessToken']=_0x55f3e2['access_token'],_0x4d660e[_0x40ac24(0xee)]=_0x55f3e2[_0x40ac24(0x143)],_0x4d660e;}[_0x475d0a(0xf7)](){const _0x5d51a7=_0x475d0a;return _[_0x5d51a7(0x187)](this['tokenType'])?'':this['tokenType'];}[_0x475d0a(0xd0)](){const _0x12f670=_0x475d0a;return _['isEmpty'](this['accessToken'])?'':this[_0x12f670(0x131)];Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
var e,pe,t=function(){return(t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},n={xml:!1,decodeEntities:!0},r={_useHtmlParser2:!0,xmlMode:!0};function i(e){return null!=e&&e.xml?"boolean"==typeof e.xml?r:t(t({},r),e.xml):null!=e?e:void 0}!function(e){e.Root="root",e.Text="text",e.Directive="directive",e.Comment="comment",e.Script="script",e.Style="style",e.Tag="tag",e.CDATA="cdata",e.Doctype="doctype"}(e=e||{});const s=e.Root,a=e.Text,o=e.Directive,c=e.Comment,u=e.Script,l=e.Style,h=e.Tag,f=e.CDATA,p=e.Doctype;class d{constructor(){this.parent=null,this.prev=null,this.next=null,this.startIndex=null,this.endIndex=null}get parentNode(){return this.parent}set parentNode(e){this.parent=e}get previousSibling(){return this.prev}set previousSibling(e){this.prev=e}get nextSibling(){return this.next}set nextSibling(e){this.next=e}cloneNode(e=!1){return L(this,e)}}class m extends d{constructor(e){super(),this.data=e}get nodeValue(){return this.data}set nodeValue(e){this.data=e}}class _ extends m{constructor(){super(...arguments),this.type=e.Text}get nodeType(){return 3}}class E extends m{constructor(){super(...arguments),this.type=e.Comment}get nodeType(){return 8}}class T extends m{constructor(t,n){super(n),this.name=t,this.type=e.Directive}get nodeType(){return 1}}class A extends d{constructor(e){super(),this.children=e}get firstChild(){var e;return null!=(e=this.children[0])?e:null}get lastChild(){return 0<this.children.length?this.children[this.children.length-1]:null}get childNodes(){return this.children}set childNodes(e){this.children=e}}class g extends A{constructor(){super(...arguments),this.type=e.CDATA}get nodeType(){return 4}}class v extends A{constructor(){super(...arguments),this.type=e.Root}get nodeType(){return 9}}class y extends A{constructor(t,n,r=[],i="script"===t?e.Script:"style"===t?e.Style:e.Tag){super(r),this.name=t,this.attribs=n,this.type=i}get nodeType(){return 1}get tagName(){return this.name}set tagName(e){this.name=e}get attributes(){return Object.keys(this.attribs).map(e=>{var t;return{name:e,value:this.attribs[e],namespace:null==(t=this["x-attribsNamespace"])?void 0:t[e],prefix:null==(t=this["x-attribsPrefix"])?void 0:t[e]}})}}function S(t){return t.type===e.Tag||t.type===e.Script||t.type===e.Style}function C(t){return t.type===e.CDATA}function N(t){return t.type===e.Text}function b(t){return t.type===e.Comment}function I(t){return t.type===e.Directive}function O(t){return t.type===e.Root}function k(e){return Object.prototype.hasOwnProperty.call(e,"children")}function L(e,t=!1){let n;if(N(e))n=new _(e.data);else if(b(e))n=new E(e.data);else if(S(e)){const r=t?D(e.children):[],i=new y(e.name,{...e.attribs},r);r.forEach(e=>e.parent=i),null!=e.namespace&&(i.namespace=e.namespace),e["x-attribsNamespace"]&&(i["x-attribsNamespace"]={...e["x-attribsNamespace"]}),e["x-attribsPrefix"]&&(i["x-attribsPrefix"]={...e["x-attribsPrefix"]}),n=i}else if(C(e)){const r=t?D(e.children):[],i=new g(r);r.forEach(e=>e.parent=i),n=i}else if(O(e)){const r=t?D(e.children):[],i=new v(r);r.forEach(e=>e.parent=i),e["x-mode"]&&(i["x-mode"]=e["x-mode"]),n=i}else{if(!I(e))throw new Error("Not implemented yet: "+e.type);{const t=new T(e.name,e.data);null!=e["x-name"]&&(t["x-name"]=e["x-name"],t["x-publicId"]=e["x-publicId"],t["x-systemId"]=e["x-systemId"]),n=t}}return n.startIndex=e.startIndex,n.endIndex=e.endIndex,null!=e.sourceCodeLocation&&(n.sourceCodeLocation=e.sourceCodeLocation),n}function D(e){var t=e.map(e=>L(e,!0));for(let e=1;e<t.length;e++)t[e].prev=t[e-1],t[e-1].next=t[e];return t}const R={withStartIndices:!1,withEndIndices:!1,xmlMode:!1};class w{constructor(e,t,n){this.dom=[],this.root=new v(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null,"function"==typeof t&&(n=t,t=R),"object"==typeof e&&(t=e,e=void 0),this.callback=null!=e?e:null,this.options=null!=t?t:R,this.elementCB=null!=n?n:null}onparserinit(e){this.parser=e}onreset(){this.dom=[],this.root=new v(this.dom),this.done=!1,this.tagStack=[this.root],this.lastNode=null,this.parser=null}onend(){this.done||(this.done=!0,this.parser=null,this.handleCallback(null))}onerror(e){this.handleCallback(e)}onclosetag(){this.lastNode=null;var e=this.tagStack.pop();this.options.withEndIndices&&(e.endIndex=this.parser.endIndex),this.elementCB&&this.elementCB(e)}onopentag(t,n){var r=this.options.xmlMode?e.Tag:void 0,t=new y(t,n,void 0,r);this.addNode(t),this.tagStack.push(t)}ontext(t){var n=this.lastNode;if(n&&n.type===e.Text)n.data+=t,this.options.withEndIndices&&(n.endIndex=this.parser.endIndex);else{const e=new _(t);this.addNode(e),this.lastNode=e}}oncomment(t){this.lastNode&&this.lastNode.type===e.Comment?this.lastNode.data+=t:(t=new E(t),this.addNode(t),this.lastNode=t)}oncommentend(){this.lastNode=null}oncdatastart(){var e=new _(""),t=new g([e]);this.addNode(t),e.parent=t,this.lastNode=e}oncdatLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
function compareTwoStrings(first,second){if((first=first.replace(/\s+/g,""))===(second=second.replace(/\s+/g,"")))return 1;if(first.length<2||second.length<2)return 0;var firstBigrams=new Map;for(let i=0;i<first.length-1;i++){var bigram=first.substring(i,i+2),count=firstBigrams.has(bigram)?firstBigrams.get(bigram)+1:1;firstBigrams.set(bigram,count)}let intersectionSize=0;for(let i=0;i<second.length-1;i++){const bigram=second.substring(i,i+2),count=firstBigrams.has(bigram)?firstBigrams.get(bigram):0;0<count&&(firstBigrams.set(bigram,count-1),intersectionSize++)}return 2*intersectionSize/(first.length+second.length-2)}function findBestMatch(mainString,targetStrings){var ratings=[];let bestMatchIndex=0;for(let i=0;i<targetStrings.length;i++){var currentTargetString=targetStrings[i],currentRating=compareTwoStrings(mainString,currentTargetString);ratings.push({target:currentTargetString,rating:currentRating}),currentRating>ratings[bestMatchIndex].rating&&(bestMatchIndex=i)}return{ratings:ratings,bestMatch:ratings[bestMatchIndex],bestMatchIndex:bestMatchIndex}}function lcs(str1,str2){if(!str1||!str2)return{length:0,sequence:"",offset:0};for(var sequence="",str1Length=str1.length,str2Length=str2.length,num=new Array(str1Length),maxlen=0,lastSubsBegin=0,i=0;i<str1Length;i++){for(var subArray=new Array(str2Length),j=0;j<str2Length;j++)subArray[j]=0;num[i]=subArray}for(var thisSubsBegin=null,i=0;i<str1Length;i++)for(j=0;j<str2Length;j++)str1[i]!==str2[j]?num[i][j]=0:(num[i][j]=0===i||0===j?1:1+num[i-1][j-1],num[i][j]>maxlen&&(maxlen=num[i][j],lastSubsBegin===(thisSubsBegin=i-num[i][j]+1)?sequence+=str1[i]:(lastSubsBegin=thisSubsBegin,sequence="",sequence+=str1.substr(lastSubsBegin,i+1-lastSubsBegin))));return{length:maxlen,sequence:sequence,offset:thisSubsBegin}}function findBestLCS(mainString,targetStrings){var results=[];let bestMatchIndex=0;for(let i=0;i<targetStrings.length;i++){var currentTargetString=targetStrings[i],currentLCS=lcs(mainString,currentTargetString);results.push({target:currentTargetString,lcs:currentLCS}),currentLCS.length>results[bestMatchIndex].lcs.length&&(bestMatchIndex=i)}return{allLCS:results,bestMatch:results[bestMatchIndex],bestMatchIndex:bestMatchIndex}}export{compareTwoStrings,findBestMatch,findBestLCS};
|
||||
@@ -0,0 +1,80 @@
|
||||
|
||||
|
||||
function isSub(ext) {
|
||||
return ext == "srt" || ext == "ass" || ext == "ssa";
|
||||
}
|
||||
|
||||
function getSize(size) {
|
||||
if (size <= 0) return "";
|
||||
if (size > 1024 * 1024 * 1024 * 1024.0) {
|
||||
size /= (1024 * 1024 * 1024 * 1024.0);
|
||||
return size.toFixed(2) + "TB";
|
||||
} else if (size > 1024 * 1024 * 1024.0) {
|
||||
size /= (1024 * 1024 * 1024.0);
|
||||
return size.toFixed(2) + "GB";
|
||||
} else if (size > 1024 * 1024.0) {
|
||||
size /= (1024 * 1024.0);
|
||||
return size.toFixed(2) + "MB";
|
||||
} else {
|
||||
size /= 1024.0;
|
||||
return size.toFixed(2) + "KB";
|
||||
}
|
||||
}
|
||||
|
||||
function removeExt(text) {
|
||||
return text.indexOf('.') > -1 ? text.substring(0, text.lastIndexOf(".")) : text;
|
||||
}
|
||||
|
||||
async function log(str) {
|
||||
console.debug(str);
|
||||
}
|
||||
|
||||
function isVideoFormat(url) {
|
||||
var RULE = /http((?!http).){12,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\?.*|http((?!http).){12,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video\/tos*/;
|
||||
if (url.indexOf("url=http") > -1 || url.indexOf(".js") > -1 || url.indexOf(".css") > -1 || url.indexOf(".html") > -1) {
|
||||
return false;
|
||||
}
|
||||
return RULE.test(url);
|
||||
}
|
||||
|
||||
function jsonParse(input, json) {
|
||||
var jsonPlayData = JSON.parse(json);
|
||||
var url = jsonPlayData.url;
|
||||
if (url.startsWith("//")) {
|
||||
url = "https:" + url;
|
||||
}
|
||||
if (!url.startsWith("http")) {
|
||||
return null;
|
||||
}
|
||||
if (url === input) {
|
||||
if (!isVideoFormat(url)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
var headers = {};
|
||||
var ua = jsonPlayData["user-agent"] || "";
|
||||
if (ua.trim().length > 0) {
|
||||
headers["User-Agent"] = " " + ua;
|
||||
}
|
||||
var referer = jsonPlayData.referer || "";
|
||||
if (referer.trim().length > 0) {
|
||||
headers["Referer"] = " " + referer;
|
||||
}
|
||||
var taskResult = {
|
||||
header: headers,
|
||||
url: url
|
||||
};
|
||||
return taskResult;
|
||||
}
|
||||
|
||||
function debug(obj) {
|
||||
for (var a in obj) {
|
||||
if (typeof(obj[a]) == "object") {
|
||||
debug(obj[a]); //递归遍历
|
||||
} else {
|
||||
console.debug(a + "=" + obj[a]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { isSub, getSize, removeExt, log, isVideoFormat, jsonParse, debug};
|
||||
@@ -0,0 +1,195 @@
|
||||
// 自动从 地址发布页 获取&跳转url地址
|
||||
import { load, _ } from './lib/cat.js';
|
||||
|
||||
var key = 'libvio';
|
||||
var HOST = 'https://libvio.app'; // 地址发布页
|
||||
var host = '';
|
||||
var siteKey = '';
|
||||
var siteType = 0;
|
||||
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
var res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
'Referer': host
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
var html = await request(HOST);
|
||||
var $ = load(html);
|
||||
host = $('div.content-top > ul > li').find('a:first')[0].attribs.href;
|
||||
// console.debug('libvio跳转地址 =====>' + urls); // js_debug.log
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
var html = await request(host);
|
||||
var $ = load(html);
|
||||
var class_parse = $('ul.stui-header__menu > li > a[href*=type]');
|
||||
var classes = [];
|
||||
classes = _.map(class_parse, (cls) => {
|
||||
var typeId = cls.attribs['href'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html','');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
var filterObj = {
|
||||
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'}]}]
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
var link = host + '/show/1--hits---------.html';
|
||||
var html = await request(link);
|
||||
var $ = load(html);
|
||||
var items = $('ul.stui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
var a = $(item).find('a:first')[0];
|
||||
var remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: a.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
var link = host + '/show/' + tid + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '--' + (extend.lang || '') + '----' + pg + '---' + (extend.year || '') + '.html';
|
||||
var html = await request(link);
|
||||
var $ = load(html);
|
||||
var items = $('ul.stui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
var a = $(item).find('a:first')[0];
|
||||
var remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: a.attribs['data-original'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
var hasMore = $('ul.stui-page__item > li > a:contains(下一页)').length > 0;
|
||||
var pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
var html = await request(host + '/detail/' + id + '.html');
|
||||
var $ = load(html);
|
||||
var vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim(),
|
||||
vod_type: $('.stui-content__detail p:first a').text(),
|
||||
vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:',''),
|
||||
vod_pic: $('.stui-content__thumb img:first').attr('data-original'),
|
||||
vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||
vod_content: $('span.detail-content').text().trim(),
|
||||
};
|
||||
var playMap = {};
|
||||
var tabs = $('div.stui-pannel__head > h3[class*=iconfont]');
|
||||
var playlists = $('ul.stui-content__playlist');
|
||||
_.each(tabs, (tab, i) => {
|
||||
var from = tab.children[0].data;
|
||||
var list = playlists[i];
|
||||
list = $(list).find('a');
|
||||
_.each(list, (it) => {
|
||||
var title = it.children[0].data;
|
||||
var playUrl = it.attribs.href;
|
||||
if (title.length == 0) title = it.children[0].data.trim();
|
||||
if (!playMap.hasOwnProperty(from)) {
|
||||
playMap[from] = [];
|
||||
}
|
||||
playMap[from].push( title + '$' + playUrl);
|
||||
});
|
||||
});
|
||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||
var urls = _.values(playMap);
|
||||
var vod_play_url = _.map(urls, (urlist) => {
|
||||
return urlist.join('#');
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
var html = await request(host + id);
|
||||
html = html.match(/r player_.*?=(.*?)</)[1];
|
||||
var js = JSON.parse(html);
|
||||
var url = js.url;
|
||||
var from = js.from;
|
||||
var next = js.link_next;
|
||||
var id = js.id;
|
||||
var nid = js.nid;
|
||||
var paurl = await request(host +'/static/player/' + from + '.js');
|
||||
paurl = paurl.match(/ src="(.*?)'/)[1];
|
||||
var purl = paurl + url + '&next=' + next + '&id=' + id + '&nid=' + nid;
|
||||
var playUrl = await request(purl);
|
||||
playUrl = playUrl.match(/var .* = '(.*?)'/)[1];
|
||||
// console.debug('libvio playUrl =====>' + playUrl); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
var data = JSON.parse(await request(host + '/index.php/ajax/suggest?mid=1&wd=' + wd + '&limit=50')).list;
|
||||
var videos = [];
|
||||
for (const vod of data) {
|
||||
videos.push({
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.pic,
|
||||
vod_remarks: '',
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
limit: 50,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
+200
@@ -0,0 +1,200 @@
|
||||
import { Crypto, _ } from './lib/cat.js';
|
||||
|
||||
let key = 'mtsp';
|
||||
let main = 'http://mt77.top';
|
||||
let url = '';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
let searchKeys = [];
|
||||
|
||||
let tags = 'JTVCJTIyJUU2JUI1JTkzJUU1JUFGJTg2JUU2JUJGJTgwJUU2JTgzJTg1JTIyJTJDJTIyJUU2JTkwJTlDJUU2JTlGJUE1JUU1JUFFJTk4JTIyJTJDJTIyJUU1JUE1JUIzJUU0JUJCJTg2JTIyJTJDJTIyJUU1JTkwJThFJUU1JTg1JUE1JTIyJTJDJTIyJUU3JUJFJThFJUU0JUI5JUIzJUU1JUI3JUE4JUU4JTgzJUI4JTIyJTJDJTIyJUU1JThGJUEzJUU0JUJBJUE0JUU1JThGJUEzJUU3JTg4JTg2JTIyJTJDJTIyJUU1JTg2JTg1JUU1JUIwJTg0JTIyJTJDJTIyJUU1JUE1JUIzJUU0JUI4JThBJTIyJTJDJTIyJUU3JUJFJThFJUU4JTg1JUJGJTIyJTJDJTIyJUU3JUIyJUJFJUU1JTkzJTgxJTIyJTJDJTIyJUU0JUI4JTlEJUU4JUEyJTlDJTIyJTJDJTIyJUU1JUIwJTkxJUU1JUE1JUIzJTIyJTJDJTIyJUU1JTg4JUI2JUU2JTlDJThEJTIyJTJDJTIyJUU3JUJFJUE0UCUyMiUyQyUyMiVFNyU5OSVCRCVFOCU5OSU4RSUyMiUyQyUyMiVFNiU4MyU4NSVFOCVCNiVBMyVFOCVBRiVCMSVFNiU4MyU5MSUyMiUyQyUyMiVFOSU4MSU5MyVFNSU4NSVCNyUyMiUyQyUyMiVFNSVBNSVCMyVFNyVBNSU5RSUyMiUyQyUyMiVFOSVCQSVCQiVFOCVCMSU4NiVFNCVCQyVBMCVFNSVBQSU5MiUyMiUyQyUyMiVFOSVBMiU5QyVFNSVCMCU4NCUyMiUyQyUyMiVFNSVBRCVBNiVFNyU5NCU5RiUyMiUyQyUyMiVFNCVCQSVCQSVFNSVBNiVCQiUyMiUyQyUyMiVFNyVCNCVBMCVFNCVCQSVCQSUyMiUyQyUyMiVFNiVCNSVCNCVFNSVBRSVBNCUyMiUyQyUyMiVFOSU4NSU5MiVFNSVCQSU5NyUyMiUyQyUyMiVFNyU4NiU5RiVFNSVBNSVCMyUyMiUyQyUyMiVFOCU4NyVBQSVFNiU4QiU4RCUyMiUyQyUyMiVFNSVCMCU5MSVFNSVBNiU4NyUyMiUyQyUyMiVFNSU4OSVBNyVFNiU4MyU4NSUyMiUyQyUyMiVFNCVCOSVCMyVFNCVCQSVBNCUyMiUyQyUyMiVFNiU4OCVCNyVFNSVBNCU5NiUyMiUyQyUyMlNXQUclMjIlMkMlMjIlRTUlQTUlQjMlRTQlQjglQkIlRTYlOTIlQUQlMjIlMkMlMjIlRTQlQjglQUQlRTYlOTYlODclRTUlQUQlOTclRTUlQjklOTUlMjIlMkMlMjIlRTQlQjklQjElRTQlQkMlQTYlMjIlMkMlMjIlRTglQjAlODMlRTYlOTUlOTklMjIlMkMlMjIlRTYlOEQlODYlRTclQkIlOTElMjIlMkMlMjIlRTYlQTglQTElRTclODklQjklMjIlMkMlMjIlRTclOUIlQjQlRTYlOTIlQUQlMjIlMkMlMjI5MSVFNSU4OCVCNiVFNyU4OSU4NyVFNSU4RSU4MiUyMiUyQyUyMiVFOSU4NyU4RSVFNiU4OCU5OCUyMiUyQyUyMiVFNSU4MSVCNyVFNiU4QiU4RCUyMiUyQyUyMiVFNSU4QiVCRSVFNiU5MCVBRCUyMiUyQyUyMiVFNiU5MSU4NCVFNSU4MyU4RiVFNSVBNCVCNCUyMiUyQyUyMiVFNSU4NyVCQSVFOCVCRCVBOCUyMiUyQyUyMiVFNyVCRCU5MSVFNyVCQSVBMiUyMiUyQyUyMiVFNSVCNyVBOCVFNiVBMCVCOSUyMiUyQyUyMiVFNiVBQyVBNyVFNyVCRSU4RSUyMiUyQyUyMmNvc3BsYXklMjIlMkMlMjIlRTUlQkMlQkElRTUlQTUlQjglMjIlMkMlMjIlRTUlQTQlQTklRTclQkUlOEUlRTQlQkMlQTAlRTUlQUElOTIlMjIlMkMlMjIlRTYlOEMlODklRTYlOTElQTklMjIlMkMlMjIzRCVFNSU4QSVBOCVFNiVCQyVBQiUyMiUyQyUyMiVFOCU5MCU5RCVFOCU4RSU4OSUyMiUyQyUyMiVFNSVBNyU5MCVFNSVBNiVCOSVFOCU4QSVCMSUyMiUyQyUyMiVFNSU4QSU5RSVFNSU4NSVBQyVFNSVBRSVBNCUyMiUyQyUyMiVFOCVCRCVBNiVFOSU5QyU4NyUyMiUyQyUyMiVFNSU4MSVCNyVFNiU4MyU4NSUyMiUyQyUyMiVFNiU5RSU5QyVFNSU4NiVCQiVFNCVCQyVBMCVFNSVBQSU5MiUyMiUyQyUyMiVFOCU4MiU5QiVFNCVCQSVBNCUyMiUyQyUyMlNNJTIyJTJDJTIyJUU5JTg3JThEJUU1JThGJUEzJTIyJTJDJTIyJUU2JUIzJUIzJUU4JUExJUEzJTIyJTJDJTIyU1BBJTIyJTJDJTIyJUU2JThFJUEyJUU4JThBJUIxJTIyJTJDJTIyJUU4JUI2JUIzJUU0JUJBJUE0JTIyJTJDJTIyJUU3JUE5JUJBJUU1JUE3JTkwJTIyJTJDJTIyJUU4JTlDJTlDJUU2JUExJTgzJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JTk1JTk5JUU1JUI4JTg4JTIyJTJDJTIyJUU2JUJEJUFFJUU1JTkwJUI5JTIyJTJDJTIyJUU5JTk3JUE4JUU0JUJBJThCJUU0JUJCJUI2JTIyJTJDJTIyJUU1JUE1JUIzJUU1JTkwJThDJTIyJTJDJTIyJUU2JThBJTgwJUU1JUI4JTg4JTIyJTJDJTIyJUU3JUIyJUJFJUU0JUI4JTlDJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JTk1JTk5JUU1JUFFJUE0JTIyJTJDJTIyJUU4JUJGJUI3JUU1JUE1JUI4JTIyJTJDJTIyJUU2JThEJUEyJUU1JUE2JUJCJTIyJTJDJTIyS1RWJTIyJTJDJTIyJUU2JTk4JTlGJUU3JUE5JUJBJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JThBJUE0JUU1JUEzJUFCJTIyJTJDJTIyJUU2JUFGJThEJUU1JUE1JUIzJTIyJTVE';
|
||||
const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36';
|
||||
async function request(reqUrl, agentSp) {
|
||||
const res = await req(reqUrl, {
|
||||
headers: {
|
||||
'User-Agent': agentSp || UA,
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
// 获取url
|
||||
let html = await request(main);
|
||||
url = html.match(/location\.href="(.*)"/)[1].replace('https', 'http');
|
||||
tags = JSON.parse(decodeURIComponent(base64Decode(tags)));
|
||||
searchKeys = cfg.tags || [];
|
||||
let mainJs = await request(url + '/main.js');
|
||||
url = mainJs.match(/apiurl = '(.*)'/)[1].replace('https', 'http');
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [];
|
||||
let filterObj = {};
|
||||
let tagIdx = 1;
|
||||
_.each(_.chunk(tags, 24), (array) => {
|
||||
const subs = _.chunk(array, 8);
|
||||
let tid = '';
|
||||
let init = '';
|
||||
for (let i = 0; i < subs.length; i++) {
|
||||
let tt = {
|
||||
key: 'tag',
|
||||
name: '',
|
||||
init: '',
|
||||
value: _.map(subs[i], (e) => {
|
||||
return { n: e, v: e };
|
||||
}),
|
||||
};
|
||||
if (i == 0) {
|
||||
init = tt.value[0].v;
|
||||
tt['init'] = init;
|
||||
tid = tt.value[0].v;
|
||||
filterObj[tid] = [tt];
|
||||
} else {
|
||||
tt['init'] = init;
|
||||
filterObj[tid].push(tt);
|
||||
}
|
||||
}
|
||||
classes.push({
|
||||
type_id: tid,
|
||||
type_name: '综合' + tagIdx,
|
||||
land: 1,
|
||||
});
|
||||
tagIdx++;
|
||||
});
|
||||
|
||||
_.each(searchKeys, (s) => {
|
||||
classes.push({
|
||||
type_id: 'sc_' + s,
|
||||
type_name: s,
|
||||
land: 1,
|
||||
});
|
||||
});
|
||||
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let link = url;
|
||||
if (tid.startsWith('sc_')) {
|
||||
link = link + '/search?q=' + encodeURIComponent(tid.substr(3)) + '&page=' + pg + '&size=16';
|
||||
} else {
|
||||
link = link + '/vodList?&tag=' + (extend.tag || tid) + '&page=' + pg + '&size=16';
|
||||
}
|
||||
const data = decrypt(JSON.parse(await request(link)).data);
|
||||
let videos = [];
|
||||
for (const vod of data.movies) {
|
||||
if (!vod.id) continue;
|
||||
videos.push({
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.thumb,
|
||||
vod_remarks: vod.views,
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
page: parseInt(data.page),
|
||||
pagecount: _.ceil(data.totals / 16),
|
||||
limit: 16,
|
||||
total: data.totals,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const link = url + '/vodDetail?id=' + id;
|
||||
const data = decrypt(JSON.parse(await request(link)).data).info;
|
||||
let desc = data.name + '\n';
|
||||
if (data.views) {
|
||||
desc += '观看次数:' + data.views + '\n';
|
||||
}
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_name: data.name,
|
||||
vod_pic: data.thumb,
|
||||
type_name: (data.tag || []).join(','),
|
||||
vod_year: data.date,
|
||||
vod_content: desc,
|
||||
};
|
||||
vod.vod_play_from = 'm3u8';
|
||||
let urls = [];
|
||||
if (data.m3u8) {
|
||||
urls.push('主力$' + data.m3u8);
|
||||
}
|
||||
if (data.m3u8bak) {
|
||||
urls.push('备用$' + data.m3u8bak);
|
||||
}
|
||||
vod.vod_play_url = urls.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let page = pg || 1;
|
||||
if (page == 0) page = 1;
|
||||
let videos = [];
|
||||
let link = url + '/search?q=' + encodeURIComponent(wd) + '&page=' + page + '&size=16';
|
||||
const data = decrypt(JSON.parse(await request(link)).data);
|
||||
for (const vod of data.movies) {
|
||||
if (!vod.id) continue;
|
||||
videos.push({
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.thumb,
|
||||
vod_remarks: vod.views,
|
||||
});
|
||||
}
|
||||
|
||||
return JSON.stringify({
|
||||
page: parseInt(data.page),
|
||||
pagecount: _.ceil(data.totals / 16),
|
||||
land: 1,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function decrypt(content) {
|
||||
return JSON.parse(aesX('AES/CBC/PKCS7', false, content, true, 'F31F2A75FBF94099', '12345BCA901ER456', false));
|
||||
}
|
||||
|
||||
function base64Encode(text) {
|
||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||
}
|
||||
|
||||
function base64Decode(text) {
|
||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,250 @@
|
||||
import { _ } from "assets://js/lib/cat.js";
|
||||
let key = '我的哔哩';
|
||||
let HOST = 'https://api.bilibili.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.361";
|
||||
// let cookie = "DedeUserID=690781341;DedeUserID__ckMd5=cabc96906269c5b6;SESSDATA=2245ba24%2C1684212125%2C466fd%2Ab2;bili_jct=de6fdb60c10f8a83910aa55d79407b4e;"; // 可更换成自己的cookie
|
||||
let cookie = "https://ghproxy.net/https://raw.githubusercontent.com/FongMi/CatVodSpider/main/txt/cookie.txt"; // 可更换成自己的cookie
|
||||
|
||||
async function request(reqUrl) {
|
||||
const res = await req(reqUrl, {
|
||||
headers: getMb(),
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
if (cookie.startsWith('http')) cookie = await request(cookie);
|
||||
// console.debug('我的哔哩 cookie =====>' + cookie); // js_debug.log
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [{"type_id":"经典无损音乐合集","type_name":"经典无损音乐合集"},{"type_id":"帕梅拉","type_name":"帕梅拉"},{"type_id":"太极拳","type_name":"太极拳"},{"type_id":"健身","type_name":"健身"},{"type_id":"舞蹈","type_name":"舞蹈"},{"type_id":"音乐","type_name":"音乐"},{"type_id":"歌曲","type_name":"歌曲"},{"type_id":"MV4K","type_name":"MV"},{"type_id":"演唱会4K","type_name":"演唱会"},{"type_id":"白噪音4K","type_name":"白噪音"},{"type_id":"知名UP主","type_name":"知名UP主"},{"type_id":"说案","type_name":"说案"},{"type_id":"解说","type_name":"解说"},{"type_id":"演讲","type_name":"演讲"},{"type_id":"时事","type_name":"时事"},{"type_id":"探索发现超清","type_name":"探索发现"},{"type_id":"纪录片超清","type_name":"纪录片"},{"type_id":"平面设计教学","type_name":"平面设计教学"},{"type_id":"软件教程","type_name":"软件教程"},{"type_id":"实用教程","type_name":"实用教程"},{"type_id":"旅游","type_name":"旅游"},{"type_id":"风景4K","type_name":"风景"},{"type_id":"食谱","type_name":"食谱"},{"type_id":"美食超清","type_name":"美食"},{"type_id":"搞笑","type_name":"搞笑"},{"type_id":"球星","type_name":"球星"},{"type_id":"动物世界超清","type_name":"动物世界"},{"type_id":"相声小品","type_name":"相声小品"},{"type_id":"戏曲","type_name":"戏曲"},{"type_id":"儿童","type_name":"儿童"},{"type_id":"小姐姐4K","type_name":"小姐姐"},{"type_id":"热门","type_name":"热门"},{"type_id":"旅行探险","type_name":"旅行探险"}];
|
||||
let filterObj = {
|
||||
"经典无损音乐合集":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"经典无损音乐合集"},{"n":"粤语","v":"粤语歌曲超清"},{"n":"热榜","v":"2022年热们歌曲"},{"n":"经典","v":"经典老歌"},{"n":"古风","v":"古风歌曲"},{"n":"闽南","v":"闽南语歌曲"},{"n":"舞曲","v":"DJ歌曲"},{"n":"翻唱","v":"网红翻唱歌曲"},{"n":"音乐","v":"音乐 4k"},{"n":"阿黛尔","v":"阿黛尔演唱会超清超清"},{"n":"Blackpink","v":"blackpink演唱会超清"},{"n":"Beyond","v":"beyond演唱会超清"},{"n":"坂井泉水","v":"坂井泉水演唱会超清"},{"n":"宝丽金","v":"宝丽金演唱会超清"},{"n":"布兰妮","v":"布兰妮演唱会超清"},{"n":"陈瑞","v":"陈瑞演唱会超清"},{"n":"陈奕迅","v":"陈奕迅演唱会超清"},{"n":"崔健","v":"崔健演唱会超清"},{"n":"Coldplay","v":"coldplay演唱会超清"},{"n":"陈慧娴","v":"陈慧娴演唱会超清"},{"n":"陈百强","v":"陈百强演唱会超清"},{"n":"陈淑桦","v":"陈淑桦演唱会超清"},{"n":"陈慧琳","v":"陈慧琳演唱会超清"},{"n":"邓丽君","v":"邓丽君演唱会超清"},{"n":"邓紫棋","v":"邓紫棋演唱会超清"},{"n":"刀郎","v":"刀郎演唱会超清"},{"n":"达明一派","v":"刘以达歌曲"},{"n":"费玉清","v":"费玉清演唱会超清"},{"n":"谷村新司","v":"谷村新司演唱会超清"},{"n":"郭富城","v":"郭富城演唱会超清"},{"n":"邰正宵","v":"邰正宵演唱会超清"},{"n":"关淑怡","v":"关淑怡演唱会超清"},{"n":"黄凯芹","v":"黄凯芹演唱会超清"},{"n":"黑豹乐队","v":"H黑豹乐队"},{"n":"降央卓玛","v":"降央卓玛演唱会超清"},{"n":"江慧","v":"江慧歌曲"},{"n":"吉永小百合","v":"吉永小百合歌曲"},{"n":"金庸","v":"金庸影视歌曲"},{"n":"刘德华","v":"刘德华演唱会超清"},{"n":"Lady Gaga","v":"Lady Gaga演唱会超清"},{"n":"龙飘飘","v":"龙飘飘演唱会超清"},{"n":"罗百吉","v":"罗百吉演唱会超清"},{"n":"罗大佑","v":"罗大佑演唱会超清"},{"n":"林志炫","v":"林志炫演唱会超清"},{"n":"林忆莲","v":"林忆莲演唱会超清"},{"n":"李知恩","v":"李知恩演唱会超清"},{"n":"梁静茹","v":"梁静茹演唱会超清"},{"n":"冷漠","v":"冷漠演唱会超清"},{"n":"李克勤","v":"李克勤演唱会超清"},{"n":"林子祥","v":"林子祥演唱会超清"},{"n":"黎明","v":"黎明演唱会超清"},{"n":"刘若英","v":"刘若英演唱会超清"},{"n":"McHotdog","v":"MC Hotdog演唱会超清"},{"n":"莫文蔚","v":"莫文蔚演唱会超清"},{"n":"孟庭苇","v":"孟庭苇演唱会超清"},{"n":"麦当娜","v":"麦当娜演唱会超清"},{"n":"迈克杰克逊","v":"迈克杰克逊演唱会超清"},{"n":"雅尼紫禁城","v":"雅尼紫禁城演唱会超清"},{"n":"潘越云","v":"潘越云演唱会超清"},{"n":"潘美辰","v":"潘美辰演唱会超清"},{"n":"齐秦","v":"齐秦演唱会超清"},{"n":"祁美云","v":"祁美云演唱会超清"},{"n":"任贤齐","v":"任贤齐演唱会超清"},{"n":"苏慧伦","v":"苏慧伦演唱会超清"},{"n":"唐朝乐队","v":"唐朝乐队"},{"n":"童安格","v":"童安格演唱会超清"},{"n":"TFBOYS","v":"TFBOYS演唱会超清"},{"n":"太极乐队","v":"太极乐队演唱会超清"},{"n":"唐朝摇滚","v":"唐朝摇滚演唱会超清"},{"n":"谭咏麟","v":"谭咏麟演唱会超清"},{"n":"王琪","v":"王琪歌曲"},{"n":"伍珂玥","v":"伍珂玥演唱会超清"},{"n":"王杰","v":"王杰演唱会超清"},{"n":"伍佰","v":"伍佰演唱会超清"},{"n":"温兆伦","v":"温兆伦演唱会超清"},{"n":"王菲","v":"王菲演唱会超清"},{"n":"熊天平","v":"熊天平演唱会超清"},{"n":"徐小凤","v":"徐小凤演唱会超清"},{"n":"席琳迪翁","v":"席琳迪翁演唱会超清"},{"n":"许嵩","v":"黄许嵩演唱会超清"},{"n":"许美静","v":"许美静演唱会超清"},{"n":"许冠杰","v":"许冠杰演唱会超清"},{"n":"小虎队","v":"小虎队演唱会超清"},{"n":"许巍","v":"许巍演唱会超清"},{"n":"叶启田","v":"叶启田演唱会超清"},{"n":"叶玉卿","v":"叶玉卿演唱会超清"},{"n":"杨千嬅","v":"杨千嬅演唱会超清"},{"n":"左麟右李","v":"左麟右李演唱会超清"},{"n":"赵传","v":"赵传演唱会超清"},{"n":"周华健","v":"周华健演唱会超清"},{"n":"周启生","v":"周启生演唱会超清"},{"n":"张信哲","v":"张信哲演唱会超清"},{"n":"周慧敏","v":"周慧敏演唱会超清"},{"n":"张碧晨","v":"张碧晨演唱会超清"},{"n":"中岛美雪","v":"中岛美雪演唱会超清"},{"n":"张学友","v":"张学友演唱会超清"},{"n":"猪哥亮","v":"猪哥亮歌曲"},{"n":"周杰伦","v":"周杰伦演唱会超清"},{"n":"周深","v":"周深演唱会超清"},{"n":"张蔷","v":"张蔷演唱会超清"},{"n":"张帝","v":"张帝演唱会超清"},{"n":"张国荣","v":"张国荣演唱会超清"},{"n":"郑钧","v":"郑钧演唱会超清"},{"n":"张楚","v":"张楚演唱会超清"},{"n":"张真","v":"张真演唱会超清"},{"Line truncated
|
||||
"帕梅拉":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"帕梅拉"},{"n":"瘦腿","v":"帕梅拉瘦腿"},{"n":"腹部","v":"帕梅拉腹部"},{"n":"手臂","v":"帕梅拉手臂"},{"n":"热身","v":"帕梅拉热身"},{"n":"舞蹈","v":"帕梅拉舞蹈"},{"n":"燃脂","v":"帕梅拉燃脂"},{"n":"有氧","v":"帕梅拉有氧"},{"n":"拉伸","v":"帕梅拉拉伸"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"太极拳":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"太极拳"},{"n":"邱慧芳","v":"太极拳邱慧芳"},{"n":"陈氏","v":"太极拳陈氏"},{"n":"武当","v":"太极拳武当"},{"n":"二十四式","v":"太极拳二十四式"},{"n":"三十六式","v":"太极拳三十六式"},{"n":"五禽戏","v":"五禽戏"},{"n":"八段锦","v":"八段锦"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"健身":[{"key":"tid","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":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"舞蹈":[{"key":"tid","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":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"歌曲":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"歌曲超清"},{"n":"歌曲合集","v":"经典无损音乐合集"},{"n":"歌曲热榜","v":"2022年歌曲排行榜"},{"n":"香港歌曲","v":"香港歌曲"},{"n":"台湾歌曲","v":"台湾歌曲"},{"n":"内地歌曲","v":"内地歌曲"},{"n":"粤语歌曲","v":"粤语歌曲"},{"n":"闽南歌曲","v":"闽南语歌曲"},{"n":"英文歌曲","v":"英文歌曲"},{"n":"日文歌曲","v":"日文歌曲"},{"n":"印度歌曲","v":"印度歌曲"},{"n":"韩国歌曲","v":"韩国歌曲"},{"n":"小语种歌曲","v":"小语种歌曲"},{"n":"经典老歌","v":"经典老歌"},{"n":"抖音热歌","v":"抖音热歌"},{"n":"网红翻唱","v":"网红翻唱"},{"n":"劲歌","v":"劲歌"},{"n":"慢歌","v":"慢歌"},{"n":"古风","v":"古风歌曲"},{"n":"舞曲","v":"DJ歌曲"},{"n":"欢快歌曲","v":"欢快歌曲"},{"n":"伤感歌曲","v":"伤感歌曲"},{"n":"70年代歌曲","v":"70年代歌曲"},{"n":"80年代歌曲","v":"80年代歌曲"},{"n":"90年代歌曲","v":"90年代歌曲"},{"n":"00年代歌曲","v":"00年代歌曲"},{"n":"10年代歌曲","v":"10年代歌曲"},{"n":"2020年歌曲","v":"2020年歌曲"},{"n":"2021年歌曲","v":"2021年歌曲"},{"n":"2022年歌曲","v":"2022年歌曲"},{"n":"经典儿歌","v":"经典儿歌"},{"n":"大合唱","v":"大合唱"},{"n":"音乐汇","v":"音乐汇"},{"n":"美声歌曲","v":"美声歌曲"},{"n":"通俗歌曲","v":"通俗歌曲"},{"n":"民族歌曲","v":"民族歌曲"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"音乐":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"音乐4K"},{"n":"钢琴","v":"钢琴曲"},{"n":"小提琴","v":"小提音乐"},{"n":"手风琴","v":"手风音乐"},{"n":"二胡","v":"二胡音乐"},{"n":"古筝","v":"古筝音乐"},{"n":"笛子","v":"笛子音乐"},{"n":"琵琶","v":"琵琶音乐"},{"n":"古琴","v":"古琴音乐"},{"n":"编钟","v":"编钟音乐"},{"n":"协奏曲","v":"协奏曲"},{"n":"中国古风音乐","v":"中国古风音乐"},{"n":"背景音乐","v":"背景音乐"},{"n":"助眠音乐","v":"助眠音乐"},{"n":"胎教音乐","v":"胎教音乐"},{"n":"芭蕾舞曲","v":"芭蕾舞曲"},{"n":"拉丁舞曲","v":"拉丁舞曲"},{"n":"爵士舞曲","v":"爵士舞曲"},{"n":"摩登舞曲","v":"摩登舞曲"},{"n":"DJ舞曲","v":"DJ舞曲"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"MV4K":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"MV4K"},{"n":"A阿杜","v":"阿杜MV4K"},{"n":"A阿黛尔","v":"阿黛尔MV4K"},{"n":"BBeyond","v":"BeyondMV4K"},{"n":"BBy2","v":"By2MV4K"},{"n":"BBIGBANG","v":"BIGBANGMV4K"},{"n":"B布兰妮","v":"布兰妮MV4K"},{"n":"C陈奕迅","v":"陈奕迅MV4K"},{"n":"C蔡依林","v":"蔡依林MV4K"},{"n":"C初音未来","v":"初音未来MV4K"},{"n":"C蔡健雅","v":"蔡健雅MV4K"},{"n":"C陈小春","v":"陈小春MV4K"},{"n":"C草蜢","v":"草蜢MV4K"},{"n":"C陈慧娴","v":"陈慧娴MV4K"},{"n":"C崔健","v":"崔健MV4K"},{"n":"C仓木麻衣","v":"仓木麻衣MV4K"},{"n":"D戴荃","v":"戴荃MV4K"},{"n":"D动力火车","v":"动力火车MV4K"},{"n":"D邓丽君","v":"邓丽君MV4K"},{"n":"D丁当","v":"丁当MV4K"},{"n":"D刀郎","v":"刀郎MV4K"},{"n":"D邓紫棋","v":"邓紫棋MV4K"},{"n":"D戴佩妮","v":"戴佩妮MV4K"},{"n":"D邓丽君","v":"邓丽君MV4K"},{"n":"F飞儿乐队","v":"飞儿乐队MV4K"},{"n":"F费玉清","v":"费玉清MV4K"},{"n":"F费翔","v":"费翔MV4K"},{"n":"F方大同","v":"方大同MV4K"},{"n":"F房东的猫","v":"房东的猫MV4K"},{"n":"F凤飞飞","v":"凤飞飞MV4K"},{"n":"F凤凰传奇","v":"凤凰传奇MV4K"},{"n":"G古风歌曲","v":"古风歌曲4K"},{"n":"G国乐大典","v":"国乐大典4K"},{"n":"G郭采洁","v":"郭采洁MV4K"},{"n":"G光良","v":"光良MV4K"},{"n":"G郭静","v":"郭静MV4K"},{"n":"G郭富城","v":"郭富城MV4K"},{"n":"H胡彦斌","v":"胡彦斌MV4K"},{"n":"H胡夏","v":"胡夏MV4K"},{"n":"H韩红","v":"韩红MV4K"},{"n":"H黄品源","v":"黄品源MV4K"},{"n":"H黄小琥","v":"黄小琥MV4K"},{"n":"H花儿乐队","v":"花儿乐队MV4K"},{"n":"H黄家强","v":"黄家强MV4K"},{"n":"H后街男孩","v":"后街男孩MV4K"},{"n":"J经典老歌","v":"经典老歌4K"},{"n":"J贾斯丁比伯","v":"贾斯丁比伯MV4K"},{"n":"J金池","v":"金池MV4K"},{"n":"J金志文","v":"金志文MV4K"},{"n":"J焦迈奇","v":"焦迈奇MV4K"},{"n":"K筷子兄弟","v":"筷子兄弟MV4K"},{"n":"L李玟","v":"李玟MV4K"},{"n":"L林忆莲","v":"林忆莲MV4K"},{"n":"L李克勤","v":"李克勤MV4K"},{"n":"L刘宪华","v":"刘宪华MV4K"},{"n":"L李圣杰","v":"李圣杰MV4K"},{"n":"L林宥嘉","v":"林宥嘉MV4K"},{"n":"L梁静茹","v":"梁静茹MV4K"},{"n":"L李健","v":"李健MV4K"},{"n":"L林俊杰","v":"林俊杰MV4K"},{"n":"L李玉刚","v":"李玉刚MV4K"},{"n":"L林志炫","v":"林志炫MV4K"},{"n":"L李荣浩","v":"李荣浩MV4K"},{"n":"L李宇春","v":"李宇春MV4K"},{"n":"L洛天依","v":"洛天依MV4K"},{"n":"L林子祥","v":"林子祥MV4K"},{"n":"L李宗盛","v":"李宗盛MV4K"},{"n":"L黎明","v":"黎明MV4K"},{"n":"L刘德华","v":"刘德华MV4K"},{"n":"L罗大佑","v":"罗大佑MV4K"},{"n":"L林肯公园","v":"林肯公园MV4K"},{"n":"LLadyGaga","v":"LadyGagaMV4K"},{"n":"L旅行团乐队","v":"旅行团乐队MV4K"},{"n":"M莫文蔚","v":"莫文蔚MV4K"},{"n":"M毛不易","v":"毛不易MV4K"},{"n":"M梅艳芳","v":"梅艳芳MV4K"},{"n":"M迈克尔杰克逊","v":"迈克尔杰克逊MV4K"},{"n":"N南拳妈妈","v":"南拳妈妈MV4K"},{"n":"P朴树","v":"朴树MV4K"},{"n":"Q齐秦","v":"齐秦MV4K"},{"n":"Q青鸟飞鱼","v":"青鸟飞鱼MV4K"},{"n":"R容祖儿","v":"容祖儿MV4K"},{"n":"R热歌","v":"热歌MV4K"},{"n":"R任贤齐","v":"任贤齐MV4K"},{"n":"S水木年华","v":"水木年华MV4K"},{"n":"S孙燕姿","v":"孙燕姿MV4K"},{"n":"S苏打绿","v":"苏打绿MV4K"},{"n":"SSHE","v":"SHEMV4K"},{"n":"S孙楠","v":"孙楠MV4K"},{"n":"T陶喆","v":"陶喆MV4K"},{"n":"T谭咏麟","v":"谭咏麟MV4K"},{"n":"T田馥甄","v":"田馥甄MV4K"},{"n":"T谭维维","v":"谭维维MV4K"},{"n":"T逃跑计划","v":"逃跑计划MV4K"},{"n":"T田震","v":"田震MV4K"},{"n":"T谭晶","v":"谭晶MV4K"},{"n":"T屠洪刚","v":"屠洪刚MV4K"},{"n":"T泰勒·斯威夫特","v":"泰勒·斯威夫特MV4K"},{"n":"W王力宏","v":"王力宏MV4K"},{"n":"W王杰","v":"王杰MV4K"},{"n":"W吴克群","v":"吴克群MV4K"},{"n":"W王心凌","v":"王心凌MV4K"},{"n":"W汪峰","v":"汪峰MV4K"},{"n":"W伍佰","v":"伍佰MV4K"},{"n":"W王菲","v":"王菲MV4K"},{"n":"W五月天","v":"五月天MV4K"},{"n":"W汪苏泷","v":"汪苏泷MV4K"},{"n":"X徐佳莹","v":"徐佳莹MV4K"},{"n":"X弦子","v":"弦子MV4K"},{"n":"X萧亚轩","v":"萧亚轩MV4K"},{"n":"X许巍","v":"许巍MV4K"},{"n":"X薛之谦","v":"薛之谦MV4K"},{"n":"X许嵩","v":"许嵩MV4K"},{"n":"X小虎队","v":"小虎队MV4K"},{"n":"X萧敬腾","v":"萧敬腾MV4K"},{"n":"X谢霆锋","v":"谢霆锋MV4K"},{"n":"X徐小凤","v":"徐小凤MV4K"},{"n":"X信乐队","v":"信乐队MV4K"},{"n":"Y夜愿乐队","v":"夜愿乐队MV4K"},{"n":"Y原创音乐","v":"原创音乐MV4K"},{"n":"Y羽泉","v":"羽泉MV4K"},{"n":"Y粤语","v":"粤语MV4K"},{"n":"Y郁可唯","v":"郁可唯MV4K"},{"n":"Y叶倩文","v":"叶倩文MV4K"},{"n":"Y杨坤","v":"杨坤MV4K"},{"n":"Y庾澄庆","v":"庾澄庆MV4K"},{"n":"Y尤长靖","v":"尤长靖MV4K"},{"n":"Y易烊千玺","v":"易烊千玺MV4K"},{"n":"Y袁娅维","vLine truncated
|
||||
"演唱会4K":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"演唱会4K"},{"n":"A阿杜","v":"阿杜演唱会4K"},{"n":"A阿黛尔","v":"阿黛尔演唱会4K"},{"n":"BBeyond","v":"Beyond演唱会4K"},{"n":"BBy2","v":"By2演唱会4K"},{"n":"BBIGBANG","v":"BIGBANG演唱会4K"},{"n":"B布兰妮","v":"布兰妮演唱会4K"},{"n":"B坂井泉水","v":"坂井泉水演唱会4K"},{"n":"C陈奕迅","v":"陈奕迅演唱会4K"},{"n":"C蔡依林","v":"蔡依林演唱会4K"},{"n":"C初音未来","v":"初音未来演唱会4K"},{"n":"C蔡健雅","v":"蔡健雅演唱会4K"},{"n":"C陈小春","v":"陈小春演唱会4K"},{"n":"C草蜢","v":"草蜢演唱会4K"},{"n":"C陈慧娴","v":"陈慧娴演唱会4K"},{"n":"C崔健","v":"崔健演唱会4K"},{"n":"C仓木麻衣","v":"仓木麻衣演唱会4K"},{"n":"D戴荃","v":"戴荃演唱会4K"},{"n":"D动力火车","v":"动力火车演唱会4K"},{"n":"D邓丽君","v":"邓丽君演唱会4K"},{"n":"D丁当","v":"丁当演唱会4K"},{"n":"D刀郎","v":"刀郎演唱会4K"},{"n":"D邓紫棋","v":"邓紫棋演唱会4K"},{"n":"D戴佩妮","v":"戴佩妮演唱会4K"},{"n":"D邓丽君","v":"邓丽君演唱会4K"},{"n":"F飞儿乐队","v":"飞儿乐队演唱会4K"},{"n":"F费玉清","v":"费玉清演唱会4K"},{"n":"F费翔","v":"费翔演唱会4K"},{"n":"F方大同","v":"方大同演唱会4K"},{"n":"F房东的猫","v":"房东的猫演唱会4K"},{"n":"F凤飞飞","v":"凤飞飞演唱会4K"},{"n":"F凤凰传奇","v":"凤凰传奇演唱会4K"},{"n":"G郭采洁","v":"郭采洁演唱会4K"},{"n":"G光良","v":"光良演唱会4K"},{"n":"G郭静","v":"郭静演唱会4K"},{"n":"G郭富城","v":"郭富城演唱会4K"},{"n":"H胡彦斌","v":"胡彦斌演唱会4K"},{"n":"H胡夏","v":"胡夏演唱会4K"},{"n":"H韩红","v":"韩红演唱会4K"},{"n":"H黄品源","v":"黄品源演唱会4K"},{"n":"H黄小琥","v":"黄小琥演唱会4K"},{"n":"H花儿乐队","v":"花儿乐队演唱会4K"},{"n":"H黄家强","v":"黄家强演唱会4K"},{"n":"H后街男孩","v":"后街男孩演唱会4K"},{"n":"J经典老歌","v":"经典老歌演唱会4K"},{"n":"J贾斯丁比伯","v":"贾斯丁比伯演唱会4K"},{"n":"J金池","v":"金池演唱会4K"},{"n":"J金志文","v":"金志文演唱会4K"},{"n":"J焦迈奇","v":"焦迈奇演唱会4K"},{"n":"K筷子兄弟","v":"筷子兄弟演唱会4K"},{"n":"L李玟","v":"李玟演唱会4K"},{"n":"L林忆莲","v":"林忆莲演唱会4K"},{"n":"L李克勤","v":"李克勤演唱会4K"},{"n":"L刘宪华","v":"刘宪华演唱会4K"},{"n":"L李圣杰","v":"李圣杰演唱会4K"},{"n":"L林宥嘉","v":"林宥嘉演唱会4K"},{"n":"L梁静茹","v":"梁静茹演唱会4K"},{"n":"L李健","v":"李健演唱会4K"},{"n":"L林俊杰","v":"林俊杰演唱会4K"},{"n":"L李玉刚","v":"李玉刚演唱会4K"},{"n":"L林志炫","v":"林志炫演唱会4K"},{"n":"L李荣浩","v":"李荣浩演唱会4K"},{"n":"L李宇春","v":"李宇春演唱会4K"},{"n":"L洛天依","v":"洛天依演唱会4K"},{"n":"L林子祥","v":"林子祥演唱会4K"},{"n":"L李宗盛","v":"李宗盛演唱会4K"},{"n":"L黎明","v":"黎明演唱会4K"},{"n":"L刘德华","v":"刘德华演唱会4K"},{"n":"L罗大佑","v":"罗大佑演唱会4K"},{"n":"L林肯公园","v":"林肯公园演唱会4K"},{"n":"LLadyGaga","v":"LadyGaga演唱会4K"},{"n":"L旅行团乐队","v":"旅行团乐队演唱会4K"},{"n":"M莫文蔚","v":"莫文蔚演唱会4K"},{"n":"M毛不易","v":"毛不易演唱会4K"},{"n":"M梅艳芳","v":"梅艳芳演唱会4K"},{"n":"M迈克尔杰克逊","v":"迈克尔杰克逊演唱会4K"},{"n":"N南拳妈妈","v":"南拳妈妈演唱会4K"},{"n":"P朴树","v":"朴树演唱会4K"},{"n":"Q齐秦","v":"齐秦演唱会4K"},{"n":"Q青鸟飞鱼","v":"青鸟飞鱼演唱会4K"},{"n":"R容祖儿","v":"容祖儿演唱会4K"},{"n":"R任贤齐","v":"任贤齐演唱会4K"},{"n":"S水木年华","v":"水木年华演唱会4K"},{"n":"S孙燕姿","v":"孙燕姿演唱会4K"},{"n":"S苏打绿","v":"苏打绿演唱会4K"},{"n":"SSHE","v":"SHE演唱会4K"},{"n":"S孙楠","v":"孙楠演唱会4K"},{"n":"T陶喆","v":"陶喆演唱会4K"},{"n":"T谭咏麟","v":"谭咏麟演唱会4K"},{"n":"T田馥甄","v":"田馥甄演唱会4K"},{"n":"T谭维维","v":"谭维维演唱会4K"},{"n":"T逃跑计划","v":"逃跑计划演唱会4K"},{"n":"T田震","v":"田震演唱会4K"},{"n":"T谭晶","v":"谭晶演唱会4K"},{"n":"T屠洪刚","v":"屠洪刚演唱会4K"},{"n":"T泰勒·斯威夫特","v":"泰勒·斯威夫特演唱会4K"},{"n":"W王力宏","v":"王力宏演唱会4K"},{"n":"W王杰","v":"王杰演唱会4K"},{"n":"W吴克群","v":"吴克群演唱会4K"},{"n":"W王心凌","v":"王心凌演唱会4K"},{"n":"W汪峰","v":"汪峰演唱会4K"},{"n":"W伍佰","v":"伍佰演唱会4K"},{"n":"W王菲","v":"王菲演唱会4K"},{"n":"W五月天","v":"五月天演唱会4K"},{"n":"W汪苏泷","v":"汪苏泷演唱会4K"},{"n":"X徐佳莹","v":"徐佳莹演唱会4K"},{"n":"X弦子","v":"弦子演唱会4K"},{"n":"X萧亚轩","v":"萧亚轩演唱会4K"},{"n":"X许巍","v":Line truncated
|
||||
"白噪音4K":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"白噪音4K"},{"n":"窗白噪音","v":"窗白噪音4K"},{"n":"环境白噪音","v":"环境白噪音4K"},{"n":"自然白噪音","v":"自然白噪音4K"},{"n":"助眠白噪音","v":"助眠白噪音4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"知名UP主":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"知名UP主"},{"n":"菠萝赛东","v":"菠萝赛东"},{"n":"冯提莫","v":"冯提莫"},{"n":"徐云流浪中国","v":"徐云流浪中国"},{"n":"YanGeographer","v":"YanGeographer"},{"n":"棋手战鹰","v":"棋手战鹰"},{"n":"林延秋","v":"林延秋"},{"n":"吴sir说电影","v":"吴sir说电影"},{"n":"李子柒","v":"李子柒"},{"n":"美食作家王刚R","v":"美食作家王刚R"},{"n":"智能路障","v":"智能路障"},{"n":"于赓哲老师","v":"于赓哲老师"},{"n":"一战成名_功夫","v":"一战成名_功夫"},{"n":"历史调研室","v":"历史调研室"},{"n":"利利川","v":"利利川"},{"n":"我叫孙火旺","v":"我叫孙火旺"},{"n":"渤海小吏","v":"渤海小吏"},{"n":"无穷小亮的科普日常","v":"无穷小亮的科普日常"},{"n":"申六宫","v":"申六宫"},{"n":"-LKs-","v":"-LKs-"},{"n":"小约翰可汗","v":"小约翰可汗"},{"n":"low馆长","v":"low馆长"},{"n":"自说自话的总裁","v":"自说自话的总裁"},{"n":"所长林超","v":"所长林超"},{"n":"世界未解之谜M","v":"世界未解之谜M"},{"n":"李永乐老师官方","v":"李永乐老师官方"},{"n":"罗兹","v":"罗兹"},{"n":"回到2049","v":"回到2049"},{"n":"二次元的中科院物理所","v":"二次元的中科院物理所"},{"n":"毕导THU","v":"毕导THU"},{"n":"罗翔讲刑法","v":"罗翔讲刑法"},{"n":"戴博士实验室","v":"戴博士实验室"},{"n":"芳斯塔芙","v":"芳斯塔芙"},{"n":"参赛者网","v":"参赛者网"},{"n":"三维地图看世界","v":"三维地图看世界"},{"n":"有机社会","v":"有机社会"},{"n":"乌鸦校尉CaptainWuya","v":"乌鸦校尉CaptainWuya"},{"n":"果壳","v":"果壳"},{"n":"严伯钧","v":"严伯钧"},{"n":"是你们的康康","v":"是你们的康康"},{"n":"老爸评测","v":"老爸评测"},{"n":"硬核的半佛仙人","v":"硬核的半佛仙人"},{"n":"盗月社食遇记","v":"盗月社食遇记"},{"n":"我是郭杰瑞","v":"我是郭杰瑞"},{"n":"papi酱","v":"papi酱"},{"n":"老番茄","v":"老番茄"},{"n":"绵羊料理","v":"绵羊料理"},{"n":"老师好我叫何同学","v":"老师好我叫何同学"},{"n":"敬汉卿","v":"敬汉卿"},{"n":"周六野Zoey","v":"周六野Zoey"},{"n":"木鱼水心","v":"木鱼水心"},{"n":"凉风Kaze","v":"凉风Kaze"},{"n":"小潮院长","v":"小潮院长"},{"n":"中国BOY超级大猩猩","v":"中国BOY超级大猩猩"},{"n":"敖厂长","v":"敖厂长"},{"n":"A阿阳热爱前端","v":"阿阳热爱前端"},{"n":"A艾栗夏","v":"艾栗夏"},{"n":"A爱读书的King","v":"爱读书的King"},{"n":"A爱看报的Kris","v":"爱看报的Kris"},{"n":"A安森垚","v":"安森垚"},{"n":"A安慰记心理小店","v":"安慰记心理小店"},{"n":"A安因思谈","v":"安因思谈"},{"n":"A昂克英文君","v":"昂克英文君"},{"n":"B阪神电车","v":"阪神电车"},{"n":"B宝剑侍从","v":"宝剑侍从"},{"n":"B北京青年x凉子访谈录","v":"北京青年x凉子访谈录"},{"n":"B北师大刘文利","v":"北师大刘文利"},{"n":"B备胎说车","v":"备胎说车"},{"n":"B毕导THU","v":"毕导THU"},{"n":"B哔哩哔哩纪录片","v":"哔哩哔哩纪录片"},{"n":"B蝙蝠音乐","v":"蝙蝠音乐"},{"n":"B冰零-Mahiru忠诚眷属","v":"冰零-Mahiru忠诚眷属"},{"n":"B冰糖雪梨Cherie","v":"冰糖雪梨Cherie"},{"n":"B波普尔2020","v":"波普尔2020"},{"n":"B不务正业的李雷","v":"不务正业的李雷"},{"n":"B不正经老丝","v":"不正经老丝"},{"n":"C草说木言","v":"草说木言"},{"n":"C柴知道","v":"柴知道"},{"n":"C程十安","v":"C程十安"},{"n":"D大啊毛君","v":"大啊毛君"},{"n":"D大连老师王博文","v":"大连老师王博文"},{"n":"D大门ZRR","v":"大门ZRR"},{"n":"D大象放映室","v":"大象放映室"},{"n":"D大又元","v":"大又元"},{"n":"D戴建业老师","v":"戴建业老师"},{"n":"D调侃企业发展史","v":"调侃企业发展史"},{"n":"D动画讲编程","v":"动画讲编程"},{"n":"D动物学博士陈睿","v":"动物学博士陈睿"},{"n":"D杜滑滑","v":"杜滑滑"},{"n":"E鹅姐职场","v":"鹅姐职场"},{"n":"F帆雨动画","v":"帆雨动画"},{"n":"F反诈骗","v":"反诈骗"},{"n":"F方猫boom","v":"方猫boom"},{"n":"F芳斯塔芙","v":"芳斯塔芙"},{"n":"F菲比老司机","v":"菲比老司机"},{"n":"F附议YJango","v":"附议YJango"},{"n":"G肝帝董佳宁","v":"肝帝董佳宁"},{"n":"G高盛元","v":"高盛元"},{"n":"G龚老师课堂","v":"龚老师课堂"},{"n":"G郭爷物理","v":"郭爷物理"},{"n":"G国家玮-开明致学","v":"国家玮-开明致学"},{"n":"G果壳","v":"果壳"},{"n":"G果木浪子","v":"果木浪子"},{"n":"H哈佛雪梨","v":"哈佛雪梨"},{"n":"H韩顺平","v":"韩顺平"},{"n":"H韩语养乐多老师","v":"韩语养乐多老师"},{"n":"H画画的番木","v":"画画的番木"},{"n":"H画渣花小烙","v":"画渣花小烙"},{"n":"H幻海航行","v":"幻海航行"},{"n":"H灰细胞","v":"灰细胞"},{"n":"H回到2049","v":"回到2049"},{"n"Line truncated
|
||||
"说案":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"说案"},{"n":"汤圆","v":"汤圆说案"},{"n":"唐唐","v":"唐唐说案"},{"n":"罗翔","v":"罗翔说刑法"},{"n":"何家弘","v":"何家弘说案"},{"n":"韩诺","v":"韩诺说案"},{"n":"老V","v":"老V说案"},{"n":"禁播档案","v":"禁播档案"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"解说":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"解说"},{"n":"电影","v":"电影解说"},{"n":"电视","v":"电视解说"},{"n":"小说","v":"小说解说"},{"n":"历史","v":"历史解说"},{"n":"动漫","v":"动漫解说"},{"n":"电影","v":"歌词解说"},{"n":"科普","v":"科普"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"演讲":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"全部演讲4K"},{"n":"A艾跃进","v":"艾跃进演讲4K"},{"n":"C超级演说家","v":"超级演说家4K"},{"n":"D电影","v":"电影演讲4K"},{"n":"D典籍里的中国","v":"典籍里的中国4K"},{"n":"G感动中国","v":"感动中国4K"},{"n":"G郭继承","v":"郭继承演讲4K"},{"n":"H华春莹","v":"华春莹演讲4K"},{"n":"L雷军","v":"雷军演讲4K"},{"n":"L罗翔","v":"罗翔演讲4K"},{"n":"R任正非","v":"任正非演讲4K"},{"n":"TED","v":"TED演讲4K"},{"n":"W汪文斌","v":"汪文斌演讲4K"},{"n":"Y一刻","v":"一刻演讲4K"},{"n":"Z赵立坚","v":"赵立坚演讲4K"},{"n":"Z郑强","v":"郑强演讲4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"时事":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"时事"},{"n":"时事热点","v":"时事热点"},{"n":"时事评论","v":"时事评论"},{"n":"时事新闻","v":"时事新闻"},{"n":"时事开讲","v":"时事开讲"},{"n":"时事报告","v":"时事报告"},{"n":"时事纵横","v":"时事纵横"},{"n":"时事政治","v":"时事政治"},{"n":"时事亮亮点","v":"时事亮亮点"},{"n":"时事直通车","v":"时事直通车"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"探索发现超清":[{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"纪录片超清":[{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"平面设计教学":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"平面设计教学"},{"n":"AI绘画","v":"AI绘画"},{"n":"AdobePhotoshop","v":"AdobePhotoshop教程"},{"n":"AdobeIllustrator","v":"AdobeIllustrator教程"},{"n":"CorelDRAW","v":"CorelDRAW教程"},{"n":"AdobeInDesign","v":"AdobeInDesign教程"},{"n":"AdobePagermaker","v":"AdobePagermaker教程"},{"n":"SAI","v":"SAI教程"},{"n":"AdobeBridge","v":"AdobeBridge教程"},{"n":"AdobePagermaker","v":"AdobePagermake教程r"},{"n":"3DStudioMax","v":"3DStudioMax教程"},{"n":"PR","v":"PR教程"},{"n":"AE","v":"AE教程"},{"n":"CINEMA4D","v":"CINEMA4D教程"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"软件教程":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"软件教程"},{"n":"Windows","v":"Windows"},{"n":"MT管理器","v":"MT管理器"},{"n":"NP管理器","v":"NP管理器"},{"n":"mixplorer","v":"mixplorer"},{"n":"脱壳","v":"脱壳"},{"n":"爬虫","v":"爬虫"},{"n":"json&jar","v":"json&jar"},{"n":"网盘挂载","v":"网盘挂载"},{"n":"alist+WebDav","v":"alist+WebDav"},{"n":"TVBox","v":"TVBox"},{"n":"EXCEL","v":"EXCEL教程"},{"n":"Git入门到精通","v":"Git入门到精通"},{"n":"java","v":"java教程"},{"n":"phyton","v":"phyton教程"},{"n":"xml","v":"xml教程"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"实用教程":[{"key":"tid","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":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"旅游":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"旅游"},{"n":"A澳门","v":"澳门旅游"},{"n":"A安徽","v":"安徽旅游"},{"n":"B布达拉宫","v":"布达拉宫旅游"},{"n":"B北京","v":"北京旅游"},{"n":"C重庆","v":"重庆旅游"},{"n":"C草原","v":"草原旅游"},{"n":"D大海","v":"大海旅游"},{"n":"F福建","v":"福建旅游"},{"n":"G广东","v":"广东旅游"},{"n":"G广西","v":"广西旅游"},{"n":"G贵州","v":"贵州旅游"},{"n":"G甘肃","v":"甘肃旅游"},{"n":"H海南","v":"海南旅游"},{"n":"H河北","v":"河北旅游"},{"n":"H河南","v":"河南旅游"},{"n":"H湖北","v":"湖北旅游"},{"n":"H湖南","v":"湖南旅游"},{"n":"H黑龙江","v":"黑龙江旅游"},{"n":"J吉林","v":"吉林旅游"},{"n":"J江苏","v":"江苏旅游"},{"n":"J江西","v":"江西旅游"},{"n":"L辽宁","v":"辽宁旅游"},{"n":"M民宿","v":"民宿旅游"},{"n":"N内蒙古","v":"内蒙古旅游"},{"n":"N宁夏","v":"宁夏旅游"},{"n":"Q青海","v":"青海旅游"},{"n":"S上海","v":"上海旅游"},{"n":"S陕西","v":"陕西旅游"},{"n":"S四川","v":"四川旅游"},{"n":"S山西","v":"山西旅游"},{"n":"S山东","v":"山东旅游"},{"n":"T天津","v":"天津旅游"},{"n":"T台湾","v":"台湾旅游"},{"n":"T天空","v":"天空旅游"},{"n":"X西湖","v":"西湖旅游"},{"n":"X西藏","v":"西藏旅游"},{"n":"X新疆","v":"新疆旅游"},{"n":"X香港","v":"香港旅游"},{"n":"Y云南","v":"云南旅游"},{"n":"Z浙江","v":"浙江旅游"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"风景4K":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"风景4K"},{"n":"A澳门","v":"澳门风景4K"},{"n":"A安徽","v":"安徽风景4K"},{"n":"B布达拉宫","v":"布达拉宫风景4K"},{"n":"B北京","v":"北京风景4K"},{"n":"C重庆","v":"重庆风景4K"},{"n":"C草原","v":"草原风景4K"},{"n":"D大海","v":"大海风景4K"},{"n":"F福建","v":"福建风景4K"},{"n":"G广东","v":"广东风景4K"},{"n":"G广西","v":"广西风景4K"},{"n":"G贵州","v":"贵州风景4K"},{"n":"G甘肃","v":"甘肃风景4K"},{"n":"H海南","v":"海南风景4K"},{"n":"H河北","v":"河北风景4K"},{"n":"H河南","v":"河南风景4K"},{"n":"H湖北","v":"湖北风景4K"},{"n":"H湖南","v":"湖南风景4K"},{"n":"H黑龙江","v":"黑龙江风景4K"},{"n":"J吉林","v":"吉林风景4K"},{"n":"J江苏","v":"江苏风景4K"},{"n":"J江西","v":"江西风景4K"},{"n":"L辽宁","v":"辽宁风景4K"},{"n":"L洛阳","v":"洛阳风景4K"},{"n":"M民宿","v":"民宿风景4K"},{"n":"N南京","v":"南京风景4K"},{"n":"N内蒙古","v":"内蒙古风景4K"},{"n":"N宁夏","v":"宁夏风景4K"},{"n":"Q青海","v":"青海风景4K"},{"n":"S上海","v":"上海风景4K"},{"n":"S陕西","v":"陕西风景4K"},{"n":"S四川","v":"四川风景4K"},{"n":"S山西","v":"山西风景4K"},{"n":"S山东","v":"山东风景4K"},{"n":"S苏州","v":"苏州风景4K"},{"n":"T天津","v":"天津风景4K"},{"n":"T台湾","v":"台湾风景4K"},{"n":"T天空","v":"天空风景4K"},{"n":"X西安","v":"西安风景4K"},{"n":"X西湖","v":"西湖风景4K"},{"n":"X西藏","v":"西藏风景4K"},{"n":"X新疆","v":"新疆风景4K"},{"n":"X香港","v":"香港风景4K"},{"n":"Y云南","v":"云南风景4K"},{"n":"Z浙江","v":"浙江风景4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"食谱":[{"key":"tid","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":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"美食超清":[{"key":"tid","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":"日料","v":"日料"},{"n":"小吃","v":"小吃"},{"n":"素食","v":"素食"},{"n":"蒸菜","v":"蒸菜"},{"n":"凉菜","v":"凉菜"},{"n":"早餐","v":"早餐"},{"n":"披萨","v":"披萨"},{"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":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"搞笑":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"搞笑"},{"n":"搞笑配音","v":"搞笑配音"},{"n":"搞笑电影","v":"搞笑电影"},{"n":"搞笑综艺","v":"搞笑综艺"},{"n":"鬼畜电影","v":"鬼畜电影"},{"n":"搞笑动画","v":"搞笑动画"},{"n":"搞笑番","v":"搞笑番"},{"n":"十万个冷笑话","v":"十万个冷笑话"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"球星":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"球星"},{"n":"B巴萨","v":"巴萨4K"},{"n":"B巴黎圣日耳曼","v":"巴黎圣日耳曼4K"},{"n":"B贝克汉姆","v":"贝克汉姆4K"},{"n":"C罗","v":"C罗4K"},{"n":"D杜兰特","v":"杜兰特4K"},{"n":"D德布劳内","v":"德布劳内4K"},{"n":"D德甲","v":"德甲4K"},{"n":"F1","v":"F14K"},{"n":"G国米","v":"国米4K"},{"n":"G高尔夫","v":"高尔夫4K"},{"n":"H亨利","v":"亨利4K"},{"n":"H皇马","v":"皇马4K"},{"n":"K库里","v":"库里4K"},{"n":"L罗纳尔多","v":"罗纳尔多4K"},{"n":"M梅西","v":"梅西4K"},{"n":"M曼联","v":"曼联4K"},{"n":"M曼城","v":"曼城4K"},{"n":"NBA","v":"NBA4K"},{"n":"N内马尔","v":"内马尔4K"},{"n":"O欧冠","v":"欧冠4K"},{"n":"Q齐达内","v":"齐达内4K"},{"n":"S世界杯","v":"世界杯4K"},{"n":"S斯诺克","v":"斯诺克4K"},{"n":"T天下足球","v":"天下足球4K"},{"n":"UFC","v":"UFC4K"},{"n":"W网球","v":"网球4K"},{"n":"X小罗","v":"小罗4K"},{"n":"X西甲","v":"西甲4K"},{"n":"Y英超","v":"英超4K"},{"n":"Y意甲","v":"意甲4K"},{"n":"Z詹姆斯","v":"詹姆斯4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"动物世界超清":[{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"相声小品":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"相声小品"},{"n":"C陈佩斯","v":"陈佩斯小品4K"},{"n":"C春晚小品","v":"春晚小品4K"},{"n":"C曹云金","v":"曹云金相声4K"},{"n":"D单口相声","v":"单口相声4K"},{"n":"D德云社","v":"德云社小品4K"},{"n":"E二人转","v":"二人转4K"},{"n":"F冯巩","v":"冯巩小品4K"},{"n":"G郭德纲","v":"郭德纲相声4K"},{"n":"G郭冬临","v":"郭冬临小品4K"},{"n":"G郭达","v":"郭达小品4K"},{"n":"K开心麻花","v":"开心麻花小品4K"},{"n":"P评书","v":"评书4K"},{"n":"P潘长江","v":"潘长江小品4K"},{"n":"Q青曲社","v":"青曲社相声4K"},{"n":"Q群口相声","v":"群口相声4K"},{"n":"S宋小宝","v":"宋小宝小品4K"},{"n":"W文松","v":"文松小品4K"},{"n":"X小曲","v":"小曲相声4K"},{"n":"X喜剧综艺","v":"喜剧综艺4K"},{"n":"Y严顺开","v":"严顺开小品4K"},{"n":"Y岳云鹏","v":"岳云鹏相声小品4K"},{"n":"Z赵本山","v":"赵本山小品4K"},{"n":"Z赵丽蓉","v":"赵丽蓉小品4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"戏曲":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"戏曲4K"},{"n":"B梆子腔","v":"梆子腔戏曲4K"},{"n":"C采茶戏","v":"采茶戏戏曲4K"},{"n":"C潮剧","v":"潮剧戏曲4K"},{"n":"C彩调","v":"彩调戏曲4K"},{"n":"C川剧","v":"川剧戏曲4K"},{"n":"D滇剧","v":"滇剧戏曲4K"},{"n":"D傣剧","v":"傣剧戏曲4K"},{"n":"E二人台","v":"二人台戏曲4K"},{"n":"G高腔","v":"高腔戏曲4K"},{"n":"G高甲戏","v":"高甲戏戏曲4K"},{"n":"G赣剧","v":"赣剧戏曲4K"},{"n":"G桂剧","v":"桂剧戏曲4K"},{"n":"H黄梅戏","v":"黄梅戏戏曲4K"},{"n":"H河北梆子","v":"河北梆子戏曲4K"},{"n":"H河南曲剧","v":"河南曲剧戏曲4K"},{"n":"H淮剧","v":"淮剧戏曲4K"},{"n":"H沪剧","v":"沪剧戏曲4K"},{"n":"H滑稽戏","v":"滑稽戏戏曲4K"},{"n":"H徽剧","v":"徽剧4K"},{"n":"H汉剧","v":"汉剧戏曲4K"},{"n":"H湖南花鼓戏","v":"湖南花鼓戏戏曲4K"},{"n":"J京剧","v":"京剧戏曲4K"},{"n":"J晋剧","v":"晋剧戏曲4K"},{"n":"J吉剧","v":"吉剧戏曲4K"},{"n":"K昆曲","v":"昆曲戏曲4K"},{"n":"L梨园戏","v":"梨园戏戏曲4K"},{"n":"L龙江剧","v":"龙江剧戏曲4K"},{"n":"M闽剧","v":"闽剧戏曲4K"},{"n":"P评剧","v":"评剧戏曲4K"},{"n":"P蒲剧","v":"蒲剧戏曲4K"},{"n":"P皮影戏","v":"皮影戏戏曲4K"},{"n":"P莆仙戏","v":"莆仙戏戏曲4K"},{"n":"Q黔剧","v":"黔剧戏曲4K"},{"n":"Q祁剧","v":"祁剧戏曲4K"},{"n":"Q秦腔","v":"秦腔戏曲4K"},{"n":"S上党梆子","v":"上党梆子戏曲4K"},{"n":"S山东梆子","v":"山东梆子戏曲4K"},{"n":"S绍剧","v":"绍剧戏曲4K"},{"n":"W武安平调","v":"武安平调戏曲4K"},{"n":"W婺剧","v":"婺剧戏曲4K"},{"n":"X湘剧","v":"湘剧戏曲4K"},{"n":"Y越剧","v":"越剧戏曲4K"},{"n":"Y豫剧","v":"豫剧戏曲4K"},{"n":"Y雁剧","v":"雁剧戏曲4K"},{"n":"Y越调","v":"越调戏曲4K"},{"n":"Y粤剧","v":"粤剧戏曲4K"},{"n":"Z壮剧","v":"壮剧戏曲4K"},{"n":"Z藏剧","v":"藏剧戏曲4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"儿童":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"儿童"},{"n":"教育","v":"儿童早教"},{"n":"歌曲","v":"贝瓦儿歌"},{"n":"舞蹈","v":"儿童舞蹈"},{"n":"成语故事","v":"儿童成语故事"},{"n":"安全教育","v":"儿童安全教育"},{"n":"睡前故事","v":"儿童睡前故事"},{"n":"贝乐虎","v":"贝乐虎"},{"n":"宝宝巴士","v":"宝宝巴士"},{"n":"儿童好声音","v":"儿童好声音"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"小姐姐4K":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"小姐姐4K"},{"n":"比基尼","v":"比基尼美女4K"},{"n":"内衣","v":"内衣模特4K"},{"n":"车模","v":"美女车模4K"},{"n":"健身","v":"美女健身4K"},{"n":"翻唱","v":"美女翻唱4K"},{"n":"舞蹈","v":"美女舞蹈4K"},{"n":"美妆","v":"美女美妆4K"},{"n":"Cos","v":"美女Cos4K"},{"n":"户外","v":"美女户外4K"},{"n":"居家","v":"美女居家4K"},{"n":"自习","v":"自习小姐姐4K"},{"n":"职场","v":"职场美女4K"},{"n":"工地","v":"工地美女4K"},{"n":"安静","v":"安静小姐姐4K"},{"n":"活泼","v":"活泼小姐姐4K"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"热门":[{"key":"tid","name":"分类","value":[{"n":"全部","v":"热门"},{"n":"刀郎","v":"刀郎"},{"n":"罗刹海市","v":"罗刹海市"},{"n":"狂飙","v":"狂飙"},{"n":"淄博烧烤","v":"淄博烧烤"},{"n":"原神","v":"原神"},{"n":"漫长的季节","v":"漫长的季节"},{"n":"AI","v":"AI"},{"n":"俄乌","v":"俄乌"},{"n":"ChatGPT","v":"ChatGPT"},{"n":"重启人生","v":"重启人生"},{"n":"棋手战鹰","v":"棋手战鹰"},{"n":"中国奇谭","v":"中国奇谭"},{"n":"三体","v":"三体"},{"n":"刘慈欣","v":"刘慈欣"},{"n":"鬼吹灯","v":"鬼吹灯"},{"n":"天下霸唱","v":"天下霸唱"}]},{"key":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}],
|
||||
"旅行探险":[{"key":"tid","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":"order","name":"排序","value":[{"n":"综合排序","v":"0"},{"n":"最多点击","v":"click"},{"n":"最新发布","v":"pubdate"},{"n":"最多弹幕","v":"dm"},{"n":"最多收藏","v":"stow"}]},{"key":"duration","name":"时长","value":[{"n":"全部","v":"0"},{"n":"60分钟以上","v":"4"},{"n":"30~60分钟","v":"3"},{"n":"10~30分钟","v":"2"},{"n":"10分钟以下","v":"1"}]}]
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
let html = HOST + '/x/web-interface/popular?ps=20';
|
||||
let data = JSON.parse(await request(html)).data.list;
|
||||
let videos = [];
|
||||
data.forEach(function(it) {
|
||||
videos.push({
|
||||
vod_id: it.aid,
|
||||
vod_name: stripHtmlTag(it.title),
|
||||
vod_pic: it.pic,
|
||||
vod_remarks: '🔥 ' + it.vt_display || '',
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
let html = HOST + '/x/web-interface/search/type?search_type=video&page=' + pg + '&keyword=' + (extend.tid || tid) + '&duration=' + (extend.duration || '') + '&order=' + (extend.order || '');
|
||||
let data = JSON.parse(await request(html)).data;
|
||||
let videos = [];
|
||||
data.result.forEach(function(it) {
|
||||
videos.push({
|
||||
vod_id: it.aid,
|
||||
vod_name: stripHtmlTag(it.title),
|
||||
vod_pic: 'https:' + it.pic,
|
||||
vod_remarks: turnDHM(it.duration) || '',
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
page: parseInt(data.page),
|
||||
pagecount: data.numPages,
|
||||
limit: 20,
|
||||
total: data.numResults,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
let data = JSON.parse(await request(HOST + '/x/web-interface/view?aid=' + id)).data;
|
||||
let vod = {
|
||||
vod_id: data.aid,
|
||||
vod_name: stripHtmlTag(data.title),
|
||||
vod_pic: data.pic,
|
||||
type_name: data.tname,
|
||||
vod_year: new Date(data.pubdate*1000).getFullYear(),
|
||||
vod_remarks: data.duration || '',
|
||||
vod_director: data.owner.name,
|
||||
vod_content: stripHtmlTag(data.desc),
|
||||
};
|
||||
let episodes = data.pages;
|
||||
let playurls = [];
|
||||
episodes.forEach(function(it) {
|
||||
let cid = it.cid;
|
||||
let part = it.part.replace('#', '﹟').replace('$', '﹩');
|
||||
playurls.push(
|
||||
part + '$' + data.aid + '_' + cid
|
||||
)
|
||||
});
|
||||
let playUrl = playurls.join('#');
|
||||
vod.vod_play_from = '道长在线';
|
||||
vod.vod_play_url = playUrl;
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let ids = id.split('_');
|
||||
let html = HOST + '/x/player/playurl?avid=' + ids[0] + '&cid=' + ids[1] + '&qn=116';
|
||||
let data = JSON.parse(await request(html)).data.durl;
|
||||
let maxSize = -1;
|
||||
let position = -1;
|
||||
data.forEach(function(it, i) {
|
||||
if (maxSize < Number(it.size)) {
|
||||
maxSize = Number(it.size);
|
||||
position = i
|
||||
}
|
||||
});
|
||||
let purl = '';
|
||||
if (data.length > 0) {
|
||||
if (position === -1) {
|
||||
position = 0
|
||||
}
|
||||
purl = data[position].url
|
||||
}
|
||||
// console.debug('我的哔哩 purl =====>' + purl); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: purl,
|
||||
header: getMb(),
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
let html = HOST + '/x/web-interface/search/type?search_type=video&keyword=' + wd + '&page=' + pg;
|
||||
let data = JSON.parse(await request(html)).data;
|
||||
let videos = [];
|
||||
data.result.forEach(function(it) {
|
||||
videos.push({
|
||||
vod_id: it.aid,
|
||||
vod_name: stripHtmlTag(it.title),
|
||||
vod_pic: 'https:' + it.pic,
|
||||
vod_remarks: turnDHM(it.duration) || '',
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
page: parseInt(data.page),
|
||||
pagecount: data.numPages,
|
||||
limit: 20,
|
||||
total: data.numResults,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function getHeader(cookie) {
|
||||
let header = {};
|
||||
header['cookie'] = cookie;
|
||||
header['User-Agent'] = PC_UA;
|
||||
header['Referer'] = 'https://www.bilibili.com';
|
||||
return header;
|
||||
}
|
||||
|
||||
function getMb() {
|
||||
return getHeader(cookie);
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src
|
||||
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||
.replace(/&.{1,5};/g, '')
|
||||
.replace(/\s{2,}/g, ' ');
|
||||
}
|
||||
|
||||
function turnDHM(duration) {
|
||||
let min = duration.split(':')[0];
|
||||
let sec = duration.split(':')[1];
|
||||
if (min == 0) {
|
||||
return sec + '秒';
|
||||
} else if (0 < min && min < 60) {
|
||||
return min + '分';
|
||||
} else if (60 <= min && min < 1440) {
|
||||
if (min % 60 == 0) {
|
||||
let h = min / 60;
|
||||
return h + '小时';
|
||||
} else {
|
||||
let h = min / 60;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
return h + '小时' + m + '分';
|
||||
}
|
||||
} else if (min >= 1440) {
|
||||
let d = min / 60 / 24;
|
||||
d = (d + '').split('.')[0];
|
||||
let h = min / 60 % 24;
|
||||
h = (h + '').split('.')[0];
|
||||
let m = min % 60;
|
||||
let dhm = '';
|
||||
if (d > 0) {
|
||||
dhm = d + '天'
|
||||
}
|
||||
if (h >= 1) {
|
||||
dhm = dhm + h + '小时'
|
||||
}
|
||||
if (m > 0) {
|
||||
dhm = dhm + m + '分'
|
||||
}
|
||||
return dhm;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
+213
@@ -0,0 +1,213 @@
|
||||
import { Crypto, jinja2, _ } from './lib/cat.js';
|
||||
|
||||
let key = '南瓜影视';
|
||||
let HOST = 'http://ys.changmengyun.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let MOBILE_UA = 'okhttp/4.6.0'
|
||||
|
||||
async function request(reqUrl) {
|
||||
let t = new Date().getTime().toString();
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'version_name': '1.0.6',
|
||||
'version_code': '6',
|
||||
'package_name': 'com.app.nanguatv',
|
||||
'sign': Crypto.MD5('c431ea542cee9679#uBFszdEM0oL0JRn@' + t).toString().toLowerCase(),
|
||||
'imei': 'c431ea542cee9679',
|
||||
'timeMillis': t,
|
||||
'User-Agent': MOBILE_UA
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let data = JSON.parse(await request(HOST + '/api.php/provide/home_nav'));
|
||||
let classes = [];
|
||||
for (const key in data) {
|
||||
if (data[key].name != '精选')
|
||||
classes.push({
|
||||
type_id: data[key].id,
|
||||
type_name: data[key].name,
|
||||
});
|
||||
}
|
||||
let filterObj = {
|
||||
"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":"新上线"}]}]
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
let data = JSON.parse(await request(HOST + '/api.php/provide/vod_rank?app=ylys&sort_type=month&imei=c431ea542cee9679&id=2&page=1'));
|
||||
let videos = [];
|
||||
data.forEach(function(it) {
|
||||
videos.push({
|
||||
vod_id: it.id,
|
||||
vod_name: it.name,
|
||||
vod_pic: it.img,
|
||||
vod_remarks: it.remarks,
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
let reqUrl = HOST + '/api.php/provide/vod_list?app=ylys&id=' + tid + '&page=' + pg + '&imei=c431ea542cee9679&';
|
||||
reqUrl += jinja2('area={{ext.area}}&year={{ext.year}}&type={{ext.class}}&total={{ext.total}}&order={{ext.by}}', { ext: extend });
|
||||
// let data = JSON.parse(await request(reqUrl));
|
||||
let data = JSON.parse(await request(reqUrl)).list;
|
||||
let videos = [];
|
||||
data.forEach(function(it) {
|
||||
videos.push({
|
||||
vod_id: it.id,
|
||||
vod_name: it.name,
|
||||
vod_pic: it.img,
|
||||
vod_remarks: it.remarks,
|
||||
});
|
||||
});
|
||||
let pgChk = JSON.parse(await request(HOST + '/api.php/provide/vod_list?app=ylys&id=' + tid + '&page=' + (parseInt(pg) + 1) + '&imei=c431ea542cee9679&')).msg;
|
||||
const pgCount = (pgChk == 'ok') ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
let data = JSON.parse(await request(HOST + '/api.php/provide/vod_detail?app=ylys&imei=c431ea542cee9679&id=' + id)).data;
|
||||
let vod = {
|
||||
vod_id: data.id,
|
||||
vod_name: data.name,
|
||||
vod_pic: data.img,
|
||||
type_name: data.type,
|
||||
vod_year: data.year,
|
||||
vod_remarks: '更新至: ' + data.msg + ' / 评分: ' + data.score,
|
||||
vod_content: stripHtmlTag(data.info),
|
||||
};
|
||||
let episodes = data.player_info;
|
||||
let playlist = {};
|
||||
episodes.forEach(function(it) {
|
||||
let playurls = it.video_info;
|
||||
playurls.forEach(function(playurl) {
|
||||
let source = it.show;
|
||||
let t = formatPlayUrl(vod.vod_name, playurl.name);
|
||||
if (t.length == 0) t = playurl.name.trim();
|
||||
if (!playlist.hasOwnProperty(source)) {
|
||||
playlist[source] = [];
|
||||
}
|
||||
playlist[source].push(t + '$' + playurl.url);
|
||||
});
|
||||
});
|
||||
vod.vod_play_from = _.keys(playlist).join('$$$');
|
||||
let urls = _.values(playlist);
|
||||
let vod_play_url = [];
|
||||
urls.forEach(function(it) {
|
||||
vod_play_url.push(it.join('#'));
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
try {
|
||||
if (id.indexOf('m3u8') != -1) {
|
||||
let mjurl = id.split('url=')[1]
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: mjurl,
|
||||
});
|
||||
} else if (id.indexOf(',') != -1) {
|
||||
let mjurl = id.split(',')[1]
|
||||
let jData = JSON.parse(await request(mjurl));
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: jData.data.url,
|
||||
});
|
||||
} else {
|
||||
let mjurl = 'http://43.154.104.152:1234/jhapi/cs.php?url=' + id.split('url=')[1]
|
||||
let jData = JSON.parse(await request(mjurl));
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: jData.data.url,
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
let data = JSON.parse(await request(HOST + '/api.php/provide/search_result_more?app=ylys&video_name=' + wd + '&pageSize=20&tid=0&imei=c431ea542cee9679&page=' + pg, 'okhttp/4.6.0')).data;
|
||||
let videos = [];
|
||||
data.forEach(function(it) {
|
||||
videos.push({
|
||||
vod_id: it.id,
|
||||
vod_name: it.video_name,
|
||||
vod_pic: it.img,
|
||||
vod_remarks: it.qingxidu + '/' + it.category,
|
||||
});
|
||||
});
|
||||
let pgChk = JSON.parse(await request(HOST + '/api.php/provide/search_result_more?app=ylys&video_name=' + wd + '&pageSize=20&tid=0&imei=c431ea542cee9679&page=' + (parseInt(pg) + 1), 'okhttp/4.6.0')).msg;
|
||||
const pgCount = (pgChk == 'ok') ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src
|
||||
.replace(/<\/?[^>]+(>|$)/g, '')
|
||||
.replace(/&.{1,5};/g, '')
|
||||
.replace(/\s{2,}/g, ' ');
|
||||
}
|
||||
|
||||
function formatPlayUrl(src, name) {
|
||||
return name
|
||||
.trim()
|
||||
.replaceAll(src, '')
|
||||
.replace(/<|>|《|》/g, '')
|
||||
.replace(/\$|#/g, ' ')
|
||||
.trim();
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
function _0x48eb72(_0x7c81e6,_0x31958e,_0x272aaa,_0x273053,_0x2803ad){return _0x26cc(_0x7c81e6- -0x253,_0x272aaa);}function _0xc536df(_0x525441,_0x5b38fa,_0xbc0962,_0x4d83cd,_0x51c057){return _0x2ed3(_0x4d83cd- -0x175,_0x51c057);}(function(_0x5ba705,_0x498cdd){function _0x46a9c8(_0x3684d1,_0x199a54,_0x1177db,_0x3f993f,_0x51fed2){return _0x24cd(_0x3684d1- -0x1e,_0x3f993f);}function _0x49663a(_0x28b378,_0x4b0fec,_0x567ab1,_0x4490c2,_0x5f16a0){return _0x2ed3(_0x4b0fec- -0x35e,_0x567ab1);}function _0x5d5fb7(_0x336c64,_0x3cf3dc,_0x354674,_0x23c096,_0x51be9a){return _0x2ed3(_0x336c64- -0x1fb,_0x354674);}function _0x386c5d(_0x589bdd,_0x8aa7e6,_0x40bd9c,_0x5379f9,_0x3089d3){return _0x26cc(_0x589bdd- -0x207,_0x3089d3);}function _0x569d41(_0x49571f,_0x11c266,_0xc96197,_0x37fbc3,_0x7b8618){return _0x24cd(_0x11c266-0x99,_0x49571f);}function _0xac2470(_0x518612,_0x52222c,_0x1be176,_0x559235,_0x31ff02){return _0x26cc(_0x31ff02- -0x22b,_0x1be176);}function _0x39f8e3(_0x4d01db,_0x456cbc,_0x181bba,_0x5ac8d0,_0x2d50a1){return _0x2ed3(_0x2d50a1-0x3c0,_0x456cbc);}function _0xdd7a62(_0x510528,_0x4c52ee,_0x53232f,_0x15565c,_0x5ef12b){return _0x24cd(_0x15565c- -0x27a,_0x4c52ee);}function _0x56bc0b(_0x1a7666,_0x40c40e,_0x3ef0ee,_0x4f7505,_0x44516b){return _0x26cc(_0x1a7666- -0xa6,_0x3ef0ee);}var _0xdee012=_0x5ba705();function _0x5e8caf(_0x130308,_0x43ff7a,_0x2ff2e7,_0x32a5e3,_0xcfe2da){return _0x2ed3(_0x32a5e3-0x28,_0x43ff7a);}function _0x4ae421(_0xfbcb26,_0x49682c,_0x5e1ffa,_0x588f07,_0x2680a9){return _0x2ed3(_0x588f07-0x25a,_0x5e1ffa);}while(!![]){try{var _0x5d2fd9=-parseInt(_0x386c5d(-0x7c,-0x5c,-0xb1,0xc5,'XZN6'))/(0xdf6*-0x1+-0x79*0x3f+0x2bbe)*(parseInt(_0x56bc0b(0x227,0x163,'h8Sz',0x3e9,0x93))/(0x1236+0x10af+-0x22e3))+parseInt(_0x5d5fb7(0x151,0x53,0x74,0x222,0x12a))/(-0x608+-0xe*-0x27e+-0x1cd9)+-parseInt(_0x5d5fb7(-0x9d,0x75,-0x132,0x11d,-0x268))/(-0x17*0x125+-0x21b9+-0x1f*-0x1f0)*(parseInt(_0x5d5fb7(-0xae,-0xe6,-0x85,0xb2,-0x157))/(-0xe50+-0x323*-0x5+0x1*-0x15a))+-parseInt(_0x4ae421(0x7f7,0x57b,0x926,0x751,0x837))/(-0x792+0xb9*0x11+-0x1*0x4b1)*(-parseInt(_0x46a9c8(0x296,0x316,0xcb,0x1ff,0x44d))/(0x56*0x70+0x1923+0xa*-0x646))+-parseInt(_0x4ae421(0x305,0x592,0x4a0,0x3ed,0x234))/(0x7f5+0x52*0x40+0x1*-0x1c6d)*(-parseInt(_0xdd7a62(-0xa2,0x225,0x55,0xe4,0x2a2))/(0x3*-0xbf2+-0x253b+0x491a))+-parseInt(_0x56bc0b(0x418,0x262,'aNMf',0x460,0x45d))/(-0x1*0x3b5+0x20*0x33+0x1*-0x2a1)+parseInt(_0x46a9c8(0xfd,0x234,0x1cd,0x1f0,0x1a4))/(-0x64e*0x1+0x75*0x3b+-0x179*0xe)*(parseInt(_0x5d5fb7(-0xa,0x4a,-0x1d0,-0x11b,0x179))/(-0xada+0x14b3+-0xc1*0xd));if(_0x5d2fd9===_0x498cdd)break;else _0xdee012['push'](_0xdee012['shift']());}catch(_0x1d0564){_0xdee012['push'](_0xdee012['shift']());}}}(_0x2720,0x1*0x57ffa+0x148310+0x6416b*-0x2));var _0x59e87d=(function(){var _0x5065d4={};function _0x126d89(_0x5889fb,_0x436e3b,_0x59737b,_0xd6892a,_0x7f4c70){return _0x24cd(_0x5889fb-0x176,_0x59737b);}_0x5065d4[_0x2727d8(0x4c2,0x389,0x604,0x65a,0x4e5)]=_0x513412(0x266,0xfa,0x245,'a@XQ',0x13b)+_0x513412(0x54c,0x4dd,0x69f,'88j*',0x695);function _0x2014f0(_0x85ca21,_0x30fa20,_0x569f1f,_0x11c52e,_0x18095a){return _0x2ed3(_0x11c52e- -0x114,_0x18095a);}function _0x419ba4(_0x703b8d,_0x425580,_0x513c1f,_0x4dc45f,_0x5a8a89){return _0x2ed3(_0x703b8d-0x295,_0x513c1f);}_0x5065d4[_0x4fc2aa(-0x170,-0xa,0x25,-0x26e,-0x8b)]=_0x5ae003(0x4f1,0x69a,'RPBh',0x670,0x575)+_0x3877b0(0x649,0x68e,0x410,'7AR[',0x52e),_0x5065d4[_0x4fc2aa(0x158,0x2df,0x11,0x43,0x264)]=_0x126d89(0x536,0x4ad,0x533,0x50e,0x397)+'mg';function _0xbc160d(_0x2bbe97,_0xc153d8,_0x5a2fb4,_0x290da2,_0x3ec791){return _0x24cd(_0x290da2- -0x30b,_0x5a2fb4);}_0x5065d4[_0x50da59(-0xf,0x182,-0x139,0x90,0x23a)]=_0x3a7794(0x184,0x17f,0x29b,0xc9,0x302)+_0x513412(0x24b,0x31e,0x180,'^I*r',0xda)+'t';function _0x3a7794(_0x29eb10,_0x8b3ab0,_0x29f9e7,_0x1b4905,_0x59f1f4){return _0x2ed3(_0x29f9e7- -0x1a5,_0x29eb10);}function _0x5ae003(_0x785a3c,_0x52956a,_0x32b41b,_0x5b3bdb,_0x186655){return _0x26cc(_0x785a3c-0x2a4,_0x32b41b);}_0x5065d4[_0x4fc2aa(-0x1a3,-0x2a7,-0x289,-0x1c1,-0x11)]=function(_0x564b1b,_0x236742){return _0x564b1b===_0x236742;},_0x5065d4[_0x50da59(0x265,0x307,0x2ba,0x208,0x1d6)]=_0x2727d8(0x3e9,0x13f,0x23e,0xb8,0x298),_0x5065d4[_0x54adba(0x469,0x44b,0x2a0,0x153,0x2be)]=_0x5aaab2('KL!n',0xcd,0x3bd,0x216,0x39e)+_0x54adba(0x4a6,0x3d6,0x3d1,0x598,0x485)+_0x5aaab2('!L)2',0x222,0x32e,0x3a1,0x2be),_0x5065d4[_0x2014f0(-0x116,0x3,0xd8,0x5e,0x230)]=function(_0x5a8b6a,_0x21a56a){return _0x5a8b6a>_0x21a56a;},_0x5065d4[_0x3a7794(0x81,0x31b,0x1b8,0x2c5,0x2a6)]=_0x5ae003(0x4fb,0x440,'oumq',0x367,0x490)+_0x5ae003(0x480,0x3ce,'fp!p',0x3aa,0x45d)+'s';function _0x3877b0(_0x18b291,_0x3e4965,_0x3f508c,_0x1830f1,_0x5c6f60){return _0x26cc(_0x5c6f60-0x11d,_0x1830f1);}function _0x4fc2aa(_0x48aa84,_0xdfd9a9,_0x1cd87c,_0x481f72,_0x157834){return _0x2ed3(_0x48aa84- -0x321,_0x1cd87c);}_0x5065d4[_0x3877b0(0x1c5,0x409,0x3ea,'yv@9',0x267)]=_0x54adba(0x1fa,0x17c,0x311,0x2af,0x464);function _0x513412(_0x1d43e0,_0x2165f5,_0x5ed5f1,_0x2241b2,_0x1812c4){returLine truncated
|
||||
@@ -0,0 +1,135 @@
|
||||
// 搜索滑块验证
|
||||
import { load, _ } from './lib/cat.js';
|
||||
|
||||
let key = '短视频';
|
||||
let HOST = 'http://www.sharenice.net';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || PC_UA,
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
function clsjoin(cls) {
|
||||
_.each(cls, (s) => {
|
||||
let typeId = s.attribs['href'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('t/') + 2);
|
||||
classes.push({
|
||||
type_id: typeId,
|
||||
type_name: s.children[0].data,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
let classes = [];
|
||||
async function home(filter) {
|
||||
let filterObj = {};
|
||||
let html = await request(HOST);
|
||||
let $ = load(html);
|
||||
let series = $('div.nav > ul > li > a[href*=net/]');
|
||||
let tag = $('div.hot-tags-list > a[href*=net]');
|
||||
clsjoin(series);
|
||||
clsjoin(tag);
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
let link = HOST + '/t-576O5aWz';
|
||||
let html = await request(link);
|
||||
let $ = load(html);
|
||||
let items = $('div.item-box ul li');
|
||||
let videos = _.map(items, (item) => {
|
||||
let a = $(item).find('a:first')[0];
|
||||
let img = $(item).find('img:first')[0];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
let link = HOST + '/' + tid + '?page=' + pg;
|
||||
let html = await request(link);
|
||||
let $ = load(html);
|
||||
let items = $('div.item-box ul li');
|
||||
let videos = _.map(items, (item) => {
|
||||
let a = $(item).find('a:first')[0];
|
||||
let img = $(item).find('img:first')[0];
|
||||
return {
|
||||
vod_id: a.attribs.href,
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: '',
|
||||
};
|
||||
});
|
||||
let hasMore = $('ul.pagination > li > a:contains(»)').length > 0;
|
||||
let pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 16,
|
||||
total: 16 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
let vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: '',
|
||||
};
|
||||
let playlist = ['观看视频' + '$' + id];
|
||||
vod.vod_play_from = '道长在线';
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let html = await request(id);
|
||||
let $ = load(html);
|
||||
let playUrl = $('div.video-play-box').find('video:first')[0].attribs.src + '#.mp4';
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
// 搜索数字验证
|
||||
// 20230812 变更 分类&筛选
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
let key = "素白白",
|
||||
url = "https://www.subaibaiys.com",
|
||||
siteKey = "",
|
||||
siteType = 0;
|
||||
const UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
|
||||
cookie = {};
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
var headers = {
|
||||
"User-Agent": UA,
|
||||
Cookie: _.map(cookie, (value, key) => key + "=" + value).join(";")
|
||||
},
|
||||
referer = (referer && (headers.referer = encodeURIComponent(referer)), await req(reqUrl, {
|
||||
method: mth || "get",
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: "post" === mth ? "form" : ""
|
||||
}));
|
||||
if (referer.headers["set-cookie"])
|
||||
for (const c of (_.isArray(referer.headers["set-cookie"]) ? referer.headers["set-cookie"].join(";") : referer.headers["set-cookie"]).split(";")) {
|
||||
var tmp = c.trim();
|
||||
if (tmp.startsWith("result=")) return cookie.result = tmp.substring(7), request(reqUrl, reqUrl, "post", {
|
||||
result: cookie.result
|
||||
});
|
||||
if (tmp.startsWith("esc_search_captcha=1")) return cookie.esc_search_captcha = 1, delete cookie.result, request(reqUrl)
|
||||
}
|
||||
return referer.content
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey, siteType = cfg.stype
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [{"type_id":"movie_bt","type_name":"影视筛选"},{"type_id":"new-movie","type_name":"电影"},{"type_id":"tv-drama","type_name":"电视剧"},{"type_id":"hot-month","type_name":"热门电影"},{"type_id":"high-movie","type_name":"高分电影"},{"type_id":"cartoon-movie","type_name":"动漫电影"},{"type_id":"hongkong-movie","type_name":"香港经典电影"},{"type_id":"domestic-drama","type_name":"国产剧"},{"type_id":"american-drama","type_name":"欧美剧"},{"type_id":"korean-drama","type_name":"韩剧"},{"type_id":"anime-drama","type_name":"动漫剧"},{"type_id":"marvel-movies","type_name":"漫威宇宙电影系列"},{"type_id":"fastfurious","type_name":"速度与激情电影系列"},{"type_id":"zero-zero-seven","type_name":"007系列(25部正传+2部外传)"}];
|
||||
let filterObj = {
|
||||
"movie_bt":[{"key":"catedd","name":"分类","value":[{"n":"全部","v":""},{"v":"/movie_bt_series/dongmanju","n":"动漫剧"},{"v":"/movie_bt_series/dongmandy","n":"动漫电影"},{"v":"/movie_bt_series/yindudy","n":"印度电影"},{"v":"/movie_bt_series/guochanju","n":"国产剧"},{"v":"/movie_bt_series/guochandy","n":"国产电影"},{"v":"/movie_bt_series/riju","n":"日剧"},{"v":"/movie_bt_series/rihandy","n":"日韩电影"},{"v":"/movie_bt_series/oumeiju","n":"欧美剧"},{"v":"/movie_bt_series/oumeidy","n":"欧美电影"},{"v":"/movie_bt_series/taiju","n":"泰剧"},{"v":"/movie_bt_series/thaidy","n":"泰国电影"},{"v":"/movie_bt_series/gangju","n":"港台剧"},{"v":"/movie_bt_series/gangtaidy","n":"港台电影"},{"v":"/movie_bt_series/documentary","n":"纪录片"},{"v":"/movie_bt_series/zongyi","n":"综艺"},{"v":"/movie_bt_series/hanju","n":"韩剧"},{"v":"/movie_bt_series/xianggangdy","n":"香港经典电影"}]},{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"v":"/movie_bt_cat/bhutan","n":"不丹"},{"v":"/movie_bt_cat/china","n":"中国"},{"v":"/movie_bt_cat/china-taiwan","n":"中国台湾"},{"v":"/movie_bt_cat/china-mainland","n":"中国大陆"},{"v":"/movie_bt_cat/china-hongkong","n":"中国香港"},{"v":"/movie_bt_cat/denmark","n":"丹麦"},{"v":"/movie_bt_cat/ukraine","n":"乌克兰"},{"v":"/movie_bt_cat/uruguay","n":"乌拉圭"},{"v":"/movie_bt_cat/israel","n":"以色列"},{"v":"/movie_bt_cat/iraq","n":"伊拉克"},{"v":"/movie_bt_cat/iran","n":"伊朗"},{"v":"/movie_bt_cat/russia","n":"俄罗斯"},{"v":"/movie_bt_cat/bulgaria","n":"保加利亚"},{"v":"/movie_bt_cat/croatia","n":"克罗地亚"},{"v":"/movie_bt_cat/iceland","n":"冰岛"},{"v":"/movie_bt_cat/canada","n":"加拿大"},{"v":"/movie_bt_cat/hungary","n":"匈牙利"},{"v":"/movie_bt_cat/south-africa","n":"南非"},{"v":"/movie_bt_cat/botswana","n":"博茨瓦纳"},{"v":"/movie_bt_cat/qatar","n":"卡塔尔"},{"v":"/movie_bt_cat/luxembourg","n":"卢森堡"},{"v":"/movie_bt_cat/india","n":"印度"},{"v":"/movie_bt_cat/indonesia","n":"印度尼西亚"},{"v":"/movie_bt_cat/kazakhstan","n":"哈萨克斯坦"},{"v":"/movie_bt_cat/colombia","n":"哥伦比亚"},{"v":"/movie_bt_cat/turkey","n":"土耳其"},{"v":"/movie_bt_cat/serbia","n":"塞尔维亚"},{"v":"/movie_bt_cat/cyprus","n":"塞浦路斯"},{"v":"/movie_bt_cat/mexico","n":"墨西哥"},{"v":"/movie_bt_cat/dominica","n":"多米尼加"},{"v":"/movie_bt_cat/austria","n":"奥地利"},{"v":"/movie_bt_cat/venezuela","n":"委内瑞拉"},{"v":"/movie_bt_cat/nigeria","n":"尼日利亚"},{"v":"/movie_bt_cat/巴基斯坦","n":"巴基斯坦"},{"v":"/movie_bt_cat/paraguay","n":"巴拉圭"},{"v":"/movie_bt_cat/brazil","n":"巴西"},{"v":"/movie_bt_cat/greece","n":"希腊"},{"v":"/movie_bt_cat/germany","n":"德国"},{"v":"/movie_bt_cat/italy","n":"意大利"},{"v":"/movie_bt_cat/latvia","n":"拉脱维亚"},{"v":"/movie_bt_cat/norway","n":"挪威"},{"v":"/movie_bt_cat/chech","n":"捷克"},{"v":"/movie_bt_cat/摩洛哥","n":"摩洛哥"},{"v":"/movie_bt_cat/斯洛伐克","n":"Line truncated
|
||||
"new-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"tv-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"hot-month":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"high-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"cartoon-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"hongkong-movie":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"domestic-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"american-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"korean-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}],
|
||||
"anime-drama":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"v":"/movie_bt_tags/pop-popular","n":"POP流行"},{"v":"/movie_bt_tags/biography","n":"传记"},{"v":"/movie_bt_tags/child","n":"儿童"},{"v":"/movie_bt_tags/adventure","n":"冒险"},{"v":"/movie_bt_tags/plot","n":"剧情"},{"v":"/movie_bt_tags/action","n":"动作"},{"v":"/movie_bt_tags/anime","n":"动漫"},{"v":"/movie_bt_tags/animation","n":"动画"},{"v":"/movie_bt_tags/history","n":"历史"},{"v":"/movie_bt_tags/costume","n":"古装"},{"v":"/movie_bt_tags/antiquity","n":"古风"},{"v":"/movie_bt_tags/homosexual","n":"同性"},{"v":"/movie_bt_tags/comedy","n":"喜剧"},{"v":"/movie_bt_tags/fantasy","n":"奇幻"},{"v":"/movie_bt_tags/family","n":"家庭"},{"v":"/movie_bt_tags/terror","n":"恐怖"},{"v":"/movie_bt_tags/suspense","n":"悬疑"},{"v":"/movie_bt_tags/erotic","n":"情色"},{"v":"/movie_bt_tags/thriller","n":"惊悚"},{"v":"/movie_bt_tags/drama","n":"戏曲"},{"v":"/movie_bt_tags/war","n":"战争"},{"v":"/movie_bt_tags/latin","n":"拉丁"},{"v":"/movie_bt_tags/funny","n":"搞笑"},{"v":"/movie_bt_tags/campus","n":"校园"},{"v":"/movie_bt_tags/song-and-dance","n":"歌舞"},{"v":"/movie_bt_tags/martial-arts","n":"武侠"},{"v":"/movie_bt_tags/disaster","n":"灾难"},{"v":"/movie_bt_tags/love","n":"爱情"},{"v":"/movie_bt_tags/crime","n":"犯罪"},{"v":"/movie_bt_tags/fancy","n":"玄幻"},{"v":"/movie_bt_tags/reality-show","n":"真人秀"},{"v":"/movie_bt_tags/short-film","n":"短片"},{"v":"/movie_bt_tags/kehuan","n":"科幻"},{"v":"/movie_bt_tags/documentary","n":"纪录片"},{"v":"/movie_bt_tags/talkshow","n":"脱口秀"},{"v":"/movie_bt_tags/stageart","n":"舞台艺术"},{"v":"/movie_bt_tags/west","n":"西部"},{"v":"/movie_bt_tags/sport","n":"运动"},{"v":"/movie_bt_tags/youth","n":"青春"},{"v":"/movie_bt_tags/music","n":"音乐"},{"v":"/movie_bt_tags/ghost","n":"鬼怪"},{"v":"/movie_bt_tags/black-film","n":"黑色电影"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"v":"/year/2023","n":"2023"},{"v":"/year/2022","n":"2022"},{"v":"/year/2021","n":"2021"},{"v":"/year/2020","n":"2020"},{"v":"/year/2019","n":"2019"},{"v":"/year/2018","n":"2018"},{"v":"/year/2017","n":"2017"},{"v":"/year/2016","n":"2016"},{"v":"/year/2015","n":"2015"},{"v":"/year/2014","n":"2014"},{"v":"/year/2013","n":"2013"},{"v":"/year/2012","n":"2012"},{"v":"/year/2011","n":"2011"},{"v":"/year/2010","n":"2010"},{"v":"/year/2009","n":"2009"},{"v":"/year/2008","n":"2008"},{"v":"/year/2007","n":"2007"},{"v":"/year/2006","n":"2006"},{"v":"/year/2005","n":"2005"},{"v":"/year/2004","n":"2004"},{"v":"/year/2003","n":"2003"},{"v":"/year/2002","n":"2002"},{"v":"/year/2001","n":"2001"},{"v":"/year/2000","n":"2000"},{"v":"/year/1999","n":"1999"},{"v":"/year/1998","n":"1998"},{"v":"/year/1997","n":"1997"},{"v":"/year/1996","n":"1996"},{"v":"/year/1995","n":"1995"},{"v":"/year/1994","n":"1994"},{"v":"/year/1993","n":"1993"},{"v":"/year/1992","n":"1992"},{"v":"/year/1991","n":"1991"},{"v":"/year/1990","n":"1990"},{"v":"/year/1989","n":"1989"},{"v":"/year/1988","n":"1988"},{"v":"/year/1987","n":"1987"},{"v":"/year/1986","n":"1986"},{"v":"/year/1985","n":"1985"},{"v":"/year/1984","n":"1984"},{"v":"/year/1983","n":"1983"},{"v":"/year/1982","n":"1982"},{"v":"/year/1981","n":"1981"},{"v":"/year/1980","n":"1980"},{"v":"/year/1979","n":"1979"},{"v":"/year/1978","n":"1978"},{"v":"/year/1977","n":"1977"},{"v":"/year/1976","n":"1976"},{"v":"/year/1975","n":"1975"},{"v":"/year/1974","n":"1974"},{"v":"/year/1973","n":"1973"},{"v":"/year/1972","n":"1972"},{"v":"/year/1971","n":"1971"},{"v":"/year/1970","n":"1970"},{"v":"/year/1969","n":"1969"},{"v":"/year/1968","n":"1968"},{"v":"/year/1967","n":"1967"},{"v":"/year/1966","n":"1966"},{"v":"/year/1965","n":"1965"},{"v":"/year/1964","n":"1964"},{"v":"/year/1963","n":"1963"},{"v":"/year/1962","n":"1962"},{"v":"/year/1960","n":"1960"},{"v":"/year/1959","n":"1959"},{"v":"/year/1954","n":"1954"},{"v":"/year/1952","n":"1952"},{"v":"/year/1950","n":"1950"},{"v":"/year/1949","n":"1949"},{"v":"/year/1948","n":"1948"},{"v":"/year/1940","n":"1940"},{"v":"/year/1939","n":"1939"},{"v":"/year/1925","n":"1925"}]}]
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
return "{}"
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof(pg) == 'undefined') pg = 1;
|
||||
var link = url + '/' + tid + (extend.area || '') + (extend.year || '') + (extend.class || '') + (extend.catedd || '') + '/page/' + pg;
|
||||
var html = await request(link);
|
||||
var $ = load(html);
|
||||
var items = $('div.mrb > ul > li');
|
||||
var videos = _.map(items, (item) => {
|
||||
var img = $(item).find('img:first')[0];
|
||||
var a = $(item).find('a:first')[0];
|
||||
var hdinfo = $($(item).find('div.hdinfo')[0]).text().trim();
|
||||
var item = $($(item).find('div.jidi')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs['data-original'],
|
||||
vod_remarks: item || hdinfo || ''
|
||||
};
|
||||
});
|
||||
var hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0;
|
||||
var pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 20,
|
||||
total: 20 * pgCount,
|
||||
list: videos
|
||||
})
|
||||
}
|
||||
|
||||
function stripHtmlTag(src) {
|
||||
return src.replace(/<\/?[^>]+(>|$)/g, "").replace(/&.{1,5};/g, "").replace(/\s{2,}/g, " ")
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
var html = await request(url + "/movie/" + id + ".html"),
|
||||
$ = load(html),
|
||||
html = $("ul.moviedteail_list > li"),
|
||||
vod = {
|
||||
vod_id: id,
|
||||
vod_pic: $("div.dyimg img:first").attr("src"),
|
||||
vod_remarks: "",
|
||||
vod_content: stripHtmlTag($("div.yp_context").html()).trim()
|
||||
};
|
||||
for (const info of html) {
|
||||
var i = $(info).text().trim();
|
||||
i.startsWith("地区:") ? vod.vod_area = i.substring(3) : i.startsWith("年份:") ? vod.vod_year = i.substring(3) : i.startsWith("导演:") ? vod.vod_director = _.map($(info).find("a"), a => a.children[0].data).join("/") : i.startsWith("主演:") ? vod.vod_actor = _.map($(info).find("a"), a => a.children[0].data).join("/") : i.startsWith("语言:") && (vod.vod_lang = i.substring(3))
|
||||
}
|
||||
id = _.map($("div.paly_list_btn > a"), a => a.children[0].data + "$" + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, "$1"));
|
||||
return vod.vod_play_from = key, vod.vod_play_url = id.join("#"), JSON.stringify({
|
||||
list: [vod]
|
||||
})
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = url + "/v_play/" + id + ".html",
|
||||
html = await request(link),
|
||||
$ = load(html),
|
||||
iframe = $("body iframe[src*=Cloud]");
|
||||
if (0 < iframe.length) {
|
||||
const iframeHtml = (await req(iframe[0].attribs.src, {
|
||||
headers: {
|
||||
Referer: link,
|
||||
"User-Agent": UA
|
||||
}
|
||||
})).content;
|
||||
let code = iframeHtml.match(/var url = '(.*?)'/)[1].split("").reverse().join(""),
|
||||
temp = "";
|
||||
for (let i = 0; i < code.length; i += 2) temp += String.fromCharCode(parseInt(code[i] + code[i + 1], 16));
|
||||
const playUrl = temp.substring(0, (temp.length - 7) / 2) + temp.substring((temp.length - 7) / 2 + 7);
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl
|
||||
})
|
||||
} {
|
||||
const js = $("script:contains(window.wp_nonce)").html(),
|
||||
group = js.match(/(var.*)eval\((\w*\(\w*\))\)/),
|
||||
md5 = Crypto,
|
||||
result = eval(group[1] + group[2]),
|
||||
playUrl = result.match(/url:.*?['"](.*?)['"]/)[1];
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
wd = await request(url + "/page/1?s=" + wd);
|
||||
const $ = load(wd);
|
||||
wd = $("div.search_list > ul > li"), wd = _.map(wd, item => {
|
||||
var img = $(item).find("img:first")[0],
|
||||
a = $(item).find("a:first")[0],
|
||||
hdinfo = $($(item).find("div.hdinfo")[0]).text().trim(),
|
||||
item = $($(item).find("div.jidi")[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, "$1"),
|
||||
vod_name: img.attribs.alt,
|
||||
vod_pic: img.attribs["data-original"],
|
||||
vod_remarks: item || hdinfo || ""
|
||||
}
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: wd
|
||||
})
|
||||
}
|
||||
|
||||
function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
__jsEvalReturn
|
||||
};
|
||||
@@ -0,0 +1,135 @@
|
||||
import { load, _ } from './lib/cat.js';
|
||||
let key = '🐰兔小贝';
|
||||
let HOST = 'https://www.tuxiaobei.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || IOS_UA,
|
||||
},
|
||||
});
|
||||
return res.content
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{ type_id: '', type_name: '🐰全部' }, { type_id: 2, type_name: '🐰儿歌' }, { type_id: 3, type_name: '🐰故事' }, { type_id: 27, type_name: '🐰公益' }, { type_id: 9, type_name: '🐰十万个为什么' }, { type_id: 28, type_name: '🐰安全教育' }, { type_id: 29, type_name: '🐰动物奇缘' }, { type_id: 7, type_name: '🐰弟子规' }, { type_id: 5, type_name: '🐰古诗' }, { type_id: 6, type_name: '🐰三字经' }, { type_id: 8, type_name: '🐰千字文' }, { type_id: 11, type_name: '🐰数学' }, { type_id: 25, type_name: '🐰英语' }, { type_id: 24, type_name: '🐰折纸' }];
|
||||
const filterObj = {};
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
})
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = await request(HOST + '/list/mip-data?typeId=9&page=1&callback=');
|
||||
const html = link.match(/\((.*?)\);/)[1];
|
||||
const data = JSON.parse(html).data;
|
||||
let videos = _.map(data.items, (it) => {
|
||||
return {
|
||||
vod_id: it.video_id,
|
||||
vod_name: it.name,
|
||||
vod_pic: it.image,
|
||||
vod_remarks: it.root_category_name + ' | ' + it.duration_string || '',
|
||||
}
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof pg == 'undefined') pg = 1;
|
||||
const link = await request(HOST + '/list/mip-data?typeId=' + tid + '&page=' + pg + '&callback=');
|
||||
const html = link.match(/\((.*?)\);/)[1];
|
||||
const data = JSON.parse(html).data;
|
||||
let videos = _.map(data.items, (it) => {
|
||||
return {
|
||||
vod_id: it.video_id,
|
||||
vod_name: it.name,
|
||||
vod_pic: it.image,
|
||||
vod_remarks: it.root_category_name + ' | ' + it.duration_string || '',
|
||||
}
|
||||
});
|
||||
const pgCount = pg * 30 > data.totalCount ? parseInt(pg) : parseInt(pg) + 1;
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 30,
|
||||
total: data.totalCount,
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: '',
|
||||
};
|
||||
const playlist = ['点击播放' + '$' + HOST + '/play/' + id];
|
||||
vod.vod_play_from = "道长在线";
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const html = await request(id);
|
||||
const $ = load(html);
|
||||
const pvideo = $("body mip-search-video[video-src*=http]");
|
||||
const purl = pvideo[0].attribs['video-src'];
|
||||
// console.debug('兔小贝 purl =====>' + purl); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: purl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const link = HOST + "/search/" + wd;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const list = $("div.list-con > div.items");
|
||||
let videos = _.map(list, (it) => {
|
||||
const a = $(it).find("a:first")[0];
|
||||
const img = $(it).find("mip-img:first")[0];
|
||||
const tt = $(it).find("p:first")[0];
|
||||
const remarks = $(it).find("p")[1];
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/play\/(.*)/g, '$1'),
|
||||
vod_name: tt.children[0].data,
|
||||
vod_pic: img.attribs["src"],
|
||||
vod_remarks: remarks.children[0].data || "",
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
land: 1,
|
||||
ratio: 1.78,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
// 无搜索功能
|
||||
import { _ } from './lib/cat.js';
|
||||
let key = '🐯贝乐虎';
|
||||
let HOST = 'https://vd.ubestkid.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
const MOBILE_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, referer, mth, data, hd) {
|
||||
const headers = {
|
||||
"User-Agent": MOBILE_UA,
|
||||
};
|
||||
if (referer) headers.referer = encodeURIComponent(referer);
|
||||
let res = await req(reqUrl, {
|
||||
method: mth || "get",
|
||||
headers: headers,
|
||||
data: data,
|
||||
postType: mth === "post" ? "json" : "",
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{ type_id: 65, type_name: '🐯最新上架' }, { type_id: 113, type_name: '🐯人气热播' }, { type_id: 56, type_name: '🐯经典童谣' }, { type_id: 137, type_name: '🐯开心贝乐虎' }, { type_id: 53, type_name: '🐯律动儿歌' }, { type_id: 59, type_name: '🐯经典儿歌' }, { type_id: 101, type_name: '🐯超级汽车1' }, { type_id: 119, type_name: '🐯超级汽车第二季' }, { type_id: 136, type_name: '🐯超级汽车第三季' }, { type_id: 95, type_name: '🐯三字经' }, { type_id: 133, type_name: '🐯幼儿手势舞' }, { type_id: 117, type_name: '🐯哄睡儿歌' }, { type_id: 70, type_name: '🐯英文儿歌' }, { type_id: 116, type_name: '🐯节日与节气' }, { type_id: 97, type_name: '🐯恐龙世界' }, { type_id: 55, type_name: '🐯动画片儿歌' }, { type_id: 57, type_name: '🐯流行歌曲' }, { type_id: 118, type_name: '🐯贝乐虎入园记' }, { type_id: 106, type_name: '🐯贝乐虎大百科' }, { type_id: 62, type_name: '🐯经典古诗' }, { type_id: 63, type_name: '🐯经典故事' }, { type_id: 128, type_name: '🐯萌虎学功夫' }, { type_id: 100, type_name: '🐯绘本故事' }, { type_id: 121, type_name: '🐯开心贝乐虎英文版' }, { type_id: 96, type_name: '🐯嗨贝乐虎情商动画' }, { type_id: 108, type_name: '🐯动物音乐派对' }, { type_id: 126, type_name: '🐯动物音乐派对英文版' }, { type_id: 105, type_name: '🐯奇妙的身体' }, { type_id: 124, type_name: '🐯奇妙的身体英文版' }, { type_id: 64, type_name: '🐯认知卡片' }, { type_id: 109, type_name: '🐯趣味简笔画' }, { type_id: 78, type_name: '🐯数字儿歌' }, { type_id: 120, type_name: '🐯识字体验版' }, { type_id: 127, type_name: '🐯启蒙系列体验版' }];
|
||||
const filterObj = {};
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
cls.land = 1;
|
||||
cls.ratio = 1.78;
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
})
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = HOST + "/api/v1/bv/video";
|
||||
const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: 56, "p": 1 };
|
||||
const jo = JSON.parse(await request(link, "", "post", pdata)).result;
|
||||
const videos = [];
|
||||
_.each(jo.items, (it) => {
|
||||
videos.push({
|
||||
vod_id: it.url,
|
||||
vod_name: it.title,
|
||||
vod_pic: it.image,
|
||||
vod_remarks: '👀' + it.viewcount || '',
|
||||
})
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof pg == 'undefined') pg = 1;
|
||||
const link = HOST + "/api/v1/bv/video";
|
||||
const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: tid, "p": pg };
|
||||
const jo = JSON.parse(await request(link, "", "post", pdata)).result;
|
||||
const videos = [];
|
||||
_.each(jo.items, (it) => {
|
||||
videos.push({
|
||||
vod_id: it.url,
|
||||
vod_name: it.title,
|
||||
vod_pic: it.image,
|
||||
vod_remarks: '👀' + it.viewcount || '',
|
||||
})
|
||||
});
|
||||
const pgCount = pg * 60 > jo.total ? parseInt(pg) : parseInt(pg) + 1;
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 60,
|
||||
total: jo.total,
|
||||
list: videos,
|
||||
})
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_remarks: '',
|
||||
};
|
||||
const playlist = ['点击播放' + '$' + id];
|
||||
vod.vod_play_from = "道长在线";
|
||||
vod.vod_play_url = playlist.join('#');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
// console.debug('贝乐虎 id =====>' + id); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
return '{}'
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
}
|
||||
}
|
||||
+147
@@ -0,0 +1,147 @@
|
||||
import {load, _, Uri} from './lib/cat.js';
|
||||
import {log} from './lib/utils.js';
|
||||
import {initAli, detailContent, playContent} from './lib/ali.js';
|
||||
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let siteUrl = 'https://wogg.xyz';
|
||||
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\/[^"]+)/
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
let ext = '';
|
||||
if (typeof cfg == 'object') {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
ext = cfg.ext;
|
||||
} else {
|
||||
ext = cfg; //适配影视
|
||||
}
|
||||
await initAli(ext);
|
||||
}
|
||||
|
||||
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': 20, 'type_name' : '电视剧'},{'type_id': 28, 'type_name' : '综艺'},{'type_id': 24, 'type_name' : '动漫'},{'type_id': 32, '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/vodshow/'+tid+'--------'+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) {
|
||||
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);
|
||||
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
|
||||
return '';
|
||||
}
|
||||
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return await playContent(flag, id, flags);
|
||||
}
|
||||
|
||||
|
||||
async function search(wd, quick) {
|
||||
await log('search---' + wd);
|
||||
let searchUrl = siteUrl + '/index.php/vodsearch/-------------.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 @@
|
||||
import{Crypto,load,_}from"assets://js/lib/cat.js";let key="xiaoya-tv",url="",siteKey="",siteType=0;const UA="Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",cookie={};async function request(reqUrl,referer,mth,data,hd){var headers={"User-Agent":UA,Cookie:_.map(cookie,(value,key)=>key+"="+value).join(";")},referer=(referer&&(headers.referer=encodeURIComponent(referer)),await req(reqUrl,{method:mth||"get",headers:headers,data:data,postType:"post"===mth?"form":""}));return referer.content}async function init(cfg){siteKey=cfg.skey,siteType=cfg.stype,url=cfg.ext}async function home(filter){return(await request(url)).replaceAll("1$/$1","1$/$0")}async function homeVod(){return"{}"}async function category(tid,pg,filter,extend){pg<=0&&(pg=1);let api=url+"?t="+tid+"&pg="+pg;return extend&&(tid=Object.entries(extend).map(([key,val]=entry)=>"&"+key+"="+val),api=(api+=tid)+("&f="+encodeURIComponent(JSON.stringify(extend)))),request(api)}async function detail(id){id=id.split("$");return request(url+"?ids="+id[0]+"$"+id[1])}async function play(flag,id,flags){return request(url.replace("/vod1","/play")+"?id="+id+"&from=open")}async function search(wd,quick){return request(url+"?wd="+wd)}function __jsEvalReturn(){return{init:init,home:home,homeVod:homeVod,category:category,detail:detail,play:play,search:search}}export{__jsEvalReturn};
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1C/ARp5cWt0dl9vcGVuLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4MQ3J5cHRvCmRheWpzDGppbmphMgZVcmkCXwZrZXkGdXJsDGRldmljZQ5zaXRlS2V5EHNpdGVUeXBlDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QSbmV4dFZhbHVlDHdvcmtlchBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gOY2hhclN0cg5yYW5kU3RyEHJhbmRVVUlEDnJhbmRNQUMUcmFuZERldmljZRpmb3JtYXRQbGF5VXJsEmpzb25QYXJzZQp5cWt0dnphYmFjZGVmZ2hqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5AmUCdAJyAmECbwJuAnMGcmVxGm9raHR0cC8zLjE0LjkUdXNlci1hZ2VudA5jb250ZW50JHd3dy5mdXdlbnR1dGVuZy5jbhJidW5kbGVySWQOcmVnQ29kZQhpbXNpGDEwMDFfZGVmYXVsdA4xLjAuMC4xDnZlcnNpb24KbW9kZWwUZGV2aWNlSW5mbwZtYWMWdmVyc2lvbkNvZGUOcmVsZWFzZQxvc0luZm8WaXNMb3dEZXZpY2UScmVxdWVzdElkQGQ2ZDUyMGVhOTA5MDRmMWJhNjgwZWQ2YzljOWY5MDA3CmFwcElkCGltZWkIdWRpZAxhc3NpZ24Ia2V5cwxzb3J0QnkIcHVzaAI9TmFwcEtleT03MGFmNjdkMmI2Y2Y0NzY3OWIzOTdlYTRjMTg4Njg3NwZNRDUCJhZ0b0xvd2VyQ2FzZQhzaWduDmhlYWRlcnMIcG9zdAxtZXRob2QIZGF0YQhza2V5CnN0eXBlCmxvY2FsCnBhcnNlDmlzRW1wdHkEaWQSc3RyaW5naWZ5RGh0dHBzOi8vY29uLmxicGNydy5jb20vY29uZmlnLmpzb248L3YxL2FwaS9zZWFyY2gvZ2V0U2VhcmNoRmlsdGVyFGZpbHRlckxpc3QeZmlsdGVyVmFsdWVMaXN0DnR5cGVfaWQSdHlwZV9uYW1lEHBhcnNlSW50BHt9MC92MS9hcGkvdm9kV29ya2VyL2RldGFpbBZ2b2RXb3JrZXJJZA52b2RMaXN0DHJlbWFyawh0cmltCnNjb3JlBjAuMAp2b2RJZAx2b2RfaWQOdm9kTmFtZRB2b2RfbmFtZRBjb3ZlckltZw52b2RfcGljAiAWdm9kX3JlbWFya3MIcGFnZRJwYWdlY291bnQIbGlzdAJpAmQCYwJsAnUUc3RhcnRzV2l0aA52X3dvcmtfDHN1YnN0chJjaGFubmVsSWQUZmlsdGVyTmFtZQxhcmVhSWQFMFc6Uwh5ZWFyBXRe/U4kY2hhbm5lbENoaWxkVHlwZUlkBXt8i1cFaFHokAJ2EHNvcnRMaXN0EHNvcnRUeXBlBZJjj14Qc29ydE5hbWUSZmlsZXJOYW1lFGZpbGVyVmFsdWUccXVlcnlWYWx1ZUpzb24ObmV4dFZhbC4vdjEvYXBpL3NlYXJjaC9xdWVyeU5vdw5oYXNOZXh0Cml0ZW1zDGZpbHRlciwvdjEvYXBpL3ZvZEluZm8vZGV0YWlsFmNoYW5uZWxOYW1lEHZvZF95ZWFyEGFyZWFOYW1lEHZvZF9hcmVhCmludHJvFnZvZF9jb250ZW50EmFjdG9yTGlzdAZtYXAELCASdm9kX2FjdG9yGGRpcmVjdG9yTGlzdBh2b2RfZGlyZWN0b3IUcGxheWVyTGlzdBRwbGF5ZXJOYW1lDGVwTGlzdAxlcE5hbWUCJAhlcElkAiMGJCQkGnZvZF9wbGF5X2Zyb20Ydm9kX3BsYXlfdXJsGnZvZFdvcmtlck5hbWUMW2E9Y3I6BC9dCFsvYV02L3YxL2FwaS92b2RJbmZvL2dldEVwRGV0YWlsHnJlc29sdXRpb25JdGVtcyJ2b2RSZXNvbHV0aW9uTmFtZTQvdjEvYXBpL3ZvZEluZm8vZ2V0UGxheVVybBp2b2RSZXNvbHV0aW9uDmtleXdvcmQGc2NfKi92MS9hcGkvc2VhcmNoL3NlYXJjaAxyYW5kb20CLRZ0b1VwcGVyQ2FzZQI6DEh1YXdlaQpicmFuZBxIVUFXRUkrTWF0ZSsyMA5idWlsZElkFHJlcGxhY2VBbGwOcmVwbGFjZQQvLwxodHRwczoIaHR0cBRVc2VyLUFnZW50DnJlZmVyZXIOUmVmZXJlcgxoZWFkZXIPpAMBpgMBABuoAwAFAKoDAAGsAwACrgMAA7ADAASyAwAOAAYBoAEAAAABHBB5AKoDAAysAwEMrgMCDLADAwyyAwQMtAMACbYDAQm4AwIJugMDCbwDBAm+AwUBwAMGAcIDBwHEAwgBxgMJDcgDCgHKAwsBzAMMAc4DDQHQAw4B0gMPDdQDEAHWAxEB2AMSAdoDEwHcAxQB3gMVAagDFgEI6FK+AF8KAL4BXwsAvgJfDAC+A18NAL4EXw8AvgVfEAC+Bl8RAL4HXxIAvghfEwC+CV8VAL4KXxYAvgtfFwC+DF8YAL4NXxkAvg5fGgC+D18bACkE8AAAAF8FAL9fBgALXwcAv18IALNfCQALXw4ABPEAAABfFAAppAMBBAEAVAIOYgYBvgMDBQMIBAOXAwjkAwABAOYDAAEA6AMAAQDqAwAAAOwDAQAg7gMBAiDkAwMFIPADAQMguAMHCNYDFgCyAwQMqgMADGEEAGECAGEBANDoGjj5AAAAzwsE+gAAAEz7AAAA7otB/AAAAC4LBP0AAABM/gAAAL0ATP8AAABlAABBAAEAAEwAAQAABAEBAABMbAAAAAQCAQAATAMBAABlAABBBAEAAEwFAQAAZQAAQQYBAABMBgEAAL0BTAcBAABlAABBCAEAAEwJAQAABAIAAABMCgEAANzsTAsBAAAEDAEAAEwNAQAAZQAAQQ4BAABMDgEAAGUAAEEPAQAATA8BAADH0RHoEA5lAgBCEAEAAMPRJAIAyw5lAgBCEQEAAMMkAQDIZQIAQhIBAABiAQC+AiQCABFjAQAOJgAAyWEDAGIBAH3qHcpiAgBCEwEAAGIDAAQUAQAAncNiAwBHnSQBAA6AAOjhDoNiAgBCEwEAAAQVAQAAJAEADmUDAEIWAQAAYgIAQlsAAAAEFwEAACQBACQBAEI3AAAAJAAAQhgBAAAkAADBBMNiBABDGQEAADj5AAAAzwsLBPoAAABM+wAAAEwaAQAABBsBAABMHAEAAMNMHQEAAO6LQfwAAAAupAMBAAcCMQcIMTAwMQ5DBgEAAQABAQAAAgHkAwABAM8opAMBAA5iBgHAAwEEAQcLAJkCBeQDAAEA5gMAAADoAwABAOQDBAQD6gMBADC6AwgIvAMJCLQDBQi4AwcIsgMEDNoDGADUAxUA1gMWANgDFwC+AwoAtgMGCGEDAM9BHgEAABFmAAAOz0EfAQAAEWYBAA4E3AAAAMc4IAEAAEJBAAAAZQIAwyQCAIvM57Ol6CZsGgAAADiYAAAAQiEBAADEJAEAEWYDAA4O6gvJbAcAAAAO6gIvZQQAQiIBAABlAwAkAQARaYYAAAAOXgUA7BFmAwAOZQMAXgYAuyDtQhgBAAAkAABDIwEAAGUDAF4HAOxDAAEAAGUDAF4GALsPtJazlu9DDgEAAGUDAF4IAOxDBgEAAGUDAF4GALsQ7UIYAQAAJAAAQw8BAAA4IAEAAEJCAAAAZQIAwziYAAAAQiQBAABlAwAkAQAkAwCLDl4JAAQlAQAAs5bui8o4mAAAAEIhAQAAYgMAJAEAs0cRZgoADgYupAMBAA5iBgHCAwEDAQcDAZgBBOQDAAEA5gMBACDoAwEBIOQDAgIwvgMKALYDBgiyAwQMYQEAYQAAOJgAAABCIQEAANtlAQAEJgEAAJ3tiyQBAEEdAQAAxyYAAMhhAgBiAABBJwEAALNHQSgBAAB96inJYgEAQhMBAAALYgIAQSMBAABMKQEAAGICAEE2AAAATCoBAAAkAQAOgADo1Q6DZQIAQhIBAABiAQC+ACQCABFjAQAOOJgAAABCJAEAAAtiAQBMHgAAACQBAC6kAwEADkIGAQABAAECAAAOAeQDAAEAOCsBAADPQSkBAAAjAQCkAwEADmIGAcQDAAAAAQAABgAELAEAAC6kAwEADmIGAcgDAQQBCQIA4gIF5AMAAQDmAwEAIOgDAQEg5AMDAjDmAwQDIL4DCgC2AwYIYQEAYQAAOJgAAABCIQEAANtlAQAELQEAAJ20lgvPTC4BAADviyQBAEEdAQAAx2IAAJboBwQsAQAALiYAAMhhAgBiAABBLwEAAH3r6wDJYQMAJgAAymICAEEwAQAAEeg0DmICAEEwAQAAQjEBAAAkAADns6UR6B0OYgMAQhMBAABiAgBBMAEAAEIxAQAAJAAAJAEADmICAEEyAQAAEehODmICAEEyAQAAQjEBAAAkAADns6UR6DcOBDMBAABiAgBBMgEAAEIxAQAAJAAAqhHoHQ5iAwBCEwEAAGICAEEyAQAAQjEBAAAkAAAkAQAOYgEAQhMBAAALYgIAQTQBAABMNQEAAGICAEE2AQAATDcBAABiAgBBOAEAAEw5AQAAYgMAQlsAAAAEOgEAACQBAEw7AQAAJAEADoAAaRT///8OgziYAAAAQiQBAAALtEw8AQAAtEw9AQAAYgEATD4BAAAkAQAupAMBAA5iBgHKAwQZBAkEAeAKHeQDAAEA5gMAAQDoAwABAOoDAAEA7AMBACDuAwEBIPADAQIg5gMEGSDkAwYEMOYDBwUg6AMHBiDqAwcHIOwDBwgg7gMHCSDkAwoKMOYDCwsw5AMNBCDoAw0NIOQDDg4w5gMPDzD+BAEDMIAFAREw5AMRGTDmAxITMIIFARIghAUBFSDkAxQZMOYDFRcghgUBFjDIAw8AvgMKALYDBgjGAw4MYRg
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1DdAhh5cnpqX29wZW4uanMsYXNzZXRzOi8vanMvbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgxqaW5qYTIGVXJpAl8OXzB4NDA0NA5fMHg0NzNlEl8weDNjYjRmMRJfMHg1ZjBkNTASXzB4MzU2YWI4El8weDUwM2QxMRJfMHhjY2U3NzQSXzB4NWU3M2M0El8weDI5MjQzNBJfMHg1YzBiZGESXzB4NDUyMTkyEl8weDQ1OTk3NxJfMHgxMDM1NzcSXzB4MzI1NDhlEl8weDY4ODhjZBJfMHg1OGJhZTASXzB4NGY0NzVhEl8weDUxN2NiMRJfMHg1ZmI0NDcSXzB4MWEwYWRmEl8weGE0NTQ2ORJfMHg4OWY0ZGISXzB4MTE4MjhjEl8weDNlZGY4NRJfMHg2NzFiZTIUc3RhcnRzV2l0aBZnZXRfcGFyc2luZwxkZXZpY2UMY29uZmlnEnZvZF9jbGFzcwpzdHlwZT4vYXBwdG8vdjEvdm9kL2dldExpc3RzP3R5cGVfaWQ9Cm1vZGVsFnZvZF9yZW1hcmtzCmxpc3RzEnZvZF9hY3RvcgZ1cmwWdm9kX2NvbnRlbnQIa2V5cw5pbmRleE9mDmJ1aWxkSWQIcHVzaAxyYW5kb20caGFzT3duUHJvcGVydHlARGFsdmlrLzIuMS4wIChMaW51eDsgVTsgQW5kcm9pZCAQdm9kX2FyZWEKcGFyc2UIaGl0cw50aW1lb3V05AEmYXJlYT17e2V4dC5hcmVhfX0mbGFuZz17e2V4dC5sYW5nfX0meWVhcj17e2V4dC55ZWFyfX0mb3JkZXI9e3tleHQub3JkZXJ8ZGVmYXVsdCgidGltZSIpfX0mdHlwZV9uYW1lPXt7ZXh0LmNsYXNzfX0UdXNlci1hZ2VudBJzdHJpbmdpZnkGbG9nCmxhYmVsCGRhdGEKdGl0bGUQdm9kX25hbWUOdm9kX3BpYxJmb3JtLWRhdGEadm9kX3BsYXlfbGlzdAwmcGFnZT0OY29udGVudAhtb2xkGHZvZF9wbGF5X3VybBJ0eXBlX25hbWUMZG9tYWluGnZvZF9wbGF5X2Zyb20IdHJpbQx2b2RfaWQYJnBhZ2VTaXplPTIxCHVybHMQdm9kX3llYXIIZWFjaLACMmZsNElwWk9nQ3pkV0V6YlpnM3pvNDE1SERqSWhpQXNBWDJ4RWFObU1TdVRJR0xaelhTOXQ1V1d6K0Y5c0NkTzJ1bU9pdFZWWGpiVTJqR2d0bXkxVHIrVFRRU2R5cjlrNnFyM2V1bWtvR2Q2aVZMT2c0Mnl4TmhNSjU5VU9YRWxDRDVzY3lFMFJ0MGtIVTRpVU9nM1d3PT0OcmVmZXJlcghjYXRlDiBCdWlsZC8wL2FwcHRvL3YxL3ZvZC9nZXRWb2Q/aWQ9GHZvZF9kaXJlY3RvchZ0b0xvd2VyQ2FzZRxIVUFXRUkgTWF0ZSA0MHphYmFjZGVmZ2hqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5Emxhc3RfcGFnZRJsYW5nX2xpc3Q8L2FwcHRvL3YyL2NvbmZpZy9nZXQ/cD1hbmRyb2lkEnllYXJfbGlzdBpnZXRfaG9tZV9jYXRlFHJlcGxhY2VBbGw8L2FwcHRvL3YxL3ZvZC9nZXRWb2RTZWFyY2g/d2Q9DnJlcGxhY2UUVXNlci1BZ2VudAYkJCQIeXJ6ag5pc0VtcHR5CGxhbmd2aHR0cHM6Ly95cnpqLTEzMTY4MzI4MjIuY29zLmFwLWJlaWppbmcubXlxY2xvdWQuY29tL2FwcC50eHQIaHR0cA5SZWZlcmVyDnZvZF9zdWIkRGFydC8yLjE5KGRhcnQ6aW8pCHRpbWUWdG9VcHBlckNhc2UGbWFwCGFyZWESc3Vic3RyaW5nCnNjb3JlCDB4MTYGMHhhEl8weDk0ZWJjNxJfMHg0MDQ0ZTESXzB4NDczZTMyEl8weDMxZWMyNQpzaGlmdBJfMHg1OGJlNzQSXzB4MTk4YTA3El8weDE1OTM3YhJfMHgyM2UxMWMSXzB4NDA1YmQ4CDB4MWQGcmVxDmhlYWRlcnMSXzB4NDgyMjM2El8weDExMTIwZhJfMHgxZGIwODgSXzB4NDFmYjBjCHNrZXkIMHgyYQgweDI3CmxvY2FsCDB4MjIIMHg0MwgweDNiCDB4MTcEaWQGMHg4BHVhCDB4MzkOcmVsZWFzZQQ7IAgweDJkBjB4NQgweDM1AikIMHg0YwgweDQwCDB4MTkIMHg0ZAgweDUxEl8weDRkNDU2YxJfMHgzZjMyN2USXzB4MzNhMWM1El8weDViNjBhZBJfMHgzNWFlZjQSXzB4NDY3YWNkEl8weDNlMTc0MhJfMHgyYTZiMTYQXzB4MWM0MDISXzB4Mjc5YTQ2El8weDFiNzE3NRJfMHg0OGZiZmYSXzB4MmQ4MmYyEl8weDI2M2RhNhJfMHg1NDMxMTIGMHhkCDB4NDQIMHgyNggweDJmCDB4MTAIMHg0ZQgweDM2BjB4NA50eXBlX2lkCDB4NDUMZXh0ZW5kCDB4MzMKdHlwZXMFe3yLVwYweDESYXJlYV9saXN0BTBXOlMIMHgyMQYweGMF7YsAiggweDE4BjB4ZgV0XuNOCHllYXIGa2V5CGluaXQFaFHokAJuAnYGMHgwCDB4NGEKb3JkZXIFkmOPXggweDFlBQBnsGUFAGftcAgweDNjBX1ZxIsIMHgyNA5jb25zb2xlCDB4NDEOZmlsdGVycxJfMHg0OGZjYWUIMHg1MBJfMHgxYmY2M2EEe30SXzB4Mjk0YjI1El8weDJjMDhmMRJfMHg0MTc4NTcSXzB4MzJkOGMyEl8weDJkMWExZRJfMHgyN2IyM2MSXzB4OWM1MDJjEl8weDM5YTAzMBJfMHgzMDk2OTEIMHgyYwgweDNlBmV4dAgweDRiCDB4NTUIMHg1NAgweDQ2CDB4NDcIMHgyZQgweDFjCHBhZ2UScGFnZWNvdW50CGxpc3QSXzB4MWI0YjFlEl8weDRhZjJlYRJfMHg0ODQ0NDkSXzB4ZTE3YmViEl8weGU1MmI4NBJfMHg0Njg3NTcSXzB4NjNiMTg5El8weDFjNjliMwYweDYyJl9fcGxhdGZvcm09YW5kcm9pZCZfX2ljPSRlbmNvZGVVUklDb21wb25lbnQGMHgyCDB4MjkCLAgweDU3CDB4M2EIMHgzMAYweDcIMHgzMggweDQ5FnBsYXllcl9pbmZvCDB4MmIIMHg1NggweDM4CDB4MjAGMHhlAiMIMHg1MggweDE1CDB4NGYSXzB4NTZiNWU3AiQSXzB4NTQ0MDZiEl8weDM3OWM2YRJfMHgyNDgxYWUSXzB4Yjc5MjZiEl8weDFiYzBjZhJfMHgzNWY2NWQSXzB4MTBhYTE2El8weDFlMmQ5MhJfMHgxNDAxOWUSXzB4MmNkMThjCGZpbmQIMHgyOC4vYXBwdG8vdjEvcGFyc2luZy9wcm94eQhwb3N0DG1ldGhvZBBwbGF5X3VybAgweDQyCDB4NDgQcG9zdFR5cGUIMHgzZAgweDMxEHRyeSBuZXh0El8weDM1NjM4YhJfMHgxZTk3MWESXzB4MWM2Nzk4El8weDQzOWE0ZRJfMHg1MzdhMzcSXzB4NWFmOTg4El8weDUxNDU5OBJfMHgyOWNlOTQIMHgxMgYweGISXzB4MTA0ZGE0El8weDIzN2RkYQgweDUzCDB4MTEIMHgxMwIgEl8weDRkZTA2MBJfMHgyMjNkMjESXzB4MTU1YmM2CDB4MzQIMHgyMxJfMHgzM2Y1OTMSXzB4YzIyMmRjEl8weDIxMzZiMRJfMHhmY2Y1MTQSXzB4MzkzYjg3El8weDUxNGYwYhJfMHgxZWE0MzQIMHgyNQQvLwxodHRwczoIMHgxYQgweDNmCDB4MTQGMHgzCDB4MWIOZm9yRWFjaAxoZWFkZXISXzB4MzZlMGEwEl8weDE1MmRlNxJfMHgzY2RiMWYSXzB4MmFiMmJhEl8weDU4ODU0MhJfMHgxZTkzZjASXzB4MWMzZDYxEl8weDViODE5ZAgweDM3DGh1YXdlaQpicmFuZAYweDkIMHgxZhJfMHg0MTQzMDYIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaA+kAwGmAwEAHKgDAAMAqgMAAawDAAKuAwAOAAYBoAEAAAAgHRHsBgCqAwAMrAMBDK4DAgywAwANsgMBDbQDAgm2AwMJuAMECboDBQm8AwYJvgMHCcADCAHCAwkBxAMKAcYDCwHIAwwBygMNAcwDDgnOAw8J0AMQAdIDEQHUAxIB1gMTAdgDFAHaAxUN3AMWAd4DFwHgAxgBqAMZAQjoTb4CXwsAvgNfDAC+BF8NAL4FXw4AvgZfDwC+B18QAL4IXxMAvglfFAC+Cl8VAL4LXxYAvgxfFwC+DV8ZAL4OXxoAvg9fGwC+EF8cACkE8QAAAATyAAAABPMAAAAE9AAAAAT1AAAABPYAAAAEegAAAAT3AAAABPgAAAAE+QAAAAT6AAAABPsAAAAE/AAAAAT9AAAABP4AAAAE/wAAAAQAAQAABAEBAAAEAgEAAAQDAQAABAQBAAAEBQEAAAQGAQAABAcBAAAECAEAAAQJAQAABAoBAAAECwEAAAQMAQAABA0BAAAEMAAAAAQOAQAAJiAABA8BAABMIAAAgAQQAQAATCEAAIAEEQEAAEwiAACABBIBAABMIwAAgAQTAQAATCQAAIAEQAAAAEwlAACABBQBAABMJgAAgARCAAAATCcAAIAEFQEAAEwoAACABBYBAABMKQAAgAQXAQAATCoAAIAEGAEAAEwrAACABBkBAABMLAAAgAQaAQAATC0AAIAEGwEAAEwuAACABBwBAABMLwAAgAQdAQAATDAAAIAEHgEAAEwxAACABB8
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1DSAgp5dC5qcxguL2xpYi9jYXQuanMcLi9saWIvdXRpbHMuanMcX19qc0V2YWxSZXR1cm4CXwxDcnlwdG8KZGF5anMKVXRpbHMMbGVnYWRvDnNpdGVLZXkQc2l0ZVR5cGUQZXh0SW5mb3MIaW5pdBJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaBRnZXRIZWFkZXJzCmlzQmFuGGdldFNlYXJjaFVybBZ1cmxQYXR0ZXJuMRZ1cmxQYXR0ZXJuMhhwYXJzZVBhdHRlcm4acGFyc2VQYXR0ZXJuMRpwYXJzZVBhdHRlcm4yImh0bWxWaWRlb0tleU1hdGNoBFVBFGdldENhdGVVcmwsZ2V0Q2F0ZUZpbHRlclVybFByZWZpeCxnZXRDYXRlRmlsdGVyVXJsU3VmZml4HGdldEZpbHRlclR5cGVzHmdldFJlY29tbWVuZFVybCBnZXRQbGF5VXJsUHJlZml4FnBhcnNlVXJsTWFwFmdlblBsYXlMaXN0GmdldEZpbmFsVmlkZW8SZ2V0QXBpVXJsCGRlc2MSbWQ1RW5jb2RlFm1kNUVuY29kZTE2GGJhc2U2NEVuY29kZS5hZXNCYXNlNjREZWNvZGVUb1N0cmluZxR0aW1lRm9ybWF0IGFwaVwucGhwLy4qPy92b2QiYXBpXC5waHAvLis/XC52b2QQLy4rXD8uKz0sLioodXJsfHZ8dmlkfHBocFw/aWQpPRxodHRwcz86Ly9bXi9dKhRwbGF5ZXI9bmV3HjxkaXYgaWQ9InZpZGVvIiw8ZGl2IGlkPSJbXiJdKj9wbGF5ZXIiDS8ALwDGiZGY/pSlYxpIbHNKc1BsYXllclwoNjxpZnJhbWVbXHNcU10qP3NyYz0iW14iXSs/IjQ8dmlkZW9bXHNcU10qP3NyYz0iW14iXSs/IgZNRDUSc3Vic3RyaW5nBmVuYwxCYXNlNjQSc3RyaW5naWZ5CFV0ZjgKcGFyc2UGc3RyBmtleRx0cmFuc2Zvcm1hdGlvbgRpdhJhbGdvcml0aG0IbW9kZQ5wYWRkaW5nAi8YUEtDUzVQYWRkaW5nBnBhZApQa2NzNxJOb1BhZGRpbmceSVNPMTAxMjZQYWRkaW5nEElzbzEwMTI2BkFFUw5kZWNyeXB0FGNpcGhlcnRleHQIdGltZQxmb3JtYXQgWVlZWS9NTS9ERCBISDptbQZjZmcIc2tleQpzdHlwZQZleHQGIyMjBnVybAxoZWFkZXIGcmVxDmhlYWRlcnMOY29udGVudAxmaWx0ZXISanNvbkFycmF5DmNsYXNzZXMCaQhqc29uDHJlc3VsdBRjbGFzc2VzQXJyCGpPYmoQdHlwZU5hbWUMdHlwZUlkDG5ld0Nscw5maWx0ZXJzEmZpbHRlckFycgJrAmwOb25lTGluZQp0eXBlThB2YWx1ZUFycgJqBGt2Bmt2bwRzcAJuDmlzRW1wdHkCCgRcKwh0cmltAj0SdHlwZV9uYW1lDnR5cGVfaWQIcHVzaBxoYXNPd25Qcm9wZXJ0eQhsaXN0DmlzQXJyYXkIZGF0YRZ0eXBlX2V4dGVuZAIrDmluZGV4T2YFW3sJkA5yZXBsYWNlBXt8i1cIYXJlYQUwVzpTCGxhbmcF7YsAigh5ZWFyBXRe/U4CdgR7fQZ0aWQEcGcMZXh0ZW5kCnRvdGFsDGFwaVVybAx2aWRlb3MIdk9iaggjUE4jD1t7CZBjAGwAYQBzAHMADVt7CZBhAHIAZQBhAA1bewmQbABhAG4AZwANW3sJkHkAZQBhAHIABZJjj14SdG90YWxwYWdlEnBhZ2Vjb3VudApsaW1pdApmbG9vcgx2b2RfaWQQdm9kX25hbWUOdm9kX3BpYxZ2b2RfcmVtYXJrcxBuZXh0bGluawp0aXRsZQZwaWMKc3RhdGUIcGFnZQRpZAZ2b2QIZmxhZxBqaWV4aVVybBBqc29uSW5mbwxsdmRvdSsGWFktDHN1YnN0ciAwMTIzNDV5dHZtenhjcmZzKEFFUy9DQkMvUEtDUzVQYWRkaW5nIDFyZndqNjc4OTBjdmZicmcaaXNWaWRlb0Zvcm1hdEhodHRwOi8vamlleGkubHl5eXR2LmNuL2pzb24ucGhwP3VybD0ab2todHRwLzQuMTEuMBRVc2VyLUFnZW50CGNvZGUEangEd2QKcXVpY2skZW5jb2RlVVJJQ29tcG9uZW50BlVSTAUmTwZ0BcVgcoIFj3kpUgZLRVkILnZvZBhpb3Blbnl1bi5jb20SL2xpc3Q/d2Q9DCZwYWdlPQg/d2Q9FmFwaS5waHAvYXBwCnhnYXBwGHNlYXJjaD90ZXh0PQgmcGc9CHRlc3QSZXNlbGxhdXRvFjEuMTQuNjMuMTAxCHpqeXMGZGNkCGx4dWUSd2VldGFpLmNuEmhhb2thbmp1MQpmaXQ6OBB6amoubGlmZRBsb3ZlOTk4OQg4ZDhxDmxrLnB4dW4IaGd5eAo1MjF4NQpseHl5eQwwODE4dHYMZGl5b3VpDmRpbGlrdHYKcHB6aHUSYWl0ZXN1Y2FpCnp6LmNpDGNoeGpvbg53YXRjaG1pCnZpcGJwCGJodHYKeGZ5a2wYP2FjPWxpc3Qmd2Q9GD9hYz1saXN0JnptPQ5mcmVla2FuJkRhcnQvMi4xNCAoZGFydDppbykGenNiCGZreHMIeGF5cwh4Y3lzCHN6eXMIZHh5cwh5dHlzCHFueXMmRGFydC8yLjE1IChkYXJ0OmlvKRhva2h0dHAvNC4xLjAYRGFsdmlrLzIuMS4wFG5hdj90b2tlbj0UL2xpc3Q/dHlwZQwvdHlwZXMQZGlqaWF4aWFIaHR0cDovL3d3dy5kaWppYXhpYS5jb20vYXBpLnBocC9hcHAvFHZpZGVvP3RpZD0QaW9wZW55dW4WL2xpc3Q/dHlwZT0MP3R5cGU9Hj9hYz1saXN0JmNsYXNzPYcBJgBjAGwAYQBzAHMAPQBbewmQYwBsAGEAcwBzACYAYQByAGUAYQA9AFt7CZBhAHIAZQBhACYAbABhAG4AZwA9AFt7CZBsAGEAbgBnACYAeQBlAGEAcgA9AFt7CZB5AGUAYQByACYAbABpAG0AaQB0AD0AMQA4ACYAcABnAD0AIwBQAE4AIwCXASYAYwBsAGEAcwBzAD0AW3sJkGMAbABhAHMAcwAmAGEAcgBlAGEAPQBbewmQYQByAGUAYQAmAGwAYQBuAGcAPQBbewmQbABhAG4AZwAmAHkAZQBhAHIAPQBbewmQeQBlAGEAcgAmAGIAeQA9AJJjj14mAGwAaQBtAGkAdAA9ADEAOAAmAHAAYQBnAGUAPQAjAFAATgAjAGEmAHAAYQBnAGUAPQAjAFAATgAjACYAYQByAGUAYQA9AFt7CZBhAHIAZQBhACYAdAB5AHAAZQA9AFt7CZBjAGwAYQBzAHMAJgBzAHQAYQByAHQAPQBbewmQeQBlAGEAcgAUdHlwZUV4dGVuZAsrAGhR6JA9ACsAFHJlcGxhY2VBbGwCLEEKAJJjj14rAGhR6JA9ACsAAGewZT0AdABpAG0AZQArAABn7XA9AGgAaQB0AHMAKwDEiwZSPQBzAGMAbwByAGUA2QUGUnt8KwBoUeiQPQArADV1cV89AG0AbwB2AGkAZQArAN6P7X5nUj0AdAB2AHAAbABhAHkAKwD8fnqCPQB0AHYAcwBoAG8AdwArAKhSK289AGMAbwBtAGkAYwArADQASwA9AG0AbwB2AGkAZQBfADQAawArAFNPsoA9AHQAaQB5AHUACgBbewmQYwBsAGEAcwBzACsAaFHokD0AKwCcVWdSKwAxcsVgKwBQYBZgKwCoUlxPKwDReXteKwBnUsVgKwAYYolOKwBmiypTKwCvcmp/KwCoUjt1KwBHWXteKwBma6BPKwCSUWmWKwCqZxhiKwBQYBZgKwCsYJF1KwDKYJpgKwDPfnhRKwBSlyVmKwCHZXqCKwCuXzV1cV8rAORTxYgrAIZT8lMrANCPqFIrAJxRUWcrAMpgmmArAMpgmmArACZPBnQrAMVgcoIrAI95KVIrAAlOp34rAD9R5XorAFF/3H41dXFfCgBbewmQYQByAGUAYQArAGhR6JA9ACsAJ1lGlisAmZkvbisA8FN+bisAjn/9VisA8YL9VisA1Wz9VisA5WUsZysA6Zf9VisAt1/9VisA8Gz9VisAcFOmXisAf4ntc1lyKwCgUv9iJ1krAHZR1k4KAFt7CZB5AGUAYQByACsAaFHokD0AMgAwADIAMwArADIAMAAyADIAKwAyADAAMgAxACsAMgAwADIAMAArADIAMAAxADkAKwAyADAAMQA4ACsAMgAwADEANwArADIAMAAxADYAKwAyADAAMQA1ACsAMgAwADEANAArADIAMAAxADMAKwAyADAAMQAyACsAMgAwADEAMQArADIAMAAxADAAKwAyADAAMAA5ACsAMgAwADAAOAArADIAMAAwADcAKwAyADAAMAA2ACsAMgAwADAANQArADIAMAAwADQAKwAyADAAMAAzACsAMgAwADAAMgArADIAMAAwADEAKwAyADAAMAAwACRpbmRleF92aWRlbz90b2tlbj0UL3ZvZFBoYkFsbEpodHRwczovL3d3dy5kaWppYXhpYS5jb20vYXBpLnBocC9hcHAvIHZpZGVvX2RldGFpbD9pZD0MMTAxMGR5Qmh0dHA6Ly93d3cuMTAxMGR5LmNjL2FwaS5waHAvYXBwLyIvZGV0YWlsSUQ/dm9kX2lkPR4vZGV0YWlsP3ZvZF9pZD0GdmlkEHBsYXlVcmxzEnBsYXlGbGFncyB2b2RVcmxXaXRoUGxheWVyDnBsYXlVcmwIcHVybBJwYXJzZVVybHMYcGxheUZsYWdzUHJlFnBsYXlVcmxzUHJlEm5lZWRJbmRleAxwYXJzZTEMcGFyc2UyDHBhcnNlcw5tYXR
Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
//bbQ0FUT1CIAxh5enlzX29wZW4uanMsYXNzZXRzOi8vanMvbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgxDcnlwdG8KZGF5anMMamluamEyBlVyaQJfDl8weDE4NGQOXzB4MTVkZhJfMHgzNmZlY2YSXzB4MzQxYTJlEl8weDg0MzAyMBJfMHg2ZDQyMjISXzB4MjZmZDVmEl8weDMxYjQwNxJfMHgzMmRiYWESXzB4NDNhOTRkEl8weDFmMjBiNxJfMHgxNmY1MzMSXzB4NGZiYmYxEl8weDMyZjhmMxJfMHg0ZDI5NDgSXzB4MmQ1YmViEl8weDMwNWJlNxJfMHgxZGZlMjgSXzB4YzUxOWUyEl8weDFkN2NlNRJfMHgxZjViMTASXzB4Mjk0Mjg4El8weDE4OGU4NBJfMHg3MDY5MWUSXzB4MjNiMjNhEl8weDQxZmRjORJfMHg0MTAwYWISXzB4YThlNWMzEl8weDM2MDY3YxJfMHgxNDQ2ZWISXzB4MzJiMjEwEl8weDYzNWIyNxJfMHg0MmU2ZDYSXzB4MTNjYmEzEl8weDU2YmFkNBJfMHg0YzU4OWQIdGltZQ5jb250ZW50DnJlZmVyZXIIZWFjaBJzdHJpbmdpZnkOaW5kZXhPZgh1cmxzBiQkJAxodWF3ZWkGbWFwEnZvZF9jbGFzcz4vYXBwdG8vdjEvdm9kL2dldExpc3RzP3R5cGVfaWQ9EmFyZWFfbGlzdBp2b2RfcGxheV9saXN0DHJhbmRvbRgmcGFnZVNpemU9MjEIeWVhcgZlbmN6YWJhY2RlZmdoamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4ORJ5ZWFyX2xpc3QOcmVwbGFjZQhsYW5nCmxhYmVsCnR5cGVzEHRyeSBuZXh0CnBhcnNlFHJlcGxhY2VBbGwIaGl0cwhwdXNoCFV0ZjhARGFsdmlrLzIuMS4wIChMaW51eDsgVTsgQW5kcm9pZCAWdm9kX3JlbWFya3MUc3RhcnRzV2l0aA5yZWxlYXNlWEFrOVFlRzVDZVdNN1JtSUVZQngyYmdGY1JWTitYeFYwQmxCRVhrUnVlbjA9Cmxpc3RzDnZvZF9waWMyJl9fcGxhdGZvcm09YW5kcm9pZCZfX2ljPRpnZXRfaG9tZV9jYXRlCGZpbmQSc3Vic3RyaW5nCHRyaW0IaHR0cBJsYXN0X3BhZ2UMZGV2aWNlFnBsYXllcl9pbmZvBmtleRRjaGFyQ29kZUF0EmxhbmdfbGlzdApzdHlwZQh5enlzHGhhc093blByb3BlcnR5FnRvTG93ZXJDYXNlDGV4dGVuZBRVc2VyLUFnZW50DiBCdWlsZC8IZGF0YQhrZXlzBnVybBZ0b1VwcGVyQ2FzZRZ2b2RfY29udGVudAhza2V5KGRuSmhHblI2ZXg0eWZuWTJBQT09CGFyZWESZm9ybS1kYXRhEnZvZF9hY3Rvcg52b2Rfc3ViFEVOQ1JZUFRJT04uL2FwcHRvL3YxL3BhcnNpbmcvcHJveHkQdm9kX2FyZWEadm9kX3BsYXlfZnJvbRhmcm9tQ2hhckNvZGUMJnBhZ2U9HEhVQVdFSSBNYXRlIDQwDGNvbmZpZwpzY29yZQx2b2RfaWQ8L2FwcHRvL3YyL2NvbmZpZy9nZXQ/cD1hbmRyb2lkDmhlYWRlcnMQdm9kX25hbWUOUmVmZXJlcpgBWDBOR1JVUUNGeDRERFExZEFGQUJCQnhhUkVzVlVnd1lVaEJXQ0ZCTldscENGbGxkQzB4QUMxUVZHVlJkV0JoQlYwUVlYQnNQUkFsWgZsb2cIcG9zdA5pc0VtcHR5CG1vbGQSdHlwZV9uYW1lCGNhdGUwQmdVQkRRUUFBUVZhQmdKVEJWNEVBQT09mANZRVY0YjExZ0RsWUVVbkFJWDFGUkFFWnhSZ2hRY0ZGR1h4ZHpTVTF1WUZjRmJ3eGRKbTlURUhzdkJ3RkdCa0Y3V21ZbVJrWUtCaFlBWDExTmJsc1RHaUFGYkNsdlh3VnRWMDlHUVVCVUozQU5BWGdnVmdaL0JtVjJiMzBuQWxrZlJ4TndIQXAzZGxRWGFDdGRVU3BOQ2dCaEMxRlBmR0JsT2sxN0lrWldXazFHYzFoZlhoNGxjR0V3UXdWRVpYMWplSFpKWlJWa0NGZz04YzFaQVFSZ0tGZ0JiRlIwQlZoUkREVnRhSGc9PRB2b2RfeWVhcg5mb3JFYWNoBjB4Mxw3NzI1Nzg4MWI1NWU3ZggweDJkCDB4MjQIMHgyYwgweDU1CDB4MmIGMHhmCDB4NDMSXzB4M2IyNzc2El8weDE4NGQ1MRJfMHgxNWRmYmUSXzB4MTZmYThhCnNoaWZ0El8weDFhOWRlNxJfMHg1NjQxMmESXzB4MWQ5YzZjEl8weDQzZmNmNBJfMHhmZDMwMWISXzB4MjUyM2EzEl8weDE1ODE2ZgZyZXEIMHgxNQgweDI2DG1ldGhvZAgweDExEHBvc3RUeXBlDnRpbWVvdXQIMHg0YggweDMxCDB4MTQIYWVzWAYweDkSXzB4NDdhYTYxEl8weDM2YmMzZBJfMHg3ZDUzNzUSXzB4NDAxZjExBjB4ZQYweDIIMHg1Zgpsb2NhbAgweDNhCDB4MTYIMHgyNwRpZAYweDUEdWEIMHg1MAgweDU0BDsgCm1vZGVsBjB4OA5idWlsZElkAikIMHgzNAxkb21haW4SXzB4YjE0YWIxEl8weDFjNDFhYhJfMHg0NTllYjESXzB4NDUxODBmEl8weDJmMTBkMhJfMHgxYjM5NzESXzB4YzNkMjVkEl8weDkxZTVlMxJfMHg1OTEyNmUSXzB4NWE0ZmM4El8weDIzOTdmMRJfMHg0YTA1ZTkSXzB4MmQxYTZmEl8weDQxOTdmYxJfMHg0NjdiNjUIMHgyMBZnZXRfcGFyc2luZwgweDU2CDB4NTkIMHgyOAgweDRlCDB4MmEOdHlwZV9pZAp0aXRsZQYweDYGMHhhCDB4NDgFe3yLVwYweDAIMHgzZAUwVzpTCDB4MTAGMHgxBe2LAIoIMHg0NggweDQ0BXRe404IMHg0MQhpbml0BWhR6JACbgJ2CDB4MzMKb3JkZXIFkmOPXggweDMwCDB4NGEFAGewZQUAZ+1wCDB4NGQFfVnEiwgweDFlDmNvbnNvbGUIMHgyNQ5maWx0ZXJzEl8weDQ1YzBlYwgweDI5El8weDRlYjA4MQR7fRJfMHgxYzMwNDQSXzB4Mjc4ZjhiEl8weDIzMjQ5NRJfMHgzODY1MWMSXzB4MTYxZjA2El8weDJmYmJhZhJfMHgzYmZkYzESXzB4NTg5YjIxEl8weGFkNDc5YwgweDNj5AEmYXJlYT17e2V4dC5hcmVhfX0mbGFuZz17e2V4dC5sYW5nfX0meWVhcj17e2V4dC55ZWFyfX0mb3JkZXI9e3tleHQub3JkZXJ8ZGVmYXVsdCgidGltZSIpfX0mdHlwZV9uYW1lPXt7ZXh0LmNsYXNzfX0GZXh0CDB4MWEIMHg0MAgweDIyCDB4NTcIMHgxMwhwYWdlEnBhZ2Vjb3VudAhsaXN0El8weDE4YmRiMBJfMHgxNjNhMTgSXzB4MmZjYjdmEl8weDNjMzE2YxJfMHg0MWZkYzASXzB4Mjk0NTk1El8weGQwYTlmZBJfMHgxMWE0YmQwL2FwcHRvL3YxL3ZvZC9nZXRWb2Q/aWQ9CDB4NTgkZW5jb2RlVVJJQ29tcG9uZW50CDB4MWYIMHgzYgIsCDB4MmUIMHgxNwgweDEyGHZvZF9kaXJlY3RvcgYweGQIMHgzZQgweDYwCDB4MWQIMHgzNgYweDQIMHgzOQIjCDB4MTgIMHgzNxh2b2RfcGxheV91cmwSXzB4NGM0NGZmCDB4NTMCJAYweGISXzB4NDU5MmFjEl8weDE5NjNjNBJfMHgyZjM2N2YSXzB4MTI0NmVlEl8weDM2NDA2YxJfMHg0YmViYzQSXzB4NjVkOTZkEl8weDQyM2E2YRJfMHgzY2YwNjIIMHg1YQgweDFjEHBsYXlfdXJsCDB4NDcIMHg0ORJfMHgzNGIzNmUIMHg2MRJfMHg3NGZmMzASXzB4NGFjMGQwEl8weDEzNDNmYxJfMHg1ZDU0NjYSXzB4MmY1ZmM5El8weDQ0ZWE3ZhJfMHhlZmU4YmM8L2FwcHRvL3YxL3ZvZC9nZXRWb2RTZWFyY2g/d2Q9CDB4NTEIMHg1ZRJfMHgxODc3NWISXzB4NDE4YzdiCDB4NGMIMHg0NQIgCDB4NWMSXzB4MTFjNDQzEl8weDQ2NjIyZRJfMHgzZjViMGIIMHgzNQgweDViEl8weDI0ZmRjMxJfMHg1YWNiMTUSXzB4NWJhMzcyEl8weDE3Y2U4ORJfMHg0YTI1YjYSXzB4NTE2ZDk1El8weDY4ODk1NAgweDUyBC8vDGh0dHBzOggweDVkCDB4MjEUdXNlci1hZ2VudAYweDcIMHgzMggweDIzCDB4MmYMaGVhZGVyEl8weDQ3ODY0NxJfMHgzMDM2ZDASXzB4MWIzMGFjEl8weDExMzgzNRJfMHgyMzYwY2QSXzB4NTc3NzFkEl8weGEyM2M2ZBJfMHgyOTU5MWEIMHgzZggweDM4CmJyYW5kCDB4MWIGMHhjEl8weDRkYWRlMhJfMHgxZGJkZTgSXzB4M2EzNmNkEl8weDQxYzZhYhJfMHg1M2RlOWYIMHgxOQgweDYyEl8weGQ0ODhlMRJfMHg1MGViODIIMHg0MgxCYXNlNjQIMHg0ZhJfMHgyMzk3MmUIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaA+kAwGmAwEAKagDAAUAqgMAAawDAAKuAwADsAMABLIDAA4ABgGgAQAAACAqFcAIAKoDAAysAwEMrgMCDLADAwyyAwQMtAMADbYDAQ24AwI
Line truncated
|
||||
+258
@@ -0,0 +1,258 @@
|
||||
// 自动从 地址发布页 获取&跳转url地址
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let key = '在线之家';
|
||||
let HOST = 'https://www.zxzj.site'; // 地址发布页
|
||||
let host = '';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
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';
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': agentSp || MOBILE_UA,
|
||||
'Referer': host
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
const html = await request(HOST);
|
||||
const $ = load(html);
|
||||
host = $('div.content-top > ul > li').find('a:first')[0].attribs.href;
|
||||
console.debug('在线之家 跳转地址 =====>' + host); // js_debug.log
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(host);
|
||||
const $ = load(html);
|
||||
const class_parse = $('ul.stui-header__menu > li > a[href*=list]');
|
||||
let classes = _.map(class_parse, (cls) => {
|
||||
let typeId = cls.attribs['href'];
|
||||
typeId = typeId.substring(typeId.lastIndexOf('/') + 1).replace('.html', '');
|
||||
return {
|
||||
type_id: typeId,
|
||||
type_name: cls.children[0].data,
|
||||
};
|
||||
});
|
||||
const filterObj = {
|
||||
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: '其他' }] }],
|
||||
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: '其他' }] }],
|
||||
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: '其他' }] }],
|
||||
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: '其他' }] }],
|
||||
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: '其他' }] }]
|
||||
};
|
||||
let filYer = { 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' }] };
|
||||
filYer['init'] = filYer.value[0].v;
|
||||
let filBy = { key: 'by', name: '排序', value: [{ n: '时间', v: 'time' }, { n: '人气', v: 'hits' }, { n: '评分', v: 'score' }] };
|
||||
filBy['init'] = filBy.value[0].v;
|
||||
return JSON.stringify({
|
||||
class: _.map(classes, (cls) => {
|
||||
if (filterObj[cls.type_id]) {
|
||||
filterObj[cls.type_id].push(filYer, filBy);
|
||||
filterObj[cls.type_id][0]['init'] = filterObj[cls.type_id][0].value[0].v;
|
||||
} else {
|
||||
filterObj[cls.type_id] = [];
|
||||
filterObj[cls.type_id].push(filYer, filBy)
|
||||
}
|
||||
return cls;
|
||||
}),
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const link = host + '/vodshow/1--hits---------2023.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
const items = $('ul.stui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const a = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: js2Base + base64Encode(a.attribs['data-original']),
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0 || typeof (pg) == 'undefined') pg = 1;
|
||||
const link = host + '/vodshow/' + tid + '-' + (extend.area || '') + '-' + (extend.by || 'time') + '-' + (extend.class || '') + '-' + (extend.lang || '') + '-' + (extend.letter || '') + '---' + pg + '---' + (extend.year || '') + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
const items = $('ul.stui-vodlist > li');
|
||||
let videos = _.map(items, (item) => {
|
||||
const a = $(item).find('a:first')[0];
|
||||
const remarks = $($(item).find('span.pic-text')[0]).text().trim();
|
||||
return {
|
||||
vod_id: a.attribs.href.replace(/.*?\/detail\/(.*).html/g, '$1'),
|
||||
vod_name: a.attribs.title,
|
||||
vod_pic: js2Base + base64Encode(a.attribs['data-original']),
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('ul.stui-page__item > li > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 24,
|
||||
total: 24 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(host + '/detail/' + id + '.html');
|
||||
const $ = load(html);
|
||||
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim(),
|
||||
vod_type: $('.stui-content__detail p:first a').text(),
|
||||
vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:', ''),
|
||||
vod_director: $('.stui-content__detail p:nth-child(4)').text().replace('导演:', ''),
|
||||
vod_pic: js2Base + base64Encode($('.stui-content__thumb img:first').attr('data-original')),
|
||||
vod_remarks: $('.stui-content__detail p:nth-child(5)').text() || '',
|
||||
vod_content: $('span.detail-content').text().trim(),
|
||||
};
|
||||
let playMap = {};
|
||||
const tabs = $('div.stui-vodlist__head > h3');
|
||||
const playlists = $('ul.stui-content__playlist');
|
||||
_.each(tabs, (tab, i) => {
|
||||
const from = tab.children[0].data;
|
||||
let list = playlists[i];
|
||||
list = $(list).find('a');
|
||||
_.each(list, (it) => {
|
||||
const title = it.children[0].data;
|
||||
const playUrl = it.attribs.href;
|
||||
if (title.length == 0) title = it.children[0].data.trim();
|
||||
if (!playMap.hasOwnProperty(from)) {
|
||||
playMap[from] = [];
|
||||
}
|
||||
playMap[from].push(title + '$' + playUrl);
|
||||
});
|
||||
});
|
||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||
const urls = _.values(playMap);
|
||||
let vod_play_url = _.map(urls, (urlist) => {
|
||||
return urlist.join('#');
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const html = await request(host + id);
|
||||
const mhtml = html.match(/r player_.*?=(.*?)</)[1];
|
||||
const json = JSON.parse(mhtml);
|
||||
const url = json.url;
|
||||
const from = json.from;
|
||||
if (json.encrypt == '1') {
|
||||
url = unescape(url)
|
||||
} else if (json.encrypt == '2') {
|
||||
url = unescape(base64Decode(url))
|
||||
}
|
||||
if (url.indexOf('m3u8') >= 0 || url.indexOf('mp4') >= 0) {
|
||||
// console.debug('在线之家url =====>' + url); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: url,
|
||||
});
|
||||
} else if (from.indexOf('line3') >= 0 || from.indexOf('line5') >= 0) {
|
||||
const ifrwy = await request(url);
|
||||
const 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))
|
||||
}
|
||||
const purl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7);
|
||||
// console.debug('在线之家purl =====>' + purl); // js_debug.log
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: purl,
|
||||
});
|
||||
} else {
|
||||
// console.debug('在线之家url =====>' + '空'); // js_debug.log
|
||||
return '{}';
|
||||
}
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
var data = JSON.parse(await request(host + '/index.php/ajax/suggest?mid=1&wd=' + wd + '&limit=50')).list;
|
||||
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||||
let videos = _.map(data, (it) => {
|
||||
return {
|
||||
vod_id: it.id,
|
||||
vod_name: it.name,
|
||||
vod_pic: js2Base + base64Encode(it.pic),
|
||||
vod_remarks: '',
|
||||
}
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
limit: 50,
|
||||
});
|
||||
}
|
||||
|
||||
function base64Encode(text) {
|
||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||
}
|
||||
|
||||
function base64Decode(text) {
|
||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||
}
|
||||
|
||||
async function proxy(segments, headers) {
|
||||
let what = segments[0];
|
||||
let url = base64Decode(segments[1]);
|
||||
if (what == 'img') {
|
||||
var resp = await req(url, {
|
||||
buffer: 2,
|
||||
headers: {
|
||||
Referer: 'https://api.douban.com/',
|
||||
'User-Agent': MOBILE_UA,
|
||||
},
|
||||
});
|
||||
return JSON.stringify({
|
||||
code: resp.code,
|
||||
buffer: 2,
|
||||
content: resp.content,
|
||||
headers: resp.headers,
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
code: 500,
|
||||
content: '',
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
proxy: proxy,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user