├── README.md └── js ├── app.js ├── xiaoya.js ├── build.js ├── lib ├── ali.js ├── similarity.js ├── quark.js └── utils.js ├── dovx_open.js ├── caiji.js ├── kuwo_open.js ├── pansearch_open.js ├── sharenice_open.js ├── bookan_open.js ├── MyCatBookan.js ├── tuxiaobei_open.js ├── ubestkid_open.js ├── zzmusic_open.js ├── zzmusic_book_open.js ├── lz_open.js ├── wogg_open.js ├── wobg_open.js ├── mimiju_open.js ├── ddmv_open.js ├── funletu.js ├── vsdj_open.js ├── zjm_open.js ├── kuqimv_open.js ├── dj0898_book_open.js ├── ufc_open.js ├── cntv_open.js ├── boosj_open.js ├── jiohub.js ├── lbgs_open.js ├── ikanbot.js ├── anfun_open.js ├── ikanbot_open.js ├── star_open.js ├── mtsp_open.js ├── czzy_open.js ├── kanqiu_open.js └── 1080kk_open.js /README.md: -------------------------------------------------------------------------------- 1 | # catvod 2 | 猫影视 3 | -------------------------------------------------------------------------------- /js/app.js: -------------------------------------------------------------------------------- 1 | function __jsEvalReturn() { 2 | return { 3 | isVideoFormat: function (url) { 4 | return !0; 5 | }, 6 | }; 7 | } 8 | export { __jsEvalReturn }; 9 | -------------------------------------------------------------------------------- /js/xiaoya.js: -------------------------------------------------------------------------------- 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}; -------------------------------------------------------------------------------- /js/build.js: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs'; 2 | import path from 'path'; 3 | import uglifyjs from 'uglify-js'; 4 | 5 | const copySpider = ['app', 'kunyu77_open', 'alist_open']; 6 | 7 | const root = process.cwd(); 8 | 9 | const src = path.join(root); 10 | const out = path.join(root, 'dist'); 11 | 12 | function minify(s, d) { 13 | var jsContent = fs.readFileSync(s).toString(); 14 | jsContent = jsContent.replace('./lib/cat.js', 'assets://js/lib/cat.js'); 15 | jsContent = jsContent.replace('./cat.js', 'assets://js/lib/cat.js'); 16 | jsContent = uglifyjs.minify(jsContent, { 17 | mangle: false, 18 | }); 19 | fs.writeFileSync(d, jsContent.code); 20 | } 21 | 22 | function listAllFiles(dirPath, arrayOfFiles) { 23 | var files = fs.readdirSync(dirPath); 24 | 25 | arrayOfFiles = arrayOfFiles || []; 26 | 27 | files.forEach(function (file) { 28 | if (fs.statSync(dirPath + '/' + file).isDirectory()) { 29 | arrayOfFiles = listAllFiles(dirPath + '/' + file, arrayOfFiles); 30 | } else { 31 | arrayOfFiles.push(path.join(dirPath, '/', file)); 32 | } 33 | }); 34 | 35 | return arrayOfFiles; 36 | } 37 | 38 | function src2Out() { 39 | if (fs.existsSync(out)) fs.rmSync(out, { recursive: true, force: true }); 40 | 41 | fs.mkdirSync(out, { recursive: true }); 42 | const libSrc = path.join(src, 'lib'); 43 | const libOut = path.join(out, 'lib'); 44 | fs.mkdirSync(libOut, { recursive: true }); 45 | const libs = listAllFiles(libSrc); 46 | for (let index = 0; index < libs.length; index++) { 47 | const element = libs[index]; 48 | const relative = path.relative(libSrc, element); 49 | minify(element, path.join(libOut, relative)); 50 | } 51 | 52 | for (const sp of copySpider) { 53 | minify(path.join(src, sp + '.js'), path.join(out, sp + '.js')); 54 | } 55 | } 56 | 57 | src2Out(); 58 | 59 | fs.copyFileSync(path.join(src, 'config_open.json'), path.join(out, 'config_open.json')); 60 | 61 | console.log('done'); 62 | -------------------------------------------------------------------------------- /js/lib/ali.js: -------------------------------------------------------------------------------- 1 | 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 -------------------------------------------------------------------------------- /js/lib/similarity.js: -------------------------------------------------------------------------------- 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;iratings[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;imaxlen&&(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;iresults[bestMatchIndex].lcs.length&&(bestMatchIndex=i)}return{allLCS:results,bestMatch:results[bestMatchIndex],bestMatchIndex:bestMatchIndex}}export{compareTwoStrings,findBestMatch,findBestLCS}; -------------------------------------------------------------------------------- /js/dovx_open.js: -------------------------------------------------------------------------------- 1 | import { _ } from 'assets://js/lib/cat.js'; 2 | import { log } from './lib/utils.js'; 3 | import { initAli, detailContent, playContent } from './lib/ali.js'; 4 | 5 | let siteKey = 'dovx'; 6 | let siteType = 0; 7 | let siteUrl = 'https://api.dovx.tk'; 8 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/ 9 | 10 | async function request(reqUrl) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'Referer': siteUrl, 15 | }, 16 | }); 17 | return res.content; 18 | } 19 | 20 | // cfg = {skey: siteKey, ext: extend} 21 | async function init(cfg) { 22 | try { 23 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey; 24 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype; 25 | await initAli(cfg); 26 | } catch (e) { 27 | await log('init:' + e.message + ' line:' + e.lineNumber); 28 | } 29 | } 30 | 31 | async function home(filter) { 32 | return '{}'; 33 | } 34 | 35 | async function homeVod() {} 36 | 37 | async function category(tid, pg, filter, extend) { 38 | return '{}'; 39 | } 40 | 41 | async function detail(id) { 42 | try { 43 | let matches = id.match(patternAli); 44 | if (!_.isEmpty(matches)) return await detailContent(matches[0]); 45 | return ''; 46 | } catch (e) { 47 | await log('detail:' + e.message + ' line:' + e.lineNumber); 48 | } 49 | } 50 | 51 | async function play(flag, id, flags) { 52 | try { 53 | return await playContent(flag, id, flags); 54 | } catch (e) { 55 | await log('play:' + e.message + ' line:' + e.lineNumber); 56 | } 57 | } 58 | 59 | async function search(wd, quick, pg) { 60 | let resp = await request(siteUrl + "/ali/search?wd=" + encodeURIComponent(wd)); 61 | let videos = JSON.parse(resp).list; 62 | _.each(videos, (item) => { 63 | item.vod_id = item.vod_content; 64 | item.vod_content = undefined; 65 | }); 66 | return JSON.stringify({ 67 | list: videos, 68 | }); 69 | } 70 | 71 | export function __jsEvalReturn() { 72 | return { 73 | init: init, 74 | home: home, 75 | homeVod: homeVod, 76 | category: category, 77 | detail: detail, 78 | play: play, 79 | search: search, 80 | }; 81 | } -------------------------------------------------------------------------------- /js/caiji.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1BMEGNhaWppLmpzGC4vbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgJfDnNpdGVLZXkQc2l0ZVR5cGUEVUEOYmFzZVVybAhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAxoZWFkZXIUVXNlci1BZ2VudAZ1cmwGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlEHR5cGVfcGlkCHB1c2gOdHlwZV9pZBJ0eXBlX25hbWUSc3RyaW5naWZ5DmZpbHRlcnMEe30GdGlkBHBnDGV4dGVuZAx2aWRlb3MgP2FjPXZpZGVvbGlzdCZ0PQgmcGc9CGxpc3QMdm9kX2lkEHZvZF9uYW1lDnZvZF9waWMWdm9kX3JlbWFya3MQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwEaWQGdm9kJD9hYz12aWRlb2xpc3QmaWRzPQ5pc0VtcHR5EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEADqgDAAEAqgMADgAGAaABAAAAAQ8KRQCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAG2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAagDDQEI6DS+AF8FAL4BXwYAvgJfBwC+A18IAL4EXwkAvgVfCgC+Bl8LAL4HXwwAvghfDQC+CV8OACm/4LPhBOMAAADiv18EACmkAwELAQA2Bg0NIQAElgIOYgYBtAMBAAECAwAjAcgDAAEArAMB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 -------------------------------------------------------------------------------- /js/kuwo_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1BgGGt1d29fb3Blbi5qcyxhc3NldHM6Ly9qcy9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuAl8Ga2V5CEhPU1QOc2l0ZUtleRBzaXRlVHlwZRJNT0JJTEVfVUEOcmVxdWVzdAhpbml0CGhvbWUOaG9tZVZvZBBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gHd5Htd2dSJmh0dHA6Ly93YXBpLmt1d28uY26WAk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTNfMl8zIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xMy4wLjMgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjEMcmVxVXJsDmFnZW50U3AGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5oZWFkZXJzDmNvbnRlbnQGY2ZnCHNrZXkKc3R5cGUMZmlsdGVyDmNsYXNzZXMSZmlsdGVyT2JqDnR5cGVfaWQJHHNgT/NgC3cSdHlwZV9uYW1lCR9Xc1QxcsVgCfRmGlm+fGlfDziXU5A7YMGIhHa6Th91CViNf1pTX1OQCytvK2/9j7tZ740JtlutXsVgH2ESc3RyaW5naWZ5DmZpbHRlcnMEe30GdGlkBHBnDGV4dGVuZAhsaW5rBGpvDHZpZGVvc1ovb3BlbmFwaS92MS9zaG9ydHBsYXkvbW9kdWxlTW9yZT9jdXJyZW50UGFnZT0UJm1vZHVsZUlkPQwmcm49MTIKcGFyc2UIZGF0YQhsaXN0DmZvckVhY2gQcGFyc2VJbnQIcGFnZRBuZXh0UGFnZRJwYWdlY291bnQQcGFnZVNpemUKbGltaXQKdG90YWwEaXQIcHVzaAZ1cmwMdm9kX2lkCnRpdGxlEHZvZF9uYW1lBmltZw52b2RfcGljGGN1cnJyZW50RGVzYxZ2b2RfcmVtYXJrcwRpZAZ2b2QOcGxheVVybFAvb3BlbmFwaS92MS9zaG9ydHBsYXkvdmlkZW9MaXN0P2FsYnVtSWQ9EnNob3J0aW5mbwpjb3ZlcgIjCVOQf5UoV79+GnZvZF9wbGF5X2Zyb20Ydm9kX3BsYXlfdXJsAiQSbXZwYXlpbmZvBnZpZAhmbGFnCGh0bWwIcHVybHRodHRwOi8vbm1vYmkua3V3by5jbi9tb2JpLnM/Zj13ZWImdHlwZT1nZXRfdXJsX2J5X3ZpZCZ2aWQ9CHVybD0Ed2QKcXVpY2sPpAMBpgMBAA6oAwABAKoDAA4ABgGgAQAAAAEPCUwAqgMADKwDAAmuAwEJsAMCCbIDAwm0AwQNtgMFAbgDBgG6AwcBvAMIAb4DCQHAAwoBwgMLAcQDDAGoAw0BCOgvvgBfBgC+AV8HAL4CXwgAvgNfCQC+BF8KAL4FXwsAvgZfDAC+B18NAL4IXw4AKQTjAAAA4ATkAAAA4b/is18EAATlAAAAXwUAKaQDAQoB+iEhDRgACMYBDmIGAbYDAgECBgEAMwPMAwABAM4DAAEA0AMBACC0AwUMYQAAOOkAAADPCwRBAAAATOoAAAAL0BHpBQ5lAABM6wAAAEzsAAAA7ovHYgAAQe0AAAAupAMKBxImNQhEHBIOYgYBuAMBAAECAgAYAdwDAAEAsAMDCLIDBAjPQe8AAAARZgAADs9B8AAAABFmAQAOBi6kAxQDAzo6DmIGAboDAQIBCAAHqQED4gMAAQDkAwEAMOYDAQEwYQEAYQAAC70ATPQAAAAE9QAAAEz2AAAAC70BTPQAAAAE9wAAAEz2AAAAC70CTPQAAAAE+AAAAEz2AAAAC70DTPQAAAAE+QAAAEz2AAAAC70ETPQAAAAE+gAAAEz2AAAAC70FTPQAAAAE+wAAAEz2AAAAC70GTPQAAAAE/AAAAEz2AAAAJgcAxwvIOJgAAABC/QAAAAtiAABMHgAAAGIBAEz+AAAAJAEALqQDGQkhAIIBAg06KysHBDEwBwQxMQcEMTIHBDEzBwQxNAcEMTUHBDE2DmIGAbwDAAAAAQAABgAE/wAAAC6kAyIBAw5iBgG+AwQDBAUCAaoBB4AEAAEAggQAAQDiAwABAIQEAAEAhgQBADCIBAEBMIoEAQJgrgMCCLYDBgBhAgBhAQBhAADQs6QR6QQO0PLoA7TUZQAABAYBAACd0J0EBwEAAJ3PnQQIAQAAncc4mAAAAEIJAQAA3GIAAO2LJAEAQQoBAADIJgAAyWIBAEELAQAAQgwBAAC+ACQBAA44mAAAAEL9AAAACzgNAQAA0O1MDgEAAGIBAEEPAQAATBABAABiAQBBEQEAAEwSAQAAYgEAQRMBAABMEwEAAGICAEwLAQAAJAEALqQDJg8wRIWAFwANDiE6P0RERCsOQwYBAAEAAQUBAD4BqAQAAQCKBAIJZQAAQhUBAAALz0EWAQAATBcBAADPQRgBAABMGQEAAM9BGgEAAEwbAQAAz0EcAQAAEekDDr9MHQEAACQBACmkAysHAzA6OjpTEg5iBgHAAwEFAQQCAcEBBrwEAAEAhgQBADCIBAEBML4EAQIwigQBA2DABAEEIK4DAgi2AwYAYQQAYQMAYQIAYQEAYQAAZQAABCEBAACdz53HOJgAAABCCQEAANxiAADtiyQBAEEKAQAAyAvPTBcBAABiAQBBIgEAAEEYAQAATBkBAABiAQBBIgEAAEEjAQAATBsBAAC/TB0BAADJJgAAymIBAEELAQAAQgwBAAC+ACQBAA5iAwBCWwAAAAQkAQAAJAEAwQRiAgAEJQEAAEMmAQAAYgIAYgQAQycBAAA4mAAAAEL9AAAAC2ICACYBAEwLAQAAJAEALqQDPBNOP4AIIV1dIQgXAA0IIV1EOjo6DkMGAQABAAEEAQAkAagEAAEAigQDCWUAAEIVAQAAz0E2AAAABCgBAACdz0EpAQAAQSoBAACdJAEAKaQDRgQDK3sSDmIGAcIDAwMDBAECVwbWBAABALwEAAEA2gEAAQCGBAEAMNgEAQEw2gQBAjC2AwYAYQIAYQEAYQAABC4BAADQncfbYgAA7YvIYgEAQl0AAAAELwEAACQBALRHQl0AAAC9AL0BMyQBALNHyTiYAAAAQv0AAAALs0wJAQAAYgIATBYBAAAkAQAupANTBzArJq06ISsHClxzKlxuB64BAAEAUAAAAAgGAAAABAf1////CwAcLAAAAAAAAAD///9/AQAAABUKAAkADQAgACAAoACgAIAWgBYAIAogKCApIC8gLyBfIF8gADAAMP/+//4KAQoADAAKDmIGAcQDAgACAQAABgLgBAABAOIEAAEABP8AAAAupANdAQMOQwYBqAMAAAACBwAyALgDBwC6AwgAvAMJAL4DCgDAAwsAwgMMAMQDDQAL20zcAAAA3EzdAAAA3UzeAAAA3kzfAAAAXgQATOAAAABeBQBM4QAAAF4GAEziAAAAKKQDYQkDCCEhISErKys= -------------------------------------------------------------------------------- /js/pansearch_open.js: -------------------------------------------------------------------------------- 1 | import { load, _ } from 'assets://js/lib/cat.js'; 2 | import { log } from './lib/utils.js'; 3 | import { initAli, detailContent, playContent } from './lib/ali.js'; 4 | 5 | let siteKey = 'pansearch'; 6 | let siteType = 0; 7 | let siteUrl = 'https://www.pansearch.me'; 8 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/ 9 | 10 | 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'; 11 | 12 | async function requestRaw(reqUrl, headers) { 13 | let res = await req(reqUrl, { 14 | method: 'get', 15 | headers: headers || { 16 | 'User-Agent': UA, 17 | 'Referer': siteUrl, 18 | }, 19 | }); 20 | return res; 21 | } 22 | 23 | async function request(reqUrl) { 24 | let resRaw = await requestRaw(reqUrl) 25 | return resRaw.content; 26 | } 27 | 28 | // cfg = {skey: siteKey, ext: extend} 29 | async function init(cfg) { 30 | try { 31 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey; 32 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype; 33 | await initAli(cfg); 34 | } catch (e) { 35 | await log('init:' + e.message + ' line:' + e.lineNumber); 36 | } 37 | } 38 | 39 | async function home(filter) { 40 | return '{}'; 41 | } 42 | 43 | async function homeVod() {} 44 | 45 | async function category(tid, pg, filter, extend) { 46 | return '{}'; 47 | } 48 | 49 | async function detail(id) { 50 | try { 51 | let matches = id.match(patternAli); 52 | if (!_.isEmpty(matches)) return await detailContent(matches[0]); 53 | return ''; 54 | } catch (e) { 55 | await log('detail:' + e.message + ' line:' + e.lineNumber); 56 | } 57 | } 58 | 59 | async function play(flag, id, flags) { 60 | try { 61 | return await playContent(flag, id, flags); 62 | } catch (e) { 63 | await log('play:' + e.message + ' line:' + e.lineNumber); 64 | } 65 | } 66 | 67 | async function search(wd, quick, pg) { 68 | if (pg <= 0) pg = 1; 69 | const html = await request(siteUrl); 70 | const $ = load(html); 71 | const script = $('script#__NEXT_DATA__')[0]; 72 | const data = script.children[0].data; 73 | const buildId = JSON.parse(data).buildId; 74 | const url = siteUrl + "/_next/data/" + buildId + "/search.json?keyword=" + encodeURIComponent(wd) + "&pan=aliyundrive"; 75 | const result = await requestRaw(url, getSearchHeader()); 76 | const array = JSON.parse(result.content).pageProps.data.data; 77 | const videoIdSet = new Set(); 78 | const videos = _.map(array, (item) => { 79 | const content = item.content; 80 | const $ = load(content); 81 | const split = content.split('\n'); 82 | if (split.length == 0) return undefined; 83 | const vodId = $('a').attr('href'); 84 | if (videoIdSet.has(vodId)) return undefined; 85 | videoIdSet.add(vodId); 86 | const img = item.image || "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000" 87 | const name = split[0].replaceAll(/<\/?[^>]+>/g, "").replace('名称:', ''); 88 | return { 89 | vod_id: vodId, 90 | vod_name: name, 91 | vod_pic: img, 92 | vod_remarks: item.time 93 | }; 94 | }); 95 | return JSON.stringify({ 96 | list: videos.filter(item => item !== undefined), 97 | }); 98 | } 99 | 100 | function getSearchHeader() { 101 | return { 102 | "x-nextjs-data": "1", 103 | "Referer": siteUrl, 104 | }; 105 | } 106 | 107 | export function __jsEvalReturn() { 108 | return { 109 | init: init, 110 | home: home, 111 | homeVod: homeVod, 112 | category: category, 113 | detail: detail, 114 | play: play, 115 | search: search, 116 | }; 117 | } -------------------------------------------------------------------------------- /js/sharenice_open.js: -------------------------------------------------------------------------------- 1 | // 搜索滑块验证 2 | import { load, _ } from './lib/cat.js'; 3 | 4 | let key = '短视频'; 5 | let HOST = 'http://www.sharenice.net'; 6 | let siteKey = ''; 7 | let siteType = 0; 8 | 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'; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'User-Agent': agentSp || PC_UA, 15 | }, 16 | }); 17 | return res.content; 18 | } 19 | 20 | async function init(cfg) { 21 | siteKey = cfg.skey; 22 | siteType = cfg.stype; 23 | } 24 | 25 | function clsjoin(cls) { 26 | _.each(cls, (s) => { 27 | let typeId = s.attribs['href']; 28 | typeId = typeId.substring(typeId.lastIndexOf('t/') + 2); 29 | classes.push({ 30 | type_id: typeId, 31 | type_name: s.children[0].data, 32 | }); 33 | }); 34 | } 35 | 36 | let classes = []; 37 | async function home(filter) { 38 | let filterObj = {}; 39 | let html = await request(HOST); 40 | let $ = load(html); 41 | let series = $('div.nav > ul > li > a[href*=net/]'); 42 | let tag = $('div.hot-tags-list > a[href*=net]'); 43 | clsjoin(series); 44 | clsjoin(tag); 45 | return JSON.stringify({ 46 | class: classes, 47 | filters: filterObj, 48 | }); 49 | } 50 | 51 | async function homeVod() { 52 | let link = HOST + '/t-576O5aWz'; 53 | let html = await request(link); 54 | let $ = load(html); 55 | let items = $('div.item-box ul li'); 56 | let videos = _.map(items, (item) => { 57 | let a = $(item).find('a:first')[0]; 58 | let img = $(item).find('img:first')[0]; 59 | return { 60 | vod_id: a.attribs.href, 61 | vod_name: a.attribs.title, 62 | vod_pic: img.attribs['data-original'], 63 | vod_remarks: '', 64 | }; 65 | }); 66 | return JSON.stringify({ 67 | list: videos, 68 | }); 69 | } 70 | 71 | async function category(tid, pg, filter, extend) { 72 | if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; 73 | let link = HOST + '/' + tid + '?page=' + pg; 74 | let html = await request(link); 75 | let $ = load(html); 76 | let items = $('div.item-box ul li'); 77 | let videos = _.map(items, (item) => { 78 | let a = $(item).find('a:first')[0]; 79 | let img = $(item).find('img:first')[0]; 80 | return { 81 | vod_id: a.attribs.href, 82 | vod_name: a.attribs.title, 83 | vod_pic: img.attribs['data-original'], 84 | vod_remarks: '', 85 | }; 86 | }); 87 | let hasMore = $('ul.pagination > li > a:contains(»)').length > 0; 88 | let pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 89 | return JSON.stringify({ 90 | page: parseInt(pg), 91 | pagecount: pgCount, 92 | limit: 16, 93 | total: 16 * pgCount, 94 | list: videos, 95 | }); 96 | } 97 | 98 | async function detail(id) { 99 | let vod = { 100 | vod_id: id, 101 | vod_remarks: '', 102 | }; 103 | let playlist = ['观看视频' + '$' + id]; 104 | vod.vod_play_from = '道长在线'; 105 | vod.vod_play_url = playlist.join('#'); 106 | return JSON.stringify({ 107 | list: [vod], 108 | }); 109 | } 110 | 111 | async function play(flag, id, flags) { 112 | let html = await request(id); 113 | let $ = load(html); 114 | let playUrl = $('div.video-play-box').find('video:first')[0].attribs.src + '#.mp4'; 115 | return JSON.stringify({ 116 | parse: 0, 117 | url: playUrl, 118 | }); 119 | } 120 | 121 | async function search(wd, quick, pg) { 122 | return '{}'; 123 | } 124 | 125 | export function __jsEvalReturn() { 126 | return { 127 | init: init, 128 | home: home, 129 | homeVod: homeVod, 130 | category: category, 131 | detail: detail, 132 | play: play, 133 | search: search, 134 | }; 135 | } -------------------------------------------------------------------------------- /js/bookan_open.js: -------------------------------------------------------------------------------- 1 | import { _ } from './lib/cat.js'; 2 | 3 | let key = 'bookkan'; 4 | let url = 'https://api.bookan.com.cn'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | async function request(reqUrl, agentSp) { 9 | let res = await req(reqUrl, { 10 | method: 'get', 11 | }); 12 | return res.content; 13 | } 14 | 15 | // cfg = {skey: siteKey, ext: extend} 16 | async function init(cfg) { 17 | siteKey = cfg.skey; 18 | siteType = cfg.stype; 19 | } 20 | 21 | async function home(filter) { 22 | return JSON.stringify({ 23 | class: [ 24 | { type_id: '1305', type_name: '少年读物' }, 25 | { type_id: '1304', type_name: '儿童文学' }, 26 | { type_id: '1320', type_name: '国学经典' }, 27 | { type_id: '1306', type_name: '文艺少年' }, 28 | { type_id: '1309', type_name: '育儿心经' }, 29 | { type_id: '1310', type_name: '心理哲学' }, 30 | { type_id: '1307', type_name: '青春励志' }, 31 | { type_id: '1312', type_name: '历史小说' }, 32 | { type_id: '1303', type_name: '故事会' }, 33 | { type_id: '1317', type_name: '音乐戏剧' }, 34 | { type_id: '1319', type_name: '相声评书' }, 35 | ], 36 | }); 37 | } 38 | 39 | async function category(tid, pg, filter, extend) { 40 | pg = pg || 1; 41 | if (pg == 0) pg = 1; 42 | let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`); 43 | let data = JSON.parse(content).data; 44 | let books = []; 45 | for (const book of data.list) { 46 | books.push({ 47 | book_id: book.id, 48 | book_name: book.name, 49 | book_pic: book.cover, 50 | book_remarks: book.extra.author, 51 | }); 52 | } 53 | return JSON.stringify({ 54 | page: data.current_page, 55 | pagecount: data.last_page, 56 | limit: 24, 57 | total: data.total, 58 | list: books, 59 | }); 60 | } 61 | 62 | async function detail(id) { 63 | let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`); 64 | let data = JSON.parse(content).data; 65 | 66 | let book = { 67 | book_id: id, 68 | type_name: '', 69 | book_year: '', 70 | book_area: '', 71 | book_remarks: '', 72 | book_actor: '', 73 | book_director: '', 74 | book_content: '', 75 | }; 76 | let us = _.map(data.list, function (b) { 77 | return formatPlayUrl(b.title) + '$' + b.file; 78 | }).join('#'); 79 | book.volumes = '书卷'; 80 | book.urls = us; 81 | 82 | return JSON.stringify({ 83 | list: [book], 84 | }); 85 | } 86 | 87 | function formatPlayUrl(name) { 88 | return name 89 | .trim() 90 | .replace(/<|>|《|》/g, '') 91 | .replace(/\$|#/g, ' ') 92 | .trim(); 93 | } 94 | 95 | async function proxy(segments, headers) {} 96 | 97 | async function play(flag, id, flags) { 98 | return JSON.stringify({ 99 | parse: 0, 100 | url: id, 101 | }); 102 | } 103 | 104 | async function search(wd, quick, pg) { 105 | pg = pg || 1; 106 | if (pg == 0) pg = 1; 107 | let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`); 108 | let data = JSON.parse(content).data; 109 | let books = []; 110 | for (const book of data.list) { 111 | books.push({ 112 | book_id: book.id, 113 | book_name: book.name, 114 | book_pic: book.cover, 115 | book_remarks: book.extra.author, 116 | }); 117 | } 118 | return JSON.stringify({ 119 | page: data.current_page, 120 | pagecount: data.last_page, 121 | limit: 20, 122 | total: data.total, 123 | list: books, 124 | }); 125 | } 126 | 127 | export function __jsEvalReturn() { 128 | return { 129 | init: init, 130 | home: home, 131 | category: category, 132 | detail: detail, 133 | play: play, 134 | search: search, 135 | }; 136 | } 137 | -------------------------------------------------------------------------------- /js/lib/quark.js: -------------------------------------------------------------------------------- 1 | (function(_0x4c5c03,_0x45bbe8){const _0x3ea5c5=_0x3957,_0x32f017=_0x4c5c03();while(!![]){try{const _0x3c6532=-parseInt(_0x3ea5c5(0xb9))/0x1*(parseInt(_0x3ea5c5(0xc9))/0x2)+-parseInt(_0x3ea5c5(0xd2))/0x3+parseInt(_0x3ea5c5(0xce))/0x4*(-parseInt(_0x3ea5c5(0xbb))/0x5)+-parseInt(_0x3ea5c5(0xca))/0x6*(-parseInt(_0x3ea5c5(0xd4))/0x7)+parseInt(_0x3ea5c5(0xc2))/0x8+-parseInt(_0x3ea5c5(0xba))/0x9+parseInt(_0x3ea5c5(0xcb))/0xa*(parseInt(_0x3ea5c5(0xb6))/0xb);if(_0x3c6532===_0x45bbe8)break;else _0x32f017['push'](_0x32f017['shift']());}catch(_0xb33a49){_0x32f017['push'](_0x32f017['shift']());}}}(_0x32bf,0xcc44f));const _0x450f56=(function(){let _0x21c5bf=!![];return function(_0x21cea6,_0x391ea8){const _0x205406=_0x21c5bf?function(){if(_0x391ea8){const _0x51f9aa=_0x391ea8['apply'](_0x21cea6,arguments);return _0x391ea8=null,_0x51f9aa;}}:function(){};return _0x21c5bf=![],_0x205406;};}()),_0x54a78c=_0x450f56(this,function(){const _0x4c865d=_0x3957;let _0x27bd2f;try{const _0x2345fb=Function(_0x4c865d(0xc7)+_0x4c865d(0xc3)+('{}.constru'+_0x4c865d(0xb5)+_0x4c865d(0xbd)+'\x20)')+');');_0x27bd2f=_0x2345fb();}catch(_0x401ad4){_0x27bd2f=window;}const _0x1204fc=_0x27bd2f['console']=_0x27bd2f['console']||{},_0x505caf=[_0x4c865d(0xbe),'warn',_0x4c865d(0xc1),'error','exception',_0x4c865d(0xc6),_0x4c865d(0xb7)];for(let _0x30ac70=0x0;_0x30ac70<_0x505caf[_0x4c865d(0xc4)];_0x30ac70++){const _0x308b73=_0x450f56[_0x4c865d(0xb2)+'r'][_0x4c865d(0xcf)][_0x4c865d(0xcd)](_0x450f56),_0x20f0f9=_0x505caf[_0x30ac70],_0x140884=_0x1204fc[_0x20f0f9]||_0x308b73;_0x308b73['__proto__']=_0x450f56[_0x4c865d(0xcd)](_0x450f56),_0x308b73[_0x4c865d(0xd3)]=_0x140884[_0x4c865d(0xd3)][_0x4c865d(0xcd)](_0x140884),_0x1204fc[_0x20f0f9]=_0x308b73;}});_0x54a78c();import{_}from'assets://js/lib/cat.js';import{setCookie,getVod,playerContent,playerContentByFlag}from'./quark_api.js';const quarkPattern=/pan.quark.cn\/s\/([^\/\?#]+)/;async function initQuark(_0x507ed0){await setCookie(_0x507ed0);}async function detailContent(_0x3c0bde){const _0x551b3d=_0x3957;let _0x3a59a7=_0x3c0bde['match'](quarkPattern),_0x1ba526=await parseVod(_0x3a59a7,_0x3c0bde);const _0x14294c={};_0x14294c[_0x551b3d(0xc8)]=[_0x1ba526];let _0x27eeb=JSON[_0x551b3d(0xbc)](_0x14294c);return console['debug'](_0x27eeb),_0x27eeb;}async function parseVod(_0x2f218d,_0x3c8dfe){if(_['isEmpty'](_0x2f218d))return{};let _0x51f8dd=_0x2f218d[0x1];return await getVod(_0x51f8dd,_0x3c8dfe);}async function playContent(_0x25f4bc,_0x1327ee,_0x1c091b){const _0xeed556=_0x3957;let _0x2e077b=_0x1327ee[_0xeed556(0xc0)]('+');_0x25f4bc=_0x25f4bc['split']('#')[0x0];let _0x2a0229=_0x25f4bc=='原画'?await playerContent(_0x2e077b):await playerContentByFlag(_0x2e077b,_0x25f4bc);return console[_0xeed556(0xcc)](_0xeed556(0xb3)+'ontent----'+'---'),console[_0xeed556(0xcc)](_0x2a0229),_0x2a0229;}function _0x32bf(){const _0x5d4548=['prototype','match','vod_play_u','2078325FdacNT','toString','7vAhLMH','constructo','-----playC','isEmpty','ctor(\x22retu','10586785pRxyHq','trace','join','3257WjWMrY','13754799bEqCTL','835LkOWae','stringify','rn\x20this\x22)(','log','$$$','split','info','8829440UaBHOS','nction()\x20','length','push','table','return\x20(fu','list','122naccBu','1506594qXMmDN','30yLHADS','debug','bind','23608tdvGOH'];_0x32bf=function(){return _0x5d4548;};return _0x32bf();}function detailContentVodPlayFrom(_0x4017ee){const _0x2119b1=_0x3957;let _0x2baf78=[];if(_0x4017ee['length']<0x2)return['原画','普画'][_0x2119b1(0xb8)](_0x2119b1(0xbf));for(let _0x58f659=0x1;_0x58f659<=_0x4017ee[_0x2119b1(0xc4)];_0x58f659++){_0x2baf78[_0x2119b1(0xc5)]('原画#'+_0x58f659),_0x2baf78[_0x2119b1(0xc5)]('普画#'+_0x58f659);}return _0x2baf78[_0x2119b1(0xb8)](_0x2119b1(0xbf));}async function detailContentVodPlayUrl(_0x57cee4){const _0x28fd9b=_0x3957;console[_0x28fd9b(0xcc)](_0x57cee4);let _0x3807d8=[];for(var _0x2abc63 of _0x57cee4){let _0xdac588=_0x2abc63[_0x28fd9b(0xd0)](quarkPattern);console[_0x28fd9b(0xcc)](_0xdac588);if(!_[_0x28fd9b(0xb4)](_0xdac588)){let _0x581274=await parseVod(_0xdac588,_0x2abc63);_0x3807d8[_0x28fd9b(0xc5)](_0x581274[_0x28fd9b(0xd1)+'rl']);}}return _0x3807d8[_0x28fd9b(0xb8)](_0x28fd9b(0xbf));}function _0x3957(_0x93218d,_0x328719){const _0x34dd0c=_0x32bf();return _0x3957=function(_0x54a78c,_0x450f56){_0x54a78c=_0x54a78c-0xb2;let _0xc784f1=_0x34dd0c[_0x54a78c];return _0xc784f1;},_0x3957(_0x93218d,_0x328719);}export{initQuark,detailContent,playContent,detailContentVodPlayFrom,detailContentVodPlayUrl}; -------------------------------------------------------------------------------- /js/MyCatBookan.js: -------------------------------------------------------------------------------- 1 | import { _ } from './lib/cat.js'; 2 | 3 | let key = 'bookan'; 4 | let url = 'https://api.bookan.com.cn'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | async function request(reqUrl, agentSp) { 9 | let res = await req(reqUrl, { 10 | method: 'get', 11 | }); 12 | return res.content; 13 | } 14 | 15 | // cfg = {skey: siteKey, ext: extend} 16 | async function init(cfg) { 17 | siteKey = cfg.skey; 18 | siteType = cfg.stype; 19 | } 20 | 21 | async function home(filter) { 22 | return JSON.stringify({ 23 | class: [ 24 | { type_id: '1305', type_name: '少年读物' }, 25 | { type_id: '1304', type_name: '儿童文学' }, 26 | { type_id: '1320', type_name: '国学经典' }, 27 | { type_id: '1306', type_name: '文艺少年' }, 28 | { type_id: '1309', type_name: '育儿心经' }, 29 | { type_id: '1310', type_name: '心理哲学' }, 30 | { type_id: '1307', type_name: '青春励志' }, 31 | { type_id: '1312', type_name: '历史小说' }, 32 | { type_id: '1303', type_name: '故事会' }, 33 | { type_id: '1317', type_name: '音乐戏剧' }, 34 | { type_id: '1319', type_name: '相声评书' }, 35 | ], 36 | }); 37 | } 38 | 39 | async function homeVod() { 40 | return JSON.stringify({ 41 | list: [], 42 | }); 43 | } 44 | 45 | async function category(tid, pg, filter, extend) { 46 | pg = pg || 1; 47 | if (pg == 0) pg = 1; 48 | let content = await request(`${url}/voice/book/list?instance_id=25304&page=${pg}&category_id=${tid}&num=24`); 49 | let data = JSON.parse(content).data; 50 | let books = []; 51 | for (const book of data.list) { 52 | books.push({ 53 | vod_id: book.id, 54 | vod_name: book.name, 55 | vod_pic: book.cover, 56 | vod_remarks: book.extra.author, 57 | }); 58 | } 59 | return JSON.stringify({ 60 | page: data.current_page, 61 | pagecount: data.last_page, 62 | limit: 24, 63 | total: data.total, 64 | list: books, 65 | }); 66 | } 67 | 68 | async function detail(id) { 69 | let content = await request(`${url}/voice/album/units?album_id=${id}&page=1&num=200&order=1`); 70 | let data = JSON.parse(content).data; 71 | console.log(JSON.stringify(data)); 72 | 73 | let book = { 74 | vod_id: id, 75 | type_name: '', 76 | vod_year: '', 77 | vod_area: '', 78 | vod_remarks: '', 79 | vod_actor: '', 80 | vod_director: '', 81 | vod_content: '', 82 | }; 83 | let us = _.map(data.list, function (b) { 84 | return formatPlayUrl(b.title) + '$' + b.file; 85 | }).join('#'); 86 | book.vod_play_from = '书卷'; 87 | book.vod_play_url = us; 88 | 89 | return JSON.stringify({ 90 | list: [book], 91 | }); 92 | } 93 | 94 | function formatPlayUrl(name) { 95 | return name 96 | .trim() 97 | .replace(/<|>|\.《.*?》/g, '. ') 98 | .replace(/\$|#/g, ' ') 99 | .trim(); 100 | } 101 | 102 | async function proxy(segments, headers) {} 103 | 104 | async function play(flag, id, flags) { 105 | return JSON.stringify({ 106 | parse: 0, 107 | url: id, 108 | }); 109 | } 110 | 111 | async function search(wd, quick, pg) { 112 | pg = pg || 1; 113 | if (pg == 0) pg = 1; 114 | let content = await request(`https://es.bookan.com.cn/api/v3/voice/book?instanceId=25304&keyword=${wd}&pageNum=${pg}&limitNum=20`); 115 | let data = JSON.parse(content).data; 116 | let books = []; 117 | for (const book of data.list) { 118 | books.push({ 119 | vod_id: book.id, 120 | vod_name: book.name, 121 | vod_pic: book.cover, 122 | vod_remarks: book.extra.author, 123 | }); 124 | } 125 | return JSON.stringify({ 126 | page: data.current_page, 127 | pagecount: data.last_page, 128 | limit: 20, 129 | total: data.total, 130 | list: books, 131 | }); 132 | } 133 | 134 | export function __jsEvalReturn() { 135 | return { 136 | init: init, 137 | home: home, 138 | homeVod: homeVod, 139 | category: category, 140 | detail: detail, 141 | play: play, 142 | search: search, 143 | }; 144 | } -------------------------------------------------------------------------------- /js/tuxiaobei_open.js: -------------------------------------------------------------------------------- 1 | import { load, _ } from './lib/cat.js'; 2 | let key = '🐰兔小贝'; 3 | let HOST = 'https://www.tuxiaobei.com'; 4 | let siteKey = ''; 5 | let siteType = 0; 6 | 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'; 7 | 8 | async function request(reqUrl, agentSp) { 9 | let res = await req(reqUrl, { 10 | method: 'get', 11 | headers: { 12 | 'User-Agent': agentSp || IOS_UA, 13 | }, 14 | }); 15 | return res.content 16 | } 17 | 18 | async function init(cfg) { 19 | siteKey = cfg.skey; 20 | siteType = cfg.stype 21 | } 22 | 23 | async function home(filter) { 24 | 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: '🐰折纸' }]; 25 | const filterObj = {}; 26 | return JSON.stringify({ 27 | class: _.map(classes, (cls) => { 28 | cls.land = 1; 29 | cls.ratio = 1.78; 30 | return cls; 31 | }), 32 | filters: filterObj, 33 | }) 34 | } 35 | 36 | async function homeVod() { 37 | const link = await request(HOST + '/list/mip-data?typeId=9&page=1&callback='); 38 | const html = link.match(/\((.*?)\);/)[1]; 39 | const data = JSON.parse(html).data; 40 | let videos = _.map(data.items, (it) => { 41 | return { 42 | vod_id: it.video_id, 43 | vod_name: it.name, 44 | vod_pic: it.image, 45 | vod_remarks: it.root_category_name + ' | ' + it.duration_string || '', 46 | } 47 | }); 48 | return JSON.stringify({ 49 | list: videos, 50 | }) 51 | } 52 | 53 | async function category(tid, pg, filter, extend) { 54 | if (pg <= 0 || typeof pg == 'undefined') pg = 1; 55 | const link = await request(HOST + '/list/mip-data?typeId=' + tid + '&page=' + pg + '&callback='); 56 | const html = link.match(/\((.*?)\);/)[1]; 57 | const data = JSON.parse(html).data; 58 | let videos = _.map(data.items, (it) => { 59 | return { 60 | vod_id: it.video_id, 61 | vod_name: it.name, 62 | vod_pic: it.image, 63 | vod_remarks: it.root_category_name + ' | ' + it.duration_string || '', 64 | } 65 | }); 66 | const pgCount = pg * 30 > data.totalCount ? parseInt(pg) : parseInt(pg) + 1; 67 | return JSON.stringify({ 68 | page: parseInt(pg), 69 | pagecount: pgCount, 70 | limit: 30, 71 | total: data.totalCount, 72 | list: videos, 73 | }) 74 | } 75 | 76 | async function detail(id) { 77 | const vod = { 78 | vod_id: id, 79 | vod_remarks: '', 80 | }; 81 | const playlist = ['点击播放' + '$' + HOST + '/play/' + id]; 82 | vod.vod_play_from = "道长在线"; 83 | vod.vod_play_url = playlist.join('#'); 84 | return JSON.stringify({ 85 | list: [vod], 86 | }); 87 | } 88 | 89 | async function play(flag, id, flags) { 90 | const html = await request(id); 91 | const $ = load(html); 92 | const pvideo = $("body mip-search-video[video-src*=http]"); 93 | const purl = pvideo[0].attribs['video-src']; 94 | // console.debug('兔小贝 purl =====>' + purl); // js_debug.log 95 | return JSON.stringify({ 96 | parse: 0, 97 | url: purl, 98 | }); 99 | } 100 | 101 | async function search(wd, quick) { 102 | const link = HOST + "/search/" + wd; 103 | const html = await request(link); 104 | const $ = load(html); 105 | const list = $("div.list-con > div.items"); 106 | let videos = _.map(list, (it) => { 107 | const a = $(it).find("a:first")[0]; 108 | const img = $(it).find("mip-img:first")[0]; 109 | const tt = $(it).find("p:first")[0]; 110 | const remarks = $(it).find("p")[1]; 111 | return { 112 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*)/g, '$1'), 113 | vod_name: tt.children[0].data, 114 | vod_pic: img.attribs["src"], 115 | vod_remarks: remarks.children[0].data || "", 116 | }; 117 | }); 118 | return JSON.stringify({ 119 | list: videos, 120 | land: 1, 121 | ratio: 1.78, 122 | }); 123 | } 124 | 125 | export function __jsEvalReturn() { 126 | return { 127 | init: init, 128 | home: home, 129 | homeVod: homeVod, 130 | category: category, 131 | detail: detail, 132 | play: play, 133 | search: search, 134 | } 135 | } -------------------------------------------------------------------------------- /js/lib/utils.js: -------------------------------------------------------------------------------- 1 | function _0x4e52(){var _0x4b8bf5=['url=http','1382974hiKODw','5871240Ipxjsn','bind','trace','user-agent','indexOf','lastIndexO','startsWith','toString','getTime','7CVDdSa','info','https:','test','ssa','User-Agent','.html','trim','debug','.js','150036TmIRgD','referer','http','11017656ZydzgO','srt','constructo','Referer','header','console','prototype','parse','object','rn\x20this\x22)(','28630630kMOzGq','ass','apply','warn','url','error','__proto__','7449978aWnqPZ','4884584yMuOfJ','table','toFixed','2WSBJnA','30zpMcox','log','length','substring'];_0x4e52=function(){return _0x4b8bf5;};return _0x4e52();}(function(_0x15c03b,_0x391826){var _0x5205c0=_0x5bba,_0x4cbac1=_0x15c03b();while(!![]){try{var _0x27c1fc=parseInt(_0x5205c0(0xeb))/0x1*(parseInt(_0x5205c0(0xe5))/0x2)+parseInt(_0x5205c0(0xe6))/0x3*(parseInt(_0x5205c0(0xff))/0x4)+-parseInt(_0x5205c0(0xec))/0x5+parseInt(_0x5205c0(0xe1))/0x6+parseInt(_0x5205c0(0xf5))/0x7*(parseInt(_0x5205c0(0xe2))/0x8)+parseInt(_0x5205c0(0x102))/0x9+-parseInt(_0x5205c0(0x10c))/0xa;if(_0x27c1fc===_0x391826)break;else _0x4cbac1['push'](_0x4cbac1['shift']());}catch(_0x21ce98){_0x4cbac1['push'](_0x4cbac1['shift']());}}}(_0x4e52,0xc29f5));var _0x548a1f=(function(){var _0x9e8820=!![];return function(_0x5c0c22,_0x2254bb){var _0x250d26=_0x9e8820?function(){var _0x5345f8=_0x5bba;if(_0x2254bb){var _0x359513=_0x2254bb[_0x5345f8(0xdc)](_0x5c0c22,arguments);return _0x2254bb=null,_0x359513;}}:function(){};return _0x9e8820=![],_0x250d26;};}()),_0xba9bf4=_0x548a1f(this,function(){var _0x1f61f5=_0x5bba,_0xc3048b=function(){var _0x2f80cd=_0x5bba,_0x45ff50;try{_0x45ff50=Function('return\x20(fu'+'nction()\x20'+('{}.constru'+'ctor(\x22retu'+_0x2f80cd(0x10b)+'\x20)')+');')();}catch(_0x59ef24){_0x45ff50=window;}return _0x45ff50;},_0x40bfd5=_0xc3048b(),_0x488c1e=_0x40bfd5[_0x1f61f5(0x107)]=_0x40bfd5['console']||{},_0x590bda=[_0x1f61f5(0xe7),_0x1f61f5(0xdd),_0x1f61f5(0xf6),_0x1f61f5(0xdf),'exception',_0x1f61f5(0xe3),_0x1f61f5(0xee)];for(var _0x521178=0x0;_0x521178<_0x590bda[_0x1f61f5(0xe8)];_0x521178++){var _0x57d35a=_0x548a1f[_0x1f61f5(0x104)+'r'][_0x1f61f5(0x108)][_0x1f61f5(0xed)](_0x548a1f),_0x2418cf=_0x590bda[_0x521178],_0x3b1c5a=_0x488c1e[_0x2418cf]||_0x57d35a;_0x57d35a[_0x1f61f5(0xe0)]=_0x548a1f[_0x1f61f5(0xed)](_0x548a1f),_0x57d35a[_0x1f61f5(0xf3)]=_0x3b1c5a[_0x1f61f5(0xf3)][_0x1f61f5(0xed)](_0x3b1c5a),_0x488c1e[_0x2418cf]=_0x57d35a;}});_0xba9bf4();function _0x5bba(_0x1815a0,_0x159134){var _0x57e41f=_0x4e52();return _0x5bba=function(_0xba9bf4,_0x548a1f){_0xba9bf4=_0xba9bf4-0xdc;var _0x35399a=_0x57e41f[_0xba9bf4];return _0x35399a;},_0x5bba(_0x1815a0,_0x159134);}function isSub(_0x488f14){var _0x27950=_0x5bba;return _0x488f14==_0x27950(0x103)||_0x488f14==_0x27950(0x10d)||_0x488f14==_0x27950(0xf9);}function getSize(_0x4b6431){var _0x5e3f27=_0x5bba;if(_0x4b6431<=0x0)return'';if(_0x4b6431>0x400*0x400*0x400*0x400)return _0x4b6431/=0x400*0x400*0x400*0x400,_0x4b6431['toFixed'](0x2)+'TB';else{if(_0x4b6431>0x400*0x400*0x400)return _0x4b6431/=0x400*0x400*0x400,_0x4b6431['toFixed'](0x2)+'GB';else return _0x4b6431>0x400*0x400?(_0x4b6431/=0x400*0x400,_0x4b6431[_0x5e3f27(0xe4)](0x2)+'MB'):(_0x4b6431/=0x400,_0x4b6431[_0x5e3f27(0xe4)](0x2)+'KB');}}function removeExt(_0x5548b5){var _0x565f01=_0x5bba;return _0x5548b5[_0x565f01(0xf0)]('.')>-0x1?_0x5548b5[_0x565f01(0xe9)](0x0,_0x5548b5[_0x565f01(0xf1)+'f']('.')):_0x5548b5;}async function log(_0x495ef1){var _0x228e08=_0x5bba;console[_0x228e08(0xfd)](_0x495ef1);}function isVideoFormat(_0x3f730f){var _0x1e1d26=_0x5bba,_0x52baed=/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(_0x3f730f[_0x1e1d26(0xf0)](_0x1e1d26(0xea))>-0x1||_0x3f730f[_0x1e1d26(0xf0)](_0x1e1d26(0xfe))>-0x1||_0x3f730f['indexOf']('.css')>-0x1||_0x3f730f['indexOf'](_0x1e1d26(0xfb))>-0x1)return![];return _0x52baed[_0x1e1d26(0xf8)](_0x3f730f);}function jsonParse(_0x3f7e9a,_0xe485da){var _0xa22345=_0x5bba,_0x5367c6=JSON[_0xa22345(0x109)](_0xe485da),_0x7f06a9=_0x5367c6[_0xa22345(0xde)];_0x7f06a9['startsWith']('//')&&(_0x7f06a9=_0xa22345(0xf7)+_0x7f06a9);if(!_0x7f06a9[_0xa22345(0xf2)](_0xa22345(0x101)))return null;if(_0x7f06a9===_0x3f7e9a){if(!isVideoFormat(_0x7f06a9))return null;}var _0x8f8839={},_0x4d1652=_0x5367c6[_0xa22345(0xef)]||'';_0x4d1652[_0xa22345(0xfc)]()['length']>0x0&&(_0x8f8839[_0xa22345(0xfa)]='\x20'+_0x4d1652);var _0x471fbf=_0x5367c6[_0xa22345(0x100)]||'';_0x471fbf[_0xa22345(0xfc)]()[_0xa22345(0xe8)]>0x0&&(_0x8f8839[_0xa22345(0x105)]='\x20'+_0x471fbf);var _0x1ec211={};_0x1ec211[_0xa22345(0x106)]=_0x8f8839,_0x1ec211[_0xa22345(0xde)]=_0x7f06a9;var _0x43c7e3=_0x1ec211;return _0x43c7e3;}function debug(_0x35163d){var _0x5e9177=_0x5bba;for(var _0x2c66a0 in _0x35163d){typeof _0x35163d[_0x2c66a0]==_0x5e9177(0x10a)?debug(_0x35163d[_0x2c66a0]):console[_0x5e9177(0xfd)](_0x2c66a0+'='+_0x35163d[_0x2c66a0]);}}function sleep(_0x1259f8){var _0x51436f=_0x5bba,_0x178af9=new Date()['getTime']();while(new Date()[_0x51436f(0xf4)]()-_0x178af9<_0x1259f8){continue;}}export{isSub,getSize,removeExt,log,isVideoFormat,jsonParse,debug,sleep}; -------------------------------------------------------------------------------- /js/ubestkid_open.js: -------------------------------------------------------------------------------- 1 | // 无搜索功能 2 | import { _ } from './lib/cat.js'; 3 | let key = '🐯贝乐虎'; 4 | let HOST = 'https://vd.ubestkid.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 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'; 8 | 9 | async function request(reqUrl, referer, mth, data, hd) { 10 | const headers = { 11 | "User-Agent": MOBILE_UA, 12 | }; 13 | if (referer) headers.referer = encodeURIComponent(referer); 14 | let res = await req(reqUrl, { 15 | method: mth || "get", 16 | headers: headers, 17 | data: data, 18 | postType: mth === "post" ? "json" : "", 19 | }); 20 | return res.content; 21 | } 22 | 23 | async function init(cfg) { 24 | siteKey = cfg.skey; 25 | siteType = cfg.stype 26 | } 27 | 28 | async function home(filter) { 29 | 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: '🐯启蒙系列体验版' }]; 30 | const filterObj = {}; 31 | return JSON.stringify({ 32 | class: _.map(classes, (cls) => { 33 | cls.land = 1; 34 | cls.ratio = 1.78; 35 | return cls; 36 | }), 37 | filters: filterObj, 38 | }) 39 | } 40 | 41 | async function homeVod() { 42 | const link = HOST + "/api/v1/bv/video"; 43 | const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: 56, "p": 1 }; 44 | const jo = JSON.parse(await request(link, "", "post", pdata)).result; 45 | const videos = []; 46 | _.each(jo.items, (it) => { 47 | videos.push({ 48 | vod_id: it.url, 49 | vod_name: it.title, 50 | vod_pic: it.image, 51 | vod_remarks: '👀' + it.viewcount || '', 52 | }) 53 | }); 54 | return JSON.stringify({ 55 | list: videos, 56 | }) 57 | } 58 | 59 | async function category(tid, pg, filter, extend) { 60 | if (pg <= 0 || typeof pg == 'undefined') pg = 1; 61 | const link = HOST + "/api/v1/bv/video"; 62 | const pdata = { age: 1, appver: "6.1.9", egvip_status: 0, svip_status: 0, vps: 60, subcateId: tid, "p": pg }; 63 | const jo = JSON.parse(await request(link, "", "post", pdata)).result; 64 | const videos = []; 65 | _.each(jo.items, (it) => { 66 | videos.push({ 67 | vod_id: it.url, 68 | vod_name: it.title, 69 | vod_pic: it.image, 70 | vod_remarks: '👀' + it.viewcount || '', 71 | }) 72 | }); 73 | const pgCount = pg * 60 > jo.total ? parseInt(pg) : parseInt(pg) + 1; 74 | return JSON.stringify({ 75 | page: parseInt(pg), 76 | pagecount: pgCount, 77 | limit: 60, 78 | total: jo.total, 79 | list: videos, 80 | }) 81 | } 82 | 83 | async function detail(id) { 84 | const vod = { 85 | vod_id: id, 86 | vod_remarks: '', 87 | }; 88 | const playlist = ['点击播放' + '$' + id]; 89 | vod.vod_play_from = "道长在线"; 90 | vod.vod_play_url = playlist.join('#'); 91 | return JSON.stringify({ 92 | list: [vod], 93 | }); 94 | } 95 | 96 | async function play(flag, id, flags) { 97 | // console.debug('贝乐虎 id =====>' + id); // js_debug.log 98 | return JSON.stringify({ 99 | parse: 0, 100 | url: id, 101 | }); 102 | } 103 | 104 | async function search(wd, quick) { 105 | return '{}' 106 | } 107 | 108 | export function __jsEvalReturn() { 109 | return { 110 | init: init, 111 | home: home, 112 | homeVod: homeVod, 113 | category: category, 114 | detail: detail, 115 | play: play, 116 | search: search, 117 | } 118 | } -------------------------------------------------------------------------------- /js/zzmusic_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from './lib/cat.js'; 2 | //代理地址 3 | let siteUrl = 'https://gh.7761.cf/https://zz123.com'; 4 | let imgUrl = 'https://music.jsbaidu.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | let headers = {}; 8 | 9 | async function request(reqUrl, postData, agentSp, get) { 10 | 11 | let res = await req(reqUrl, { 12 | method: get ? 'get' : 'post', 13 | headers: headers, 14 | data: postData || {}, 15 | postType: get ? '' : 'form', 16 | }); 17 | 18 | let content = res.content; 19 | return content; 20 | } 21 | 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | if (cfg.ext) { 26 | siteUrl = cfg.ext; 27 | } 28 | } 29 | 30 | async function home(filter) { 31 | const html = await request(siteUrl); 32 | const $ = load(html); 33 | const cates = $('ul.aside-menu-list.channel > li') 34 | let classes = _.map(cates, (n) => { 35 | let id = n.attribs['data-id']; 36 | let name = $($(n).find('a > span')[0]).text(); 37 | return { 38 | type_id: id, 39 | type_name: name 40 | }; 41 | }); 42 | return JSON.stringify({ 43 | class: classes 44 | }); 45 | } 46 | 47 | async function homeVod() { 48 | const html = await request(siteUrl); 49 | const $ = load(html); 50 | const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div'); 51 | let videos = _.map(cards, (n) => { 52 | let id = n.attribs['data-id']; 53 | let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text(); 54 | let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl); 55 | let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text(); 56 | return { 57 | vod_id: id, 58 | vod_name: name, 59 | vod_pic: pic, 60 | vod_remarks: remark 61 | }; 62 | }); 63 | return JSON.stringify({ 64 | list: videos 65 | }); 66 | } 67 | 68 | async function category(tid, pg, filter, extend) { 69 | if (pg <= 0) pg = 1; 70 | let url = siteUrl + '/ajax/'; 71 | let res = await req(url, { 72 | method: 'post', 73 | data: { 74 | act: 'tag_music', 75 | type: 'tuijian', 76 | tid: tid, 77 | page: pg, 78 | lang: '' 79 | }, 80 | postType: 'form' 81 | }); 82 | //console.log('catedata:', res); 83 | let data = JSON.parse(res.content).data; 84 | let videos = []; 85 | for(let i=0;i div.card-list.d-none.d-md-block > div') 133 | let videos = _.map(cards, (n) => { 134 | let id = n.attribs['data-id']; 135 | let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text(); 136 | let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl); 137 | let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text(); 138 | 139 | return { 140 | vod_id: id, 141 | vod_name: name, 142 | vod_pic: pic, 143 | vod_remarks: remark, 144 | }; 145 | }); 146 | return JSON.stringify({ 147 | list: videos, 148 | }); 149 | } 150 | 151 | 152 | export function __jsEvalReturn() { 153 | return { 154 | init: init, 155 | home: home, 156 | homeVod: homeVod, 157 | category: category, 158 | detail: detail, 159 | play: play, 160 | search: search, 161 | }; 162 | } 163 | 164 | -------------------------------------------------------------------------------- /js/zzmusic_book_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from './lib/cat.js'; 2 | 3 | let siteUrl = 'https://gh.7761.cf/https://zz123.com'; 4 | let imgUrl = 'https://music.jsbaidu.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | let headers = {}; 8 | 9 | async function request(reqUrl, postData, agentSp, get) { 10 | 11 | let res = await req(reqUrl, { 12 | method: get ? 'get' : 'post', 13 | headers: headers, 14 | data: postData || {}, 15 | postType: get ? '' : 'form', 16 | }); 17 | 18 | let content = res.content; 19 | return content; 20 | } 21 | 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | if (cfg.ext) { 26 | siteUrl = cfg.ext; 27 | } 28 | } 29 | 30 | async function home(filter) { 31 | const html = await request(siteUrl); 32 | const $ = load(html); 33 | const cates = $('ul.aside-menu-list.channel > li') 34 | let classes = _.map(cates, (n) => { 35 | let id = n.attribs['data-id']; 36 | let name = $($(n).find('a > span')[0]).text(); 37 | return { 38 | type_id: id, 39 | type_name: name, 40 | }; 41 | }); 42 | return JSON.stringify({ 43 | class: classes, 44 | }); 45 | } 46 | 47 | async function homeVod() { 48 | const html = await request(siteUrl); 49 | const $ = load(html); 50 | const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div') 51 | let videos = _.map(cards, (n) => { 52 | let id = n.attribs['data-id']; 53 | let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text(); 54 | let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl); 55 | let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text(); 56 | return { 57 | book_id: id, 58 | book_name: name, 59 | book_pic: pic, 60 | book_remarks: remark, 61 | }; 62 | }); 63 | return JSON.stringify({ 64 | list: videos, 65 | }); 66 | } 67 | 68 | async function category(tid, pg, filter, extend) { 69 | if (pg <= 0) pg = 1; 70 | let url = siteUrl + '/ajax/'; 71 | let res = await req(url, { 72 | method: 'post', 73 | data: { 74 | act: 'tag_music', 75 | type: 'tuijian', 76 | tid: tid, 77 | page: pg, 78 | lang: '', 79 | }, 80 | postType: 'form', 81 | }); 82 | //console.log('catedata:', res); 83 | let data = JSON.parse(res.content).data; 84 | let videos = []; 85 | for(let i=0;i div.card-list.d-none.d-md-block > div') 133 | let videos = _.map(cards, (n) => { 134 | let id = n.attribs['data-id']; 135 | let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text(); 136 | let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl); 137 | let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text(); 138 | 139 | return { 140 | book_id: id, 141 | book_name: name, 142 | book_pic: pic, 143 | book_remarks: remark, 144 | }; 145 | }); 146 | return JSON.stringify({ 147 | list: videos, 148 | }); 149 | } 150 | 151 | 152 | export function __jsEvalReturn() { 153 | return { 154 | init: init, 155 | home: home, 156 | homeVod: homeVod, 157 | category: category, 158 | detail: detail, 159 | play: play, 160 | search: search, 161 | }; 162 | } -------------------------------------------------------------------------------- /js/lz_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1COARRsel9vcGVuLmpzGC4vbGliL2NhdC5qcxxfX2pzRXZhbFJldHVybgxDcnlwdG8IbG9hZAJfDGppbmphMgZrZXkISE9TVA5zaXRlS2V5EHNpdGVUeXBlBFVBDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoBGx6Kmh0dHBzOi8vY2oubHppYXBpLmNvbZYCTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxM18yXzMgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzEzLjAuMyBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMQxyZXFVcmwOYWdlbnRTcAZyZXMGcmVxDG1ldGhvZBRVc2VyLUFnZW50DlJlZmVyZXIOaGVhZGVycw5jb250ZW50BmNmZwhza2V5CnN0eXBlDGZpbHRlcg5jbGFzc2VzEmZpbHRlck9iag50eXBlX2lkBTV1cV8SdHlwZV9uYW1lBf2PZ1IF/H56ggWoUitvBVNPsoAMY2F0ZUlkBXt8i1cFaFHokAJuAnYF7XdnUgVGlmdSBemXZ1IHJ2uOf2dSBS9uZ1IF8FNnUgXlZWdSB3dtFllnUgXwbGdSB6p+VV9HcgeoUlxPR3IHnFVnUkdyBzFyxWBHcgfReXteR3IHUGAWYEdyB2dSxWBHcgcYYolOR3IJNXVxX+OJ9IsF/Vb8fgUvbvx+B+mX5WX8fgcna45//H4F/VYrbwnlZemXqFIrbwkna45/qFIrbwUvbitvCXdtFlmoUitvBbONA3QF7nsDdAVRfwN0B69l+otLURJzdHJpbmdpZnkOZmlsdGVycwZ0aWQEcGcMZXh0ZW5kCGRhdGEMdmlkZW9zBnZvZApwYXJzZT4vaW5kZXgucGhwL2FqYXgvZGF0YT9taWQ9MSZ0aWQ9DCZwYWdlPRImbGltaXQ9MjAIbGlzdAhwdXNoDHZvZF9pZBB2b2RfbmFtZQ52b2RfcGljFnZvZF9yZW1hcmtzEHBhcnNlSW50CHBhZ2UScGFnZWNvdW50CmxpbWl0CnRvdGFsBGlkCGh0bWwCJBBwbGF5bGlzdDIvaW5kZXgucGhw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 -------------------------------------------------------------------------------- /js/wogg_open.js: -------------------------------------------------------------------------------- 1 | import {load, _, Uri} from './lib/cat.js'; 2 | import {log} from './lib/utils.js'; 3 | import {initAli, detailContent, playContent} from './lib/ali.js'; 4 | 5 | let siteKey = 'wogg'; 6 | let siteType = 0; 7 | let siteUrl = 'https://wogg.xyz'; 8 | 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"; 9 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/ 10 | 11 | async function init(cfg) { 12 | try { 13 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey; 14 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype; 15 | await initAli(cfg); 16 | } catch (e) { 17 | await log('init:' + e.message + ' line:' + e.lineNumber); 18 | } 19 | } 20 | 21 | async function request(reqUrl, agentSp) { 22 | let header = { 23 | 'user-agent': agentSp || 'okhttp/3.12.0', 24 | }; 25 | let uri = new Uri(reqUrl); 26 | let res = await req(uri.toString(), { 27 | headers: header, 28 | timeout: 10000 29 | }); 30 | let content = res.content; 31 | return content; 32 | } 33 | 34 | function getHeader() { 35 | let header = {}; 36 | header['User-Agent'] = UA; 37 | return header; 38 | } 39 | 40 | async function getString(url) { 41 | let res = await req(url, { 42 | headers: getHeader() 43 | }); 44 | return res.content; 45 | } 46 | 47 | 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' : '音乐'}]; 48 | let filterObj = {}; 49 | async function home(filter) { 50 | return JSON.stringify({ 51 | class: classes, 52 | filters: filterObj, 53 | }); 54 | } 55 | 56 | 57 | async function homeVod() { 58 | return '{}'; 59 | } 60 | 61 | 62 | async function category(tid, pg, filter, extend) { 63 | let reqUrl = siteUrl + '/index.php/vodshow/'+tid+'--------'+pg+'---.html'; 64 | let con = await request(reqUrl, UA); 65 | const $ = load(con); 66 | let items = $('.module:eq(0) > .module-list > .module-items > .module-item'); 67 | let videos = []; 68 | for(var item of items) { 69 | let oneA = $(item).find('.module-item-cover .module-item-pic a').first(); 70 | let href = oneA.attr('href'); 71 | let name = oneA.attr('title'); 72 | let oneImg = $(item).find('.module-item-cover .module-item-pic img').first(); 73 | let pic = oneImg.attr('data-src'); 74 | let remark = $(item).find('.module-item-text').first().text(); 75 | videos.push({ 76 | vod_id: href, 77 | vod_name: name, 78 | vod_pic: pic, 79 | vod_remarks: remark, 80 | }); 81 | } 82 | 83 | const hasMore = $('#page > a:contains(下一页)').length > 0; 84 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 85 | return JSON.stringify({ 86 | page: parseInt(pg), 87 | pagecount: pgCount, 88 | limit: 72, 89 | total: 72 * pgCount, 90 | list: videos, 91 | }); 92 | } 93 | 94 | async function detail(id) { 95 | try { 96 | await log('detail:id:---' + id); 97 | let preMatches = id.match(patternAli); 98 | if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]); 99 | let url = siteUrl + id; 100 | let aliUrl = await getString(url); 101 | let matches = aliUrl.match(patternAli); 102 | console.log('detailmatche---'); 103 | console.log(matches[1]); 104 | if (!_.isEmpty(matches)) return await detailContent(matches[1]); 105 | return ''; 106 | } catch (e) { 107 | await log( 'detail:' + e.message + ' line:' + e.lineNumber); 108 | } 109 | } 110 | 111 | 112 | async function play(flag, id, flags) { 113 | try { 114 | return await playContent(flag, id, flags); 115 | } catch (e) { 116 | await log( 'play:' + e.message + ' line:' + e.lineNumber); 117 | } 118 | } 119 | 120 | 121 | async function search(wd, quick) { 122 | await log('search---' + wd); 123 | let searchUrl = siteUrl + '/index.php/vodsearch/-------------.html?wd=' + wd; 124 | let html = await getString(searchUrl); 125 | let $ = load(html); 126 | let items = $('.module-search-item'); 127 | let videos = []; 128 | for(var item of items) { 129 | let vodId = $(item).find(".video-serial")[0].attribs.href; 130 | let name = $(item).find(".video-serial")[0].attribs.title; 131 | let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src']; 132 | let remark = ''; 133 | videos.push({ 134 | vod_id: vodId, 135 | vod_name: name, 136 | vod_pic: pic, 137 | vod_remarks: remark, 138 | }); 139 | } 140 | return JSON.stringify({ 141 | list: videos, 142 | }); 143 | } 144 | 145 | export function __jsEvalReturn() { 146 | return { 147 | init: init, 148 | home: home, 149 | homeVod: homeVod, 150 | category: category, 151 | detail: detail, 152 | play: play, 153 | search: search, 154 | }; 155 | } -------------------------------------------------------------------------------- /js/wobg_open.js: -------------------------------------------------------------------------------- 1 | import {load, _, Uri} from './lib/cat.js'; 2 | import {log} from './lib/utils.js'; 3 | import {initAli, detailContent, playContent} from './lib/ali.js'; 4 | 5 | let siteKey = 'wobg'; 6 | let siteType = 0; 7 | let siteUrl = 'https://wobge.run.goorm.io'; 8 | 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"; 9 | let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/ 10 | 11 | async function init(cfg) { 12 | try { 13 | siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey; 14 | siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype; 15 | await initAli(cfg); 16 | } catch (e) { 17 | await log('init:' + e.message + ' line:' + e.lineNumber); 18 | } 19 | } 20 | 21 | async function request(reqUrl, agentSp) { 22 | let header = { 23 | 'user-agent': agentSp || 'okhttp/3.12.0', 24 | }; 25 | let uri = new Uri(reqUrl); 26 | let res = await req(uri.toString(), { 27 | headers: header, 28 | timeout: 10000 29 | }); 30 | let content = res.content; 31 | return content; 32 | } 33 | 34 | function getHeader() { 35 | let header = {}; 36 | header['User-Agent'] = UA; 37 | return header; 38 | } 39 | 40 | async function getString(url) { 41 | let res = await req(url, { 42 | headers: getHeader() 43 | }); 44 | return res.content; 45 | } 46 | 47 | let classes = [{'type_id': 1, 'type_name' : '自营电影'},{'type_id': 2, 'type_name' : '自营剧集'},{'type_id': 44, 'type_name' : '自营短剧'},{'type_id': 3, 'type_name' : '动漫'},{'type_id': 4, 'type_name' : '综艺'},{'type_id': 5, 'type_name' : '音乐'}]; 48 | let filterObj = {}; 49 | async function home(filter) { 50 | return JSON.stringify({ 51 | class: classes, 52 | filters: filterObj, 53 | }); 54 | } 55 | 56 | 57 | async function homeVod() { 58 | return '{}'; 59 | } 60 | 61 | 62 | async function category(tid, pg, filter, extend) { 63 | let reqUrl = siteUrl + '/index.php/vod/show/id/'+tid+'/page/'+pg+'.html'; 64 | let con = await request(reqUrl, UA); 65 | const $ = load(con); 66 | let items = $('.module:eq(0) > .module-list > .module-items > .module-item'); 67 | let videos = []; 68 | for(var item of items) { 69 | let oneA = $(item).find('.module-item-cover .module-item-pic a').first(); 70 | let href = oneA.attr('href'); 71 | let name = oneA.attr('title'); 72 | let oneImg = $(item).find('.module-item-cover .module-item-pic img').first(); 73 | let pic = oneImg.attr('data-src'); 74 | let remark = $(item).find('.module-item-text').first().text(); 75 | videos.push({ 76 | vod_id: href, 77 | vod_name: name, 78 | vod_pic: pic, 79 | vod_remarks: remark, 80 | }); 81 | } 82 | 83 | const hasMore = $('#page > a:contains(下一页)').length > 0; 84 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 85 | return JSON.stringify({ 86 | page: parseInt(pg), 87 | pagecount: pgCount, 88 | limit: 72, 89 | total: 72 * pgCount, 90 | list: videos, 91 | }); 92 | } 93 | 94 | async function detail(id) { 95 | try { 96 | await log('detail:id:' + id); 97 | let preMatches = id.match(patternAli); 98 | if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]); 99 | let url = siteUrl + id; 100 | let aliUrl = await getString(url); 101 | let matches = aliUrl.match(patternAli); 102 | console.log('detailmatche'); 103 | console.log(matches[1]); 104 | if (!_.isEmpty(matches)) return await detailContent(matches[1]); 105 | return ''; 106 | } catch (e) { 107 | await log( 'detail:' + e.message + ' line:' + e.lineNumber); 108 | } 109 | } 110 | 111 | 112 | async function play(flag, id, flags) { 113 | try { 114 | return await playContent(flag, id, flags); 115 | } catch (e) { 116 | await log( 'play:' + e.message + ' line:' + e.lineNumber); 117 | } 118 | } 119 | 120 | 121 | async function search(wd, quick) { 122 | await log('search' + wd); 123 | let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd; 124 | let html = await getString(searchUrl); 125 | let $ = load(html); 126 | let items = $('.module-search-item'); 127 | let videos = []; 128 | for(var item of items) { 129 | let vodId = $(item).find(".video-serial")[0].attribs.href; 130 | let name = $(item).find(".video-serial")[0].attribs.title; 131 | let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src']; 132 | let remark = ''; 133 | videos.push({ 134 | vod_id: vodId, 135 | vod_name: name, 136 | vod_pic: pic, 137 | vod_remarks: remark, 138 | }); 139 | } 140 | return JSON.stringify({ 141 | list: videos, 142 | }); 143 | } 144 | 145 | export function __jsEvalReturn() { 146 | return { 147 | init: init, 148 | home: home, 149 | homeVod: homeVod, 150 | category: category, 151 | detail: detail, 152 | play: play, 153 | search: search, 154 | }; 155 | } -------------------------------------------------------------------------------- /js/mimiju_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _, jinja2 } from './lib/cat.js'; 2 | 3 | let key = 'mimiju'; 4 | let url = 'https://mimiju.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'User-Agent': agentSp || UA, 15 | 'Referer': url 16 | }, 17 | }); 18 | return res.content; 19 | } 20 | 21 | // cfg = {skey: siteKey, ext: extend} 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | } 26 | 27 | async function home(filter) { 28 | let classes = [{"type_id":20,"type_name":"短剧"}, {"type_id":21,"type_name":"电视剧"}]; 29 | let filterObj = { 30 | "20": [{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}], 31 | "21": [{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]}; 32 | return JSON.stringify({ 33 | class: classes, 34 | filters: filterObj, 35 | }); 36 | } 37 | 38 | async function homeVod() {} 39 | 40 | async function category(tid, pg, filter, extend) { 41 | if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; 42 | const link = url + '/vodshow/' + tid + '--' + (extend.by || 'time') + '---' + '---' + pg + '---' + '.html';//https://mimiju.com/vodshow/20--hits---------.html 43 | const html = await request(link); 44 | const $ = load(html); 45 | const items = $('ul.hl-vod-list > li'); 46 | let videos = _.map(items, (item) => { 47 | const it = $(item).find('a:first')[0]; 48 | const remarks = $($(item).find('span.hl-lc-1')[0]).text().trim(); 49 | return { 50 | vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'), 51 | vod_name: it.attribs.title, 52 | vod_pic: url + it.attribs['data-original'], 53 | vod_remarks: remarks || '',}; 54 | }); 55 | const hasMore = $('ul.hl-page-wrap > li > a >span:contains(下一页)').length > 0; 56 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 57 | return JSON.stringify({ 58 | page: parseInt(pg), 59 | pagecount: pgCount, 60 | limit: 20, 61 | total: 20 * pgCount, 62 | list: videos, 63 | }); 64 | } 65 | 66 | async function detail(id) { 67 | var html = await request(url + '/voddetail/' + id + '.html'); 68 | var $ = load(html); 69 | var vod = { 70 | vod_id: id, 71 | vod_name: $('h1:first').text().trim(), 72 | vod_type: $('.stui-content__detail p:first a').text(), 73 | vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:', ''), 74 | vod_pic: $('.stui-content__thumb img:first').attr('data-original'), 75 | vod_remarks: $('.stui-content__detail p:nth-child(5)').text() || '', 76 | vod_content: $('span.detail-content').text().trim(), 77 | }; 78 | var playMap = {}; 79 | var tabs = $('ul.hl-from-list > li >span'); 80 | var playlists = $('ul#hl-plays-list'); 81 | _.each(tabs, (tab, i) => { 82 | var from = tab.children[0].data; 83 | var list = playlists[i]; 84 | list = $(list).find('a'); 85 | _.each(list, (it) => { 86 | var title = it.children[0].data; 87 | var playUrl = it.attribs.href.replace(/\/vodplay\/(.*).html/g, '$1'); 88 | 89 | if (!playMap.hasOwnProperty(from)) { 90 | playMap[from] = []; 91 | } 92 | playMap[from].push(title + '$' + playUrl); 93 | }); 94 | }); 95 | vod.vod_play_from = _.keys(playMap).join('$$$'); 96 | var urls = _.values(playMap); 97 | var vod_play_url = _.map(urls, (urlist) => { 98 | return urlist.join('#'); 99 | }); 100 | vod.vod_play_url = vod_play_url.join('$$$'); 101 | return JSON.stringify({ 102 | list: [vod], 103 | }); 104 | } 105 | 106 | async function play(flag, id, flags) { 107 | const link = url + '/vodplay/' + id + '.html'; 108 | const html = await request(link); 109 | const $ = load(html); 110 | const js = JSON.parse($('script:contains(player_a)').html().replace('var player_aaaa=', '')); 111 | const playUrl = js.url; 112 | return JSON.stringify({ 113 | parse: 0, 114 | url: playUrl, 115 | }); 116 | } 117 | 118 | async function search(wd, quick) { 119 | let data = JSON.parse(await request(url + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list; 120 | let videos = []; 121 | for (const vod of data) { 122 | videos.push({ 123 | vod_id: vod.id, 124 | vod_name: vod.name, 125 | vod_pic: vod.pic, 126 | vod_remarks: '', 127 | }); 128 | } 129 | return JSON.stringify({ 130 | list: videos, 131 | }); 132 | } 133 | 134 | export function __jsEvalReturn() { 135 | return { 136 | init: init, 137 | home: home, 138 | homeVod: homeVod, 139 | category: category, 140 | detail: detail, 141 | play: play, 142 | search: search, 143 | }; 144 | } -------------------------------------------------------------------------------- /js/ddmv_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1CCARxrdXFpbXZfb3Blbi5qcyxhc3NldHM6Ly9qcy9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuCGxvYWQCXwZrZXkISE9TVA5zaXRlS2V5EHNpdGVUeXBlClBDX1VBDnJlcXVlc3QIaW5pdAhob21lDmhvbWVWb2QQY2F0ZWdvcnkMZGV0YWlsCHBsYXkMc2VhcmNoCXeRR1lNAFYALGh0dHBzOi8vd3d3Lmt1cWltdi5jb23eAU1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTUuMC4wLjAgU2FmYXJpLzUzNy4zNgxyZXFVcmwOcmVmZXJlcgZtdGgIZGF0YQRoZA5oZWFkZXJzBnJlcxRVc2VyLUFnZW50JGVuY29kZVVSSUNvbXBvbmVudAZyZXEMbWV0aG9kCHBvc3QIZm9ybRBwb3N0VHlwZQ5jb250ZW50BmNmZwhza2V5CnN0eXBlDGZpbHRlcg5jbGFzc2VzEmZpbHRlck9iag50eXBlX2lkCU5T7YvYmgVuEnR5cGVfbmFtZQnlZemXvnwJkAkna45/TQBWAAnYmgVusHM6VwlxX8aJTQBWAAkcWZdexomRmAlmjyFqxomRmAntcB6CxomRmAmOf3NZmVEfdwmOf3NZU2KfeBJzdHJpbmdpZnkGbWFwDmZpbHRlcnMGY2xzCGxhbmQKcmF0aW8IbGluawhodG1sAiQKaXRlbXMMdmlkZW9zHC9wbGF5LzlfMS5odG1sIGRpdi5tdl9saXN0ID4gbGkIbGlzdARpdAJhBmltZwxzaW5nZXIOcmVtYXJrcwhmaW5kDmE6Zmlyc3QSaW1nOmZpcnN0FGRpdi5zaW5nZXIIdGV4dAh0cmltFnNwYW4ubGVpXzAzDmF0dHJpYnMIaHJlZg5yZXBsYWNlBCQxDHZvZF9pZAp0aXRsZRB2b2RfbmFtZQZzcmMOdm9kX3BpYwU82KTfA1z/FnZvZF9yZW1hcmtzBnRpZARwZwxleHRlbmQOaGFzTW9yZQ5wZ0NvdW50DC9wbGF5LwouaHRtbD1kAGkAdgAuAGwAZQBpAF8AcABhAGcAZQAgAD4AIABhADoAYwBvAG4AdABh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 -------------------------------------------------------------------------------- /js/funletu.js: -------------------------------------------------------------------------------- 1 | const _0x25913a=_0x3efd;(function(_0x420206,_0x1bdd41){const _0x3b306a=_0x3efd,_0x2258a5=_0x420206();while(!![]){try{const _0x1efbf7=-parseInt(_0x3b306a(0xb4))/0x1+parseInt(_0x3b306a(0xd2))/0x2*(-parseInt(_0x3b306a(0xce))/0x3)+parseInt(_0x3b306a(0xbe))/0x4+-parseInt(_0x3b306a(0xee))/0x5*(-parseInt(_0x3b306a(0xcd))/0x6)+-parseInt(_0x3b306a(0xd6))/0x7+-parseInt(_0x3b306a(0xc7))/0x8+parseInt(_0x3b306a(0xc1))/0x9;if(_0x1efbf7===_0x1bdd41)break;else _0x2258a5['push'](_0x2258a5['shift']());}catch(_0x1966df){_0x2258a5['push'](_0x2258a5['shift']());}}}(_0x1b97,0x650fa));const _0x41872f=(function(){let _0x41e892=!![];return function(_0x1790c8,_0x179161){const _0x2b1631=_0x41e892?function(){const _0x4b930f=_0x3efd;if(_0x179161){const _0x4d3bbd=_0x179161[_0x4b930f(0xd1)](_0x1790c8,arguments);return _0x179161=null,_0x4d3bbd;}}:function(){};return _0x41e892=![],_0x2b1631;};}()),_0x460301=_0x41872f(this,function(){const _0xe06c83=_0x3efd;let _0x7b9a96;try{const _0x984a7=Function(_0xe06c83(0xba)+_0xe06c83(0xb8)+(_0xe06c83(0xdb)+_0xe06c83(0xd0)+'rn\x20this\x22)('+'\x20)')+');');_0x7b9a96=_0x984a7();}catch(_0x33fdc5){_0x7b9a96=window;}const _0x58622e=_0x7b9a96[_0xe06c83(0xe1)]=_0x7b9a96[_0xe06c83(0xe1)]||{},_0x21385f=[_0xe06c83(0xc4),_0xe06c83(0xe4),_0xe06c83(0xf0),'error','exception',_0xe06c83(0xcf),'trace'];for(let _0xb70eb6=0x0;_0xb70eb6<_0x21385f[_0xe06c83(0xd3)];_0xb70eb6++){const _0x9e22bc=_0x41872f[_0xe06c83(0xf9)+'r'][_0xe06c83(0xe8)][_0xe06c83(0xca)](_0x41872f),_0x276d65=_0x21385f[_0xb70eb6],_0xe3a7cb=_0x58622e[_0x276d65]||_0x9e22bc;_0x9e22bc['__proto__']=_0x41872f[_0xe06c83(0xca)](_0x41872f),_0x9e22bc[_0xe06c83(0xf1)]=_0xe3a7cb[_0xe06c83(0xf1)]['bind'](_0xe3a7cb),_0x58622e[_0x276d65]=_0x9e22bc;}});_0x460301();import{_}from'assets://js/lib/cat.js';function _0x1b97(){const _0x401604=['list','console','commonid','datetime','warn','url','detail','https://b0','prototype','ike\x20Gecko)','.bdstatic.','vod_name','Win64;\x20x64','fileid','357415TKSKVH','stringify','info','toString','data','searchtext','pageSize','debug','home','\x20NT\x2010.0;\x20','filename','constructo','play','m/search','order','730873sneGVD','User-Agent','funletu.co','get','nction()\x20','vod_id','return\x20(fu','更新:','page','validid','1447736ZHamgE','search','content','10577097oqWGio','Mozilla/5.','skey','log','vod_remark','fari/537.3','1588960bMCJJo','push','isEmpty','bind','stype','79dfeb8c61','18JktLRE','6lPpreM','table','ctor(\x22retu','apply','5036pSTpCL','length','homeVod','81ee4b.jpg','2821987NYrhtB','prop','parmid','8974f5f6b6','\x20Chrome/10','{}.constru','https://v.','desc','query','com/29cef3'];_0x1b97=function(){return _0x401604;};return _0x1b97();}import{initQuark,detailContent,playContent}from'./lib/quark.js';let siteKey='',siteType=0x0,searchUrl=_0x25913a(0xdc)+_0x25913a(0xb6)+_0x25913a(0xfb),UA=_0x25913a(0xc2)+'0\x20(Windows'+_0x25913a(0xf7)+_0x25913a(0xec)+')\x20AppleWeb'+'Kit/537.36'+'\x20(KHTML,\x20l'+_0x25913a(0xe9)+_0x25913a(0xda)+'9.0.0.0\x20Sa'+_0x25913a(0xc6)+'6';async function init(_0x328580){const _0x14e710=_0x25913a;let _0x4c5061='';typeof _0x328580=='object'?(siteKey=_0x328580[_0x14e710(0xc3)],siteType=_0x328580[_0x14e710(0xcb)],_0x4c5061=_0x328580['ext']):_0x4c5061=_0x328580,await initQuark(_0x4c5061);}function getHeader(){const _0x4a486a=_0x25913a;let _0x584b5c={};return _0x584b5c[_0x4a486a(0xb5)]=UA,_0x584b5c;}function _0x3efd(_0xd793b4,_0x6d25dc){const _0x5e0bd2=_0x1b97();return _0x3efd=function(_0x460301,_0x41872f){_0x460301=_0x460301-0xb3;let _0xeb7c30=_0x5e0bd2[_0x460301];return _0xeb7c30;},_0x3efd(_0xd793b4,_0x6d25dc);}async function post(_0x39b418,_0x1f584e){const _0x2d5887=_0x25913a;let _0x45b194=await req(_0x39b418,{'headers':getHeader(),'method':'post','data':_0x1f584e});return _0x45b194[_0x2d5887(0xc0)];}async function home(_0x225f99){return'{}';}async function homeVod(){return'{}';}async function category(_0x38baf5,_0x33978c,_0x532612,_0x824a26){return'{}';}async function detail(_0x16a37e){return await detailContent(_0x16a37e);}async function play(_0x44ad2b,_0xafa143,_0x4bb5f){const _0x11f4ed=_0x25913a;let _0x286142=await playContent(_0x44ad2b,_0xafa143,_0x4bb5f);return console[_0x11f4ed(0xf5)](_0x286142),_0x286142;}async function search(_0xd16ff2,_0x616d51){const _0x2f7c39=_0x25913a;let _0x3c6884=searchUrl,_0x2277bb={};_0x2277bb['datasrc']=_0x2f7c39(0xbf);const _0x34956e={};_0x34956e[_0x2f7c39(0xb3)]=_0x2f7c39(0xdd),_0x34956e[_0x2f7c39(0xd7)]='id',_0x2277bb[_0x2f7c39(0xb3)]=_0x34956e;const _0x4e114c={};_0x4e114c['pageIndex']=0x1,_0x4e114c[_0x2f7c39(0xf4)]=0xa,_0x2277bb[_0x2f7c39(0xbc)]=_0x4e114c;const _0x13290b={};_0x13290b[_0x2f7c39(0xe2)]=0x1,_0x13290b[_0x2f7c39(0xe3)]='',_0x13290b[_0x2f7c39(0xed)]='',_0x13290b['id']='',_0x13290b[_0x2f7c39(0xd8)]='',_0x13290b['reportid']='',_0x13290b[_0x2f7c39(0xf3)]=_0xd16ff2,_0x13290b[_0x2f7c39(0xbd)]='',_0x2277bb[_0x2f7c39(0xde)]=_0x13290b,_0x2277bb['style']=_0x2f7c39(0xb7);let _0x2cfe4f=await post(_0x3c6884,_0x2277bb),_0x31efd7=JSON['parse'](_0x2cfe4f)[_0x2f7c39(0xf2)],_0x34f51d=[];for(var _0x41a883 of _0x31efd7){let _0xb14d33=_['isEmpty'](_0x41a883['url'])?'':_0x41a883[_0x2f7c39(0xe5)],_0xd5748d=_[_0x2f7c39(0xc9)](_0x41a883[_0x2f7c39(0xf8)])?'':_0x41a883[_0x2f7c39(0xf8)],_0x551fe8=_0x2f7c39(0xe7)+_0x2f7c39(0xea)+_0x2f7c39(0xdf)+_0x2f7c39(0xd9)+_0x2f7c39(0xcc)+_0x2f7c39(0xd5),_0x162ebc=_0x2f7c39(0xbb)+_0x41a883['updatetime'];const _0x1ac8b9={};_0x1ac8b9[_0x2f7c39(0xb9)]=_0xb14d33,_0x1ac8b9[_0x2f7c39(0xeb)]=_0xd5748d,_0x1ac8b9['vod_pic']=_0x551fe8,_0x1ac8b9[_0x2f7c39(0xc5)+'s']=_0x162ebc,_0x34f51d[_0x2f7c39(0xc8)](_0x1ac8b9);}const _0x3ae544={};return _0x3ae544[_0x2f7c39(0xe0)]=_0x34f51d,JSON[_0x2f7c39(0xef)](_0x3ae544);}export function __jsEvalReturn(){const _0x233e64=_0x25913a,_0x5156d5={};return _0x5156d5['init']=init,_0x5156d5[_0x233e64(0xf6)]=home,_0x5156d5[_0x233e64(0xd4)]=homeVod,_0x5156d5['category']=category,_0x5156d5[_0x233e64(0xe6)]=detail,_0x5156d5[_0x233e64(0xfa)]=play,_0x5156d5['search']=search,_0x5156d5;} -------------------------------------------------------------------------------- /js/vsdj_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1CoARh2c2RqX29wZW4uanMYLi9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuDENyeXB0bwhsb2FkAl8MamluamEyBmtleQZ1cmwOc2l0ZUtleRBzaXRlVHlwZQRVQQ5yZXF1ZXN0CGluaXQIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaAh2c2RqMmh0dHBzOi8vd3d3Lnl0c2hlbmdkZS5jb22WAk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTNfMl8zIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xMy4wLjMgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjEMcmVxVXJsDmFnZW50U3AGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5SZWZlcmVyDmhlYWRlcnMOY29udGVudAZjZmcIc2tleQpzdHlwZQxmaWx0ZXIOY2xhc3NlcxJmaWx0ZXJPYmoOdHlwZV9pZAXtd2dSEnR5cGVfbmFtZQxsZXR0ZXIFV1vNawVoUeiQAm4CdgJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloEYnkFkmOPXgX2ZfSVCHRpbWUFuk4UbAhoaXRzBcSLBlIKc2NvcmUSc3RyaW5naWZ5DmZpbHRlcnMGdGlkBHBnDGV4dGVuZAhsaW5rCGh0bWwCJAppdGVtcwx2aWRlb3MOaGFzTW9yZQ5wZ0NvdW50Ei9zYW55aXN3LwQtLQYtLS0KLmh0bWwodWwubXl1aS12b2RsaXN0ID4gbGkGbWFwR3UAbAAuAG0AeQB1AGkALQBwAGEAZwBlACAAPgAgAGwAaQAgAD4AIABhADoAYwBvAG4AdABhAGkAbgBzACgAC04ATnWYKQAQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwIbGlzdAhpdGVtBGl0DnJlbWFya3MIZmluZA5hOmZpcnN0MHNwYW4ucGljLXRleHQgdGV4dC1yaWdodAh0ZXh0CHRyaW0OYXR0cmlicwhocmVmDnJlcGxhY2UEJDEMdm9kX2lkCnRpdGxl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 -------------------------------------------------------------------------------- /js/zjm_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1C6ARZ6am1fb3Blbi5qcxguL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4MQ3J5cHRvCGxvYWQCXwxqaW5qYTIGa2V5CEhPU1QOc2l0ZUtleRBzaXRlVHlwZQRVQQ5yZXF1ZXN0CGluaXQIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaAZ6am0uaHR0cHM6Ly93d3cuemh1aWp1bWkuY2OWAk1vemlsbGEvNS4wIChpUGhvbmU7IENQVSBpUGhvbmUgT1MgMTNfMl8zIGxpa2UgTWFjIE9TIFgpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xMy4wLjMgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjEMcmVxVXJsDmFnZW50U3AGcmVzBnJlcQxtZXRob2QUVXNlci1BZ2VudA5SZWZlcmVyDmhlYWRlcnMOY29udGVudAZjZmcIc2tleQpzdHlwZQxmaWx0ZXIOY2xhc3NlcxJmaWx0ZXJPYmoOZG9uZ3p1bw50eXBlX2lkBTV1cV8SdHlwZV9uYW1lDmd1b2NoYW4F/Y9nUhRkYWx1em9uZ3lpBfx+eoIcZ3VvY2hhbmRvbmdtYW4FqFIrbwxjYXRlSWQFe3yLVwVoUeiQAm4CdgXpl2dSCmhhbmp1BeVlZ1IIcmlqdQcna45/Z1IKb3VtZWkHL27wU2dSEnhpYW5nZ2FuZwd3bRZZZ1IQaGFpd2FpanUHqn5VX0dyCGppbHUHnFVnUkdyCHhpanUHMXLFYEdyDGFpcWluZwfReXteR3IMa2VodWFuB1BgFmBHcgxrb25nYnUHZ1LFYEdyDGp1cWluZwcYYolOR3ISemhhbnpoZW5nB69yan9HcgxmYW56dWkHrGCRdUdyDHh1YW55aQd+cL6WR3IMemFpbmFuB0dZe15HcgxxaWh1YW4HqFI7dUdyDmRvbmdodWEJL27wU/x+eoIaZ2FuZ3RhaXpvbmd5aQnlZemX/H56ghZyaWhhbnpvbmd5aQkna45//H56ghZvdW1laXpvbmd5aQnlZSxnqFIrbxhyaWJlbmRvbmdtYW4JJ2uOf6hSK28Yb3VtZWlkb25nbWFuEnN0cmluZ2lmeQ5maWx0ZXJzBnRpZARwZwxleHRlbmQIbGluawhodG1sAiQKaXRlbXMMdmlkZW9zDmhhc01vcmUOcGdDb3VudBIvbXA0dHlwZS8CLQouaHRtbCp1bC5mZWQtbGlzdC1pbmZvID4gbGkGbWFwR2QAaQB2AC4AZgBlAGQALQBwAGEAZwBlAC0AaQBuAGYAbwAgAD4AIABhADoAYwBvAG4AdABhAGkAbgBzACgAC04ATnWYKQAQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwIbGlzdAhpdGVtBGl0AmsOcmVtYXJrcwhmaW5kDmE6Zmlyc3QCYSpzcGFuLmZlZC1saXN0LXJlbWFya3MIdGV4dAh0cmltDmF0dHJpYnMIaHJlZg5yZXBsYWNlBCQxDHZvZF9pZBBjaGlsZHJlbghkYXRhEHZvZF9uYW1lGmRhdGEtb3JpZ2luYWwOdm9kX3BpYxZ2b2RfcmVtYXJrcwRpZAZ2b2QOcGxheU1hcAh0YWJzEnBsYXlsaXN0cwh1cmxzGHZvZF9wbGF5X3VybAovbXA0LxBoMTpmaXJzdD4uc3R1aS1jb250ZW50X19kZXRhaWwgcDpmaXJzdCBhEHZvZF90eXBlSC5zdHVpLWNvbnRlbnRfX2RldGFpbCBwOm50aC1jaGlsZCgzKQc7ThRvGv8Sdm9kX2FjdG9yPC5zdHVpLWNvbnRlbnRfX3RodW1iIGltZzpmaXJzdAhhdHRySC5zdHVpLWNvbnRlbnRfX2RldGFpbCBwOm50aC1jaGlsZCg1KSZzcGFuLmRldGFpbC1jb250ZW50FnZvZF9jb250ZW50OmRpdi5mZWQtdGFicy1mb290ID4gdWwgPmxpID5hHnVsLmZlZC10YWJzLWJ0bQhlYWNoCGtleXMGJCQkGnZvZF9wbGF5X2Zyb20GdGFiAmkKdGl0bGUOcGxheVVybBxoYXNPd25Qcm9wZXJ0eQhwdXNoDHVybGlzdAIjCGZsYWcEanMSL21wNHBsYXkvCnBhcnNlMHNjcmlwdDpjb250YWlucyhwbGF5ZXJfKSB2YXIgcGxheWVyX2FhYWE9BnVybAR3ZApxdWlja0IvaW5kZXgucGhwL2FqYXgvc3VnZ2VzdD9taWQ9MSZ3ZD0GcGljD6QDAaYDAQARqAMABACqAwABrAMAAq4DAAOwAwAOAAYBoAEAAAABEglS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 -------------------------------------------------------------------------------- /js/kuqimv_open.js: -------------------------------------------------------------------------------- 1 | // 修正:分类改静态 (网站频繁变动分类) 2 | import { load, _ } from "assets://js/lib/cat.js"; 3 | 4 | let key = "酷奇MV"; 5 | let HOST = "https://www.kuqimv.com"; 6 | let siteKey = ""; 7 | let siteType = 0; 8 | 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"; 9 | 10 | async function request(reqUrl, referer, mth, data, hd) { 11 | const headers = { 12 | "User-Agent": PC_UA, 13 | }; 14 | if (referer) headers.referer = encodeURIComponent(referer); 15 | let res = await req(reqUrl, { 16 | method: mth || "get", 17 | headers: headers, 18 | data: data, 19 | postType: mth === "post" ? "form" : "", 20 | }); 21 | return res.content; 22 | } 23 | 24 | async function init(cfg) { 25 | siteKey = cfg.skey; 26 | siteType = cfg.stype; 27 | } 28 | 29 | async function home(filter) { 30 | 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": "美女打碟" }]; 31 | // const html = await request(HOST); 32 | // const $ = load(html); 33 | // const class_parse = $(".lei_fl > a[href*=play]"); 34 | // const classes = []; 35 | // classes = _.map(class_parse, (cls) => { 36 | // const typeId = cls.attribs["href"]; 37 | // typeId = typeId.substring(typeId.lastIndexOf("/") + 1).replace(".html", ""); 38 | // return { 39 | // type_id: typeId, 40 | // type_name: cls.children[0].data, 41 | // }; 42 | // }); 43 | const filterObj = {}; 44 | return JSON.stringify({ 45 | class: _.map(classes, (cls) => { 46 | cls.land = 1; 47 | cls.ratio = 1.78; 48 | return cls; 49 | }), 50 | filters: filterObj, 51 | }); 52 | } 53 | 54 | async function homeVod() { 55 | const link = HOST + "/play/9_1.html"; 56 | const html = await request(link); 57 | const $ = load(html); 58 | const items = $("div.mv_list > li"); 59 | let videos = _.map(items, (it) => { 60 | const a = $(it).find("a:first")[0]; 61 | const img = $(it).find("img:first")[0]; 62 | const singer = $($(it).find("div.singer")[0]).text().trim(); 63 | const remarks = $($(it).find("span.lei_03")[0]).text().trim(); 64 | return { 65 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"), 66 | vod_name: a.attribs.title, 67 | vod_pic: img.attribs["src"], 68 | vod_remarks: "🎤" + singer + "|" + remarks || "", 69 | }; 70 | }); 71 | return JSON.stringify({ 72 | list: videos, 73 | }); 74 | } 75 | 76 | async function category(tid, pg, filter, extend) { 77 | if (pg <= 0 || typeof pg == "undefined") pg = 1; 78 | const link = HOST + "/play/" + tid + "_" + pg + ".html"; 79 | const html = await request(link); 80 | const $ = load(html); 81 | const items = $("div.mv_list > li"); 82 | let videos = _.map(items, (it) => { 83 | const a = $(it).find("a:first")[0]; 84 | const img = $(it).find("img:first")[0]; 85 | const singer = $($(it).find("div.singer")[0]).text().trim(); 86 | const remarks = $($(it).find("span.lei_03")[0]).text().trim(); 87 | return { 88 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"), 89 | vod_name: a.attribs.title, 90 | vod_pic: img.attribs["src"], 91 | vod_remarks: "🎤" + singer + "|" + remarks || "", 92 | }; 93 | }); 94 | const hasMore = $("div.lei_page > a:contains(下一页)").length > 0; 95 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 96 | return JSON.stringify({ 97 | page: parseInt(pg), 98 | pagecount: pgCount, 99 | limit: 24, 100 | total: 24 * pgCount, 101 | list: videos, 102 | }); 103 | } 104 | 105 | async function detail(id) { 106 | const vod = { 107 | vod_id: id, 108 | vod_remarks: "", 109 | }; 110 | const playlist = ["观看视频" + "$" + id]; 111 | vod.vod_play_from = "道长在线"; 112 | vod.vod_play_url = playlist.join("#"); 113 | return JSON.stringify({ 114 | list: [vod], 115 | }); 116 | } 117 | 118 | async function play(flag, id, flags) { 119 | const link = HOST + "/skin/kuqimv/play.php"; 120 | const ref = HOST + "/play/" + id + ".html"; 121 | const pdata = { id: id }; 122 | const playUrl = JSON.parse(await request(link, ref, "post", pdata)).url; 123 | const headers = { 124 | Referer: HOST, 125 | }; 126 | return JSON.stringify({ 127 | parse: 0, 128 | url: playUrl, 129 | header: headers, 130 | }); 131 | } 132 | 133 | async function search(wd, quick, pg) { 134 | if (pg <= 0 || typeof pg == "undefined") pg = 1; 135 | const link = HOST + "/search.php?key=" + wd + "&pages=" + pg; 136 | const html = await request(link); 137 | const $ = load(html); 138 | const items = $("div.video_list > li"); 139 | let videos = _.map(items, (it) => { 140 | const a = $(it).find("a:first")[0]; 141 | const singer = $($(it).find("div.singer")[0]).text().trim(); 142 | const remarks = $($(it).find("span.lei_04")[0]).text().trim(); 143 | return { 144 | vod_id: a.attribs.href.replace(/.*?\/play\/(.*).html/g, "$1"), 145 | vod_name: a.attribs.title, 146 | vod_pic: "https://www.kuqimv.com/static/images/cover/singer.jpg", 147 | vod_remarks: "🎤" + singer + "|" + remarks || "", 148 | }; 149 | }); 150 | const hasMore = $("div.lei_page > a:contains(>)").length > 0; 151 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 152 | return JSON.stringify({ 153 | page: parseInt(pg), 154 | pagecount: pgCount, 155 | limit: 20, 156 | total: 20 * pgCount, 157 | list: videos, 158 | land: 1, 159 | ratio: 1.78, 160 | }); 161 | } 162 | 163 | export function __jsEvalReturn() { 164 | return { 165 | init: init, 166 | home: home, 167 | homeVod: homeVod, 168 | category: category, 169 | detail: detail, 170 | play: play, 171 | search: search, 172 | }; 173 | } -------------------------------------------------------------------------------- /js/dj0898_book_open.js: -------------------------------------------------------------------------------- 1 | import { load, _ } from "./lib/cat.js"; 2 | 3 | let key = "世纪DJ音乐网_book"; 4 | let HOST = "http://m.dj0898.com"; 5 | let siteKey = ""; 6 | let siteType = 0; 7 | 8 | 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"; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: "get", 13 | headers: { 14 | "User-Agent": agentSp || MOBILE_UA, 15 | Referer: HOST, 16 | }, 17 | }); 18 | return res.content; 19 | } 20 | 21 | async function init(cfg) { 22 | siteKey = cfg.skey; 23 | siteType = cfg.stype; 24 | } 25 | 26 | async function home(filter) { 27 | 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" }]; 28 | const filterObj = {}; 29 | return JSON.stringify({ 30 | class: _.map(classes, (cls) => { 31 | cls.land = 1; 32 | cls.ratio = 1.78; 33 | return cls; 34 | }), 35 | filters: filterObj, 36 | }); 37 | } 38 | 39 | async function homeVod() { 40 | const link = HOST + "/dance/lists/id/10/1"; 41 | const html = await request(link); 42 | const $ = load(html); 43 | const list = $("ul.djddv_djList > li"); 44 | let videos = _.map(list, (it) => { 45 | const a = $(it).find("a")[1]; 46 | const img = $(it).find("img:first")[0]; 47 | const tt = $(it).find("strong:first")[0]; 48 | const remarks = $(it).find("font")[5]; 49 | return { 50 | vod_id: a.attribs.href, 51 | vod_name: tt.children[0].data, 52 | vod_pic: img.attribs["src"], 53 | vod_remarks: "🎵" + remarks.children[0].data || "", 54 | }; 55 | }); 56 | return JSON.stringify({ 57 | list: videos, 58 | }); 59 | } 60 | 61 | async function category(tid, pg, filter, extend) { 62 | if (pg <= 0 || typeof pg == "undefined") pg = 1; 63 | const link = HOST + "/dance/lists/id/" + tid + "/" + pg; 64 | const html = await request(link); 65 | const $ = load(html); 66 | const list = $("ul.djddv_djList > li"); 67 | let videos = _.map(list, (it) => { 68 | const a = $(it).find("a")[1]; 69 | const img = $(it).find("img:first")[0]; 70 | const tt = $(it).find("strong:first")[0]; 71 | const remarks = $(it).find("font")[5]; 72 | return { 73 | book_id: a.attribs.href, 74 | book_name: tt.children[0].data, 75 | book_pic: img.attribs["src"], 76 | book_remarks: "🎵" + remarks.children[0].data || "", 77 | }; 78 | }); 79 | const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0; 80 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 81 | return JSON.stringify({ 82 | page: parseInt(pg), 83 | pagecount: pgCount, 84 | limit: 60, 85 | total: 60 * pgCount, 86 | list: videos, 87 | }); 88 | } 89 | 90 | async function detail(id) { 91 | const vod = { 92 | book_id: id, 93 | type_name: '', 94 | book_year: '', 95 | book_area: '', 96 | book_remarks: '', 97 | book_actor: '', 98 | book_director: '', 99 | book_content: '', 100 | }; 101 | const playlist = ["点击播放" + "$" + vod.book_id]; 102 | vod.volumes = "道长在线"; 103 | vod.urls = playlist.join("#"); 104 | return JSON.stringify({ 105 | list: [vod], 106 | }); 107 | } 108 | 109 | async function play(flag, id, flags) { 110 | const html = await request(id); 111 | const $ = load(html); 112 | const audio = $("body audio[src*=http]"); 113 | const audioUrl = audio[0].attribs.src; 114 | // console.debug('世纪DJ音乐网 audioUrl =====>' + audioUrl); // js_debug.log 115 | return JSON.stringify({ 116 | parse: 0, 117 | url: audioUrl, 118 | }); 119 | } 120 | 121 | async function search(wd, quick, pg) { 122 | if (pg <= 0 || typeof pg == "undefined") pg = 1; 123 | const link = HOST + "/index.php/dance/so/key?key=" + wd + "&cid=0&p=" + pg; 124 | const html = await request(link); 125 | const $ = load(html); 126 | const list = $("ul.djddv_djList > li"); 127 | let videos = _.map(list, (it) => { 128 | const a = $(it).find("a")[1]; 129 | const img = $(it).find("img:first")[0]; 130 | const tt = $(it).find("strong:first")[0]; 131 | const remarks = $(it).find("font:first")[0]; 132 | return { 133 | book_id: a.attribs.href, 134 | book_name: tt.children[0].data, 135 | book_pic: img.attribs["src"], 136 | book_remarks: "🎵" + remarks.children[0].data || "", 137 | }; 138 | }); 139 | const hasMore = $("ul.page_link > li > a:contains(\u00a0)").length > 0; 140 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 141 | return JSON.stringify({ 142 | page: parseInt(pg), 143 | pagecount: pgCount, 144 | limit: 60, 145 | total: 60 * pgCount, 146 | list: videos, 147 | land: 1, 148 | ratio: 1.78, 149 | }); 150 | } 151 | 152 | export function __jsEvalReturn() { 153 | return { 154 | init: init, 155 | home: home, 156 | homeVod: homeVod, 157 | category: category, 158 | detail: detail, 159 | play: play, 160 | search: search, 161 | }; 162 | } -------------------------------------------------------------------------------- /js/ufc_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1C2ARZ1ZmNfb3Blbi5qcxguL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4MQ3J5cHRvCGxvYWQCXwxqaW5qYTIGa2V5CEhPU1QOc2l0ZUtleRBzaXRlVHlwZQRVQQ5yZXF1ZXN0CGluaXQIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaAZ1ZmMqaHR0cHM6Ly93d3cuaHVsYTgubmV0lgJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDEzXzJfMyBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTMuMC4zIE1vYmlsZS8xNUUxNDggU2FmYXJpLzYwNC4xDHJlcVVybA5hZ2VudFNwBnJlcwZyZXEMbWV0aG9kFFVzZXItQWdlbnQOUmVmZXJlcg5oZWFkZXJzDmNvbnRlbnQGY2ZnCHNrZXkKc3R5cGUMZmlsdGVyDmNsYXNzZXMSZmlsdGVyT2JqBm1tYQ50eXBlX2lkC00ATQBBAFuNi04SdHlwZV9uYW1lCGJvamkJ2XrLeg9k+1EedGhhaS1maWdodC5odG1sBfBs82IMcXVhbmppBfNi+1FOYmFyZS1rbnVja2xlLWZpZ2h0aW5nLWNoYW1waW9uc2hpcC5odG1sBfiI82IKb3RoZXIFdlHWTgxjYXRlSWQFe3yLVwVoUeiQAm4CdgtVAEYAQwDIfoFnPHVmYy1maWdodGluZy1jaGFtcGlvbnNoaXAuaHRtbA9VAEYAQwA8aJdlS04cWSh1ZmMtZmlnaHQtbmlnaHQuaHRtbBVCAEUATABMAEEAVABPAFIAPGiXZUZiZWxsYXRvci1maWdodGluZy1jaGFtcGlvbnNoaXAuaHRtbAtQAEYATAA8aJdlQnByb2Zlc3Npb25hbC1maWdodGVycy1sZWFndWUuaHRtbAtMAEYAQQA8aJdlQGxlZ2FjeS1maWdodGluZy1hbGxpYW5jZWxmYS5odG1sDU8ATgBFAKBRm1FbjQxvbmUtZmMPTwBOAEUAaFSUTktOHFkwb25lLWZjL29uZS1mcmlkYXktZmlnaHRzDUoAQwBLABhiyYnOVxBqY2suaHRtbAtma5dnPHstTvlbFHdsbHpkLmh0bWwPSwBTAFcA4mxwUTxol2U6a29uZnJvbnRhY2phLXN6dHVrLXdhbGtpLmh0bWwTRQBhAGcAbABlAA9ccJ5bjYtOQGVhZ2xlLWZpZ2h0aW5nLWNoYW1waW9uc2hpcC5odG1sEUEAQwBBAMRPV3+vZVuNi05CYWJzb2x1dGUtY2hhbXBpb25zaGlwLWFraG1hdC5odG1sHkstMSBKQVBBTiBHUk9VUBBrLTEuaHRtbA9LAHIAdQBzAGgAW42LThRrcnVzaC5odG1sD1IASQBTAEUAIo7zYluNEnJpc2UuaHRtbAdma5dnzpgYd2xmMjAwNC5odG1sBwZm0U6zURJrdW5sdW5qdWULY4MAgDxol2VbjRRnbG9yeS5odG1sFHRoYWktZmlnaHQH8GxLThhiQnRoYWktZmlnaHQta2luZy1vZi1tdWF5LXRoYWkuaHRtbCJUSEFJLUZJR0hULUxFQUdVRSJ0aGFpLWZpZ2h0LWxlYWd1ZRZEQVpOIEJPWElORyBkYXpuLWJveGluZy5odG1sFFBCQyBCT1hJTkcecGJjLWJveGluZy5odG1sHlRPUCBSQU5LIEJPWElORyh0b3AtcmFuay1ib3hpbmcuaHRtbCBNQVRDSFJPT00gQk9YSU5HNGRhem4tbWF0Y2hyb29tLWJveGluZy5odG1sG/iI82JIAGEAcgBkAGMAbwByAGUAIABGAEMARmhhcmRjb3JlLWZpZ2h0aW5nLWNoYW1waW9uc2hpcC5odG1sGfiI82JUAE8AUAAgAEQATwBHACAARgBDAER0b3AtZG9nLWZpZ2h0aW5nLWNoYW1waW9uc2hpcC5odG1sC0IAWQBCAPiI82IOdGFnL2J5YhJzdHJpbmdpZnkOZmlsdGVycwZ0aWQEcGcMZXh0ZW5kCGxpbmsIaHRtbAIkCml0ZW1zDHZpZGVvcw5oYXNNb3JlDnBnQ291bnQCLwwvcGFnZS9Ic2VjdGlvbi5waWN0dXJlLWFyZWEgZGl2LnBpY3R1cmUtYm94Bm1hcD1wAC4AcwBpAHQAZQAtAHQAaQB0AGwAZQAgAD4AIABhADoAYwBvAG4AdABhAGkAbgBzACgAZmurTidUKQAQcGFyc2VJbnQIcGFnZRJwYWdlY291bnQKbGltaXQKdG90YWwIbGlzdAhpdGVtBGl0AmsOcmVt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 -------------------------------------------------------------------------------- /js/cntv_open.js: -------------------------------------------------------------------------------- 1 | // 无搜索功能 2 | import { _ } from './lib/cat.js'; 3 | let key = '视聚场'; 4 | let HOST = 'http://api.cntv.cn'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 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'; 8 | 9 | async function request(reqUrl, agentSp) { 10 | let res = await req(reqUrl, { 11 | method: 'get', 12 | headers: { 13 | 'User-Agent': agentSp || MOBILE_UA, 14 | }, 15 | }); 16 | return res.content 17 | } 18 | 19 | async function init(cfg) { 20 | siteKey = cfg.skey; 21 | siteType = cfg.stype 22 | } 23 | 24 | async function home(filter) { 25 | 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: "一线" }]; 26 | const filterObj = {}; 27 | return JSON.stringify({ 28 | class: _.map(classes, (cls) => { 29 | cls.land = 1; 30 | cls.ratio = 1.78; 31 | return cls; 32 | }), 33 | filters: filterObj, 34 | }) 35 | } 36 | 37 | async function homeVod() { 38 | const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=TOPC1451558856402351&n=10&sort=desc&p=1&mode=0&serviceId=tvcctv')); 39 | let videos = _.map(data.data.list, (it) => { 40 | return { 41 | vod_id: it.guid, 42 | vod_name: it.title, 43 | vod_pic: it.image, 44 | vod_remarks: it.time || '', 45 | } 46 | }); 47 | return JSON.stringify({ 48 | list: videos, 49 | }) 50 | } 51 | 52 | async function category(tid, pg, filter, extend) { 53 | if (pg <= 0 || typeof pg == 'undefined') pg = 1; 54 | const data = JSON.parse(await request(HOST + '/NewVideo/getVideoListByColumn?id=' + tid + '&n=10&sort=desc&p=' + pg + '&mode=0&serviceId=tvcctv')); 55 | let videos = _.map(data.data.list, (it) => { 56 | return { 57 | vod_id: it.guid, 58 | vod_name: it.title, 59 | vod_pic: it.image, 60 | vod_remarks: it.time || '', 61 | } 62 | }); 63 | 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; 64 | const pgCount = pgChk.length > 0 ? parseInt(pg) + 1 : parseInt(pg); 65 | return JSON.stringify({ 66 | page: parseInt(pg), 67 | pagecount: parseInt(pgCount), 68 | limit: 10, 69 | total: parseInt(data.total), 70 | list: videos, 71 | }) 72 | } 73 | 74 | async function detail(id) { 75 | const vod = { 76 | vod_id: id, 77 | vod_remarks: '', 78 | }; 79 | const playlist = ['点击播放' + '$' + 'https://hls.cntv.myhwcdn.cn/asp/hls/2000/0303000a/3/default/' + id + '/2000.m3u8']; 80 | vod.vod_play_from = key; 81 | vod.vod_play_url = playlist.join('#'); 82 | return JSON.stringify({ 83 | list: [vod], 84 | }); 85 | } 86 | 87 | async function play(flag, id, flags) { 88 | // console.debug('视聚场 id =====>' + id); // js_debug.log 89 | return JSON.stringify({ 90 | parse: 0, 91 | url: id, 92 | }) 93 | } 94 | 95 | async function search(wd, quick, pg) { 96 | return '{}' 97 | } 98 | 99 | export function __jsEvalReturn() { 100 | return { 101 | init: init, 102 | home: home, 103 | homeVod: homeVod, 104 | category: category, 105 | detail: detail, 106 | play: play, 107 | search: search, 108 | } 109 | } -------------------------------------------------------------------------------- /js/boosj_open.js: -------------------------------------------------------------------------------- 1 | import { load, _ } from './lib/cat.js'; 2 | 3 | let key = '童趣'; 4 | let HOST = 'https://www.boosj.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'User-Agent': agentSp || MOBILE_UA, 15 | 'Referer': HOST 16 | }, 17 | }); 18 | return res.content; 19 | } 20 | 21 | // cfg = {skey: siteKey, ext: extend} 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | } 26 | 27 | async function home(filter) { 28 | 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: '播视童趣儿童玩具' }]; 29 | const filterObj = {}; 30 | const jsonData = [ 31 | { 32 | key: 'age', 33 | name: '年龄段', 34 | value: [ 35 | { n: '全部', v: '' }, 36 | { n: '6岁以上', v: '?p367=370' }, 37 | { n: '3~6岁', v: '?p367=369' }, 38 | { n: '0~3岁', v: '?p367=368' }, 39 | ], 40 | init: '', 41 | }, 42 | { 43 | key: 'by', 44 | name: '排序', 45 | value: [ 46 | { n: '全部', v: '' }, 47 | { n: '最新发布', v: 'lately' }, 48 | { n: '最多播放', v: 'pop' }, 49 | { n: '最多评论', v: 'view' }, 50 | ], 51 | init: '', 52 | }, 53 | ]; 54 | return JSON.stringify({ 55 | class: _.map(classes, (cls) => { 56 | cls.land = 1; 57 | cls.ratio = 1.78; 58 | filterObj[cls.type_id] = jsonData; 59 | return cls; 60 | }), 61 | filters: filterObj, 62 | }); 63 | } 64 | 65 | async function homeVod() { 66 | const link = HOST + '/search_res_3362__3364_1_.html'; 67 | const html = await request(link); 68 | const $ = load(html); 69 | const items = $('body div.bj-col4:has(h3)'); 70 | let videos = _.map(items, (it) => { 71 | const a = $(it).find('a:first')[0]; 72 | const img = $(it).find('img:first')[0]; 73 | const remarks = $(it).find('span.played')[0]; 74 | return { 75 | vod_id: a.attribs.href, 76 | vod_name: a.attribs.title, 77 | vod_pic: img.attribs['data-original'], 78 | vod_remarks: remarks.children[0].data || '', 79 | }; 80 | }); 81 | return JSON.stringify({ 82 | list: videos, 83 | }); 84 | } 85 | 86 | async function category(tid, pg, filter, extend) { 87 | if (pg <= 0 || typeof (pg) == 'undefined') pg = 1; 88 | const link = HOST + '/search_res_3362__' + tid + '_' + pg + '_' + (extend.by || '') + '.html' + (extend.age || ''); 89 | const html = await request(link); 90 | const $ = load(html); 91 | const items = $('body div.bj-col4:has(h3)'); 92 | let videos = _.map(items, (it) => { 93 | const a = $(it).find('a:first')[0]; 94 | const img = $(it).find('img:first')[0]; 95 | const remarks = $(it).find('span.played')[0]; 96 | return { 97 | vod_id: a.attribs.href, 98 | vod_name: a.attribs.title, 99 | vod_pic: img.attribs['data-original'], 100 | vod_remarks: remarks.children[0].data || '', 101 | }; 102 | }); 103 | const hasMore = $('div.pub_paging > a:contains(下一页)').length > 0; 104 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 105 | return JSON.stringify({ 106 | page: parseInt(pg), 107 | pagecount: pgCount, 108 | limit: 30, 109 | total: 30 * pgCount, 110 | list: videos, 111 | }); 112 | } 113 | 114 | async function detail(id) { 115 | const vod = { 116 | vod_id: id, 117 | vod_remarks: "", 118 | }; 119 | const playlist = ["点击播放" + "$" + vod.vod_id]; 120 | vod.vod_play_from = "道长在线"; 121 | vod.vod_play_url = playlist.join("#"); 122 | return JSON.stringify({ 123 | list: [vod], 124 | }); 125 | } 126 | 127 | async function play(flag, id, flags) { 128 | const body = JSON.parse(await request('https://gslb.boosj.com/ipv2.json')); 129 | body._id = id.match(/\d+/)[0]; 130 | const json = JSON.parse(await request(buildUrl(body.gslb, body))); 131 | const purl = json.url + '?' + json.t 132 | // console.debug('童趣purl =====>' + purl); // js_debug.log 133 | let headers = { 134 | 'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 9; 22081212C Build/PQ3B.190801.002)', 135 | }; 136 | return JSON.stringify({ 137 | parse: 0, 138 | url: purl, 139 | header: headers, 140 | }); 141 | } 142 | 143 | async function search(wd, quick) { 144 | var data = JSON.parse(await request('https://search.boosj.com/m_ajax?q=' + wd + '&p=' + pg + '&typeId=3362')).body; 145 | let videos = _.map(data.result, (it) => { 146 | return { 147 | vod_id: it.playUrl, 148 | vod_name: it.resourceName, 149 | vod_pic: it.imageUrl, 150 | vod_remarks: it.clickNumStr || '', 151 | } 152 | }); 153 | return JSON.stringify({ 154 | page: parseInt(pg), 155 | pagecount: data.pageCount, 156 | limit: 30, 157 | total: data.rowCount, 158 | list: videos, 159 | }); 160 | } 161 | 162 | function buildUrl(url, obj) { 163 | obj = obj || {}; 164 | if (url.indexOf('?') < 0) { 165 | url += '?' 166 | } 167 | let param_list = []; 168 | let keys = Object.keys(obj); 169 | keys.forEach(it => { 170 | param_list.push(it + '=' + obj[it]) 171 | }); 172 | let prs = param_list.join('&'); 173 | if (keys.length > 0 && !url.endsWith('?')) { 174 | url += '&' 175 | } 176 | url += prs; 177 | return url 178 | } 179 | 180 | export function __jsEvalReturn() { 181 | return { 182 | init: init, 183 | home: home, 184 | homeVod: homeVod, 185 | category: category, 186 | detail: detail, 187 | play: play, 188 | search: search, 189 | }; 190 | } -------------------------------------------------------------------------------- /js/jiohub.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _, dayjs } from './lib/cat.js'; 2 | 3 | let key = 'jiohub'; 4 | let url = 'https://jiohub.top'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | const cookie = {}; 11 | 12 | async function request(reqUrl, referer, mth, data, hd) { 13 | const headers = { 14 | 'User-Agent': UA, 15 | Cookie: _.map(cookie, (value, key) => { 16 | return `${key}=${value}`; 17 | }).join(';'), 18 | }; 19 | if (referer) headers.referer = encodeURIComponent(referer); 20 | let res = await req(reqUrl, { 21 | method: mth || 'get', 22 | headers: headers, 23 | data: data, 24 | postType: mth === 'post' ? 'form' : '', 25 | }); 26 | return res.content; 27 | } 28 | 29 | // cfg = {skey: siteKey, ext: extend} 30 | async function init(cfg) { 31 | siteKey = cfg.skey; 32 | siteType = cfg.stype; 33 | } 34 | 35 | async function home(filter) { 36 | const html = await request(url); 37 | const $ = load(html); 38 | const series = $('.nav-list a[href*=/video]'); 39 | let classes = _.map(series, (s) => { 40 | let typeId = s.attribs['href']; 41 | let typeName = typeId.match(/\/video\/(.*)\?/)[1]; 42 | typeName = decodeURIComponent(typeName); 43 | return { 44 | type_id: typeName, 45 | type_name: typeName, 46 | }; 47 | }); 48 | return JSON.stringify({ 49 | class: classes, 50 | }); 51 | } 52 | 53 | async function homeVod() { 54 | return '{}'; 55 | } 56 | 57 | async function category(tid, pg, filter, extend) { 58 | let page = pg || 1; 59 | if (page == 0) page = 1; 60 | const link = url + '/video/' + tid + "?page=" + page + '&size=18'; 61 | const html = await request(link); 62 | const $ = load(html); 63 | const items = $('div.content-body > a'); 64 | let videos = _.map(items, (item) => { 65 | const img = $(item).find('img:first')[0].attribs['src']; 66 | const a = item.attribs['href'].match(/\/watch\/(.*)/)[1]; 67 | const n = ($(item).find('p.card-title')[0]).children[0].data; 68 | let speed = ($(item).find('p.item-speed')[0]).children[0].data || ''; 69 | const score = ($(item).find('p.score')[0]).children[0].data || ''; 70 | if (speed == tid) speed = ''; 71 | return { 72 | vod_id: a, 73 | vod_name: n, 74 | vod_pic: img, 75 | vod_remarks: speed || score || '', 76 | }; 77 | }); 78 | 79 | let total = 18; 80 | const pag = $('ui-pagination'); 81 | if (pag.length > 0) { 82 | try { 83 | total = parseInt(pag[0].attribs['total']); 84 | } catch (error) { 85 | 86 | } 87 | } 88 | 89 | return JSON.stringify({ 90 | page: page, 91 | pagecount: _.ceil(total / 18), 92 | list: videos, 93 | }); 94 | } 95 | 96 | function stripHtmlTag(src) { 97 | return src 98 | .replace(/<\/?[^>]+(>|$)/g, '') 99 | .replace(/&.{1,5};/g, '') 100 | .replace(/\s{2,}/g, ' '); 101 | } 102 | 103 | async function detail(id) { 104 | const html = await request(url + '/watch/' + id); 105 | const $ = load(html); 106 | const detail = $('div.content-detail > p'); 107 | let vod = { 108 | vod_id: id, 109 | vod_content: stripHtmlTag($('div.content-detail span.detail-sketch').html()).trim(), 110 | }; 111 | for (const info of detail) { 112 | const i = $(info).text().trim(); 113 | if (i.startsWith('地区:')) { 114 | vod.vod_area = i.substring(3); 115 | } else if (i.startsWith('年份:')) { 116 | vod.vod_year = i.substring(3); 117 | } else if (i.startsWith('类型:')) { 118 | vod.vod_type = i.substring(3); 119 | } else if (i.startsWith('导演:')) { 120 | vod.vod_director = i.substring(3); 121 | } else if (i.startsWith('主演:')) { 122 | vod.vod_actor = i.substring(3); 123 | } else if (i.startsWith('语言:')) { 124 | vod.vod_lang = i.substring(3); 125 | } 126 | } 127 | 128 | const urls = html.match(/let urls = \"(.*)\";/)[1].replace(/_/g, '/').replace(/-/g, '+'); 129 | var key = Crypto.enc.Utf8.parse("cf2d1a-6a4d-9ef8"); 130 | var playlist = Crypto.AES.decrypt(urls, key, { iv: key, padding: Crypto.pad.Pkcs7 }); 131 | playlist = Crypto.enc.Utf8.stringify(playlist).split('\n'); 132 | vod.vod_play_from = 'JOJO'; 133 | vod.vod_play_url = playlist.join('#'); 134 | return JSON.stringify({ 135 | list: [vod], 136 | }); 137 | } 138 | 139 | function playPid() { 140 | var key = Crypto.enc.Utf8.parse('VSmJTRRE'+dayjs().format('YYYYMMDD')); 141 | var iv = Crypto.enc.Hex.parse("00000000000000000000000000000000"); 142 | var pid = Crypto.AES.encrypt(dayjs().format('YYYY-MM-DD HH:mm'), key, { iv: iv, padding: Crypto.pad.Pkcs7 }); 143 | pid = pid.toString().replace(/\+/g, '-'); 144 | return pid; 145 | } 146 | 147 | async function play(flag, id, flags) { 148 | return JSON.stringify({ 149 | parse: 0, 150 | url: id + '?pid=' + playPid(), 151 | header: { 152 | 'User-Agent': UA, 153 | }, 154 | }); 155 | } 156 | 157 | async function search(wd, quick, pg) { 158 | let page = pg || 1; 159 | if (page == 0) page = 1; 160 | const link = url + '/video/search?q=' + wd + "&page=" + page + '&size=18&pid=' + playPid(); 161 | const html = await request(link); 162 | const $ = load(html); 163 | const items = $('div.content-body > a'); 164 | let videos = _.map(items, (item) => { 165 | const img = $(item).find('img:first')[0].attribs['src']; 166 | const a = item.attribs['href'].match(/\/watch\/(.*)/)[1]; 167 | const n = ($(item).find('p.card-title')[0]).children[0].data; 168 | let speed = ($(item).find('p.item-speed')[0]).children[0].data || ''; 169 | const score = ($(item).find('p.score')[0]).children[0].data || ''; 170 | if (speed == '电影') speed = ''; 171 | return { 172 | vod_id: a, 173 | vod_name: n, 174 | vod_pic: img, 175 | vod_remarks: speed || score || '', 176 | }; 177 | }); 178 | 179 | let total = 18; 180 | const pag = $('ui-pagination'); 181 | if (pag.length > 0) { 182 | try { 183 | total = parseInt(pag[0].attribs['total']); 184 | } catch (error) { 185 | 186 | } 187 | } 188 | 189 | return JSON.stringify({ 190 | page: page, 191 | pagecount: _.ceil(total / 18), 192 | list: videos, 193 | }); 194 | } 195 | 196 | export function __jsEvalReturn() { 197 | return { 198 | init: init, 199 | home: home, 200 | homeVod: homeVod, 201 | category: category, 202 | detail: detail, 203 | play: play, 204 | search: search, 205 | }; 206 | } 207 | -------------------------------------------------------------------------------- /js/lbgs_open.js: -------------------------------------------------------------------------------- 1 | //bbQ0FUT1CiARhsYmdzX29wZW4uanMYLi9saWIvY2F0LmpzHF9fanNFdmFsUmV0dXJuDENyeXB0bwpkYXlqcwJfBmtleQxkZXZpY2UOc2l0ZUtleRBzaXRlVHlwZRRhcHBWZXJzaW9uCmFwcFVBDmFwcERhdGEYbmF0aXZlRW5jb2RlBHBrCnhuYW1lGGJhc2U2NEVuY29kZRhiYXNlNjREZWNvZGUaZm9ybWF0UGxheVVybA5jaGFyU3RyDnJhbmRTdHIUcmFuZERldmljZQ5yZXF1ZXN0CGluaXQIaG9tZQ5ob21lVm9kDGltZ1VybBBjYXRlZ29yeQxkZXRhaWwIcGxheQxzZWFyY2gMbGFvYmFpCjEuMS43sAlIQmtaRkJ0NmQzNTlkeEZrWVh0NmNYRVpmM3hvR1JrVUd4VTRkSDF3YzMxZWVIaDZWVkpGVVZwZGN3QkJDSEI0Wlh4M2RYVjJkWGxqQVhWMGVIMTJlbEZ6Y1hobGZIQkFaMDVaVEZCTUEyeDBXMXBzZFVKeFNuNWhZVDVuU1c5M1FGSkJkRjlFVFZJRURHSjdaVXBhWDFkT2IySkJiR0JPVTF3TVlBOU9la3hrY0ZSR1hBcDNYbWhqQlZWRWNtSUFUMmh4Q3d3TFNWMTZZUjBYT0JKOWVFdGpmRzV4RG44U1VHNWNmbHA5VDBGUVhHRnZaVndEY1FGaFpIUUhDRlJuWmdCaWZtWU5ZbmhpUmdOM1VFeFZla0lPV1ZKbkMxdHVmSFVFU2trK1prdDdhMkpxYkZnSFoxWlRYWEZYYmdCK1pVUnRTV0Z6VjFGL1gxQkZSbDV5VDJSZmNucEVBZ05XVVhRTGMzaHdWWEJNVDJGTVduQlJEUU5CWVhSWVFqZ05mWEFBRzBSZFJHaEdibVpNQVhkd1UxZEFSRXA0UXdNQ1lWMTdmMkYxQjE1M2NWaFdWM0phU1FCeVJIMWtjZ0pxWG5CTUVnaEFCZ0YrQ0FJU0IzQkJQbEZ2WDBwZlVGVkFkVzErYUZNSlVWTmRmWHBiY1d0bFUzNU1Wbk5qY0FaQVhBMXFDa0JMZGxsVFlWTkFBV2hmV21OQVRBeGpkbXBnWDNWMFFYRjBlSDg0VUVOd2RYVmxlSFF5SHhRWkZCeHhlbjBXYUdkN2VIQnlGSDk4YnhVZkZCa1V6YWJhY2RlZmdoamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSEpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OQJlAmECdAJyGGZyb21DaGFyQ29kZRRjaGFyQ29kZUF0BmVuYwxCYXNlNjQSc3RyaW5naWZ5CFV0ZjgKcGFyc2UIdHJpbRRyZXBsYWNlQWxsDnJlcGxhY2UCIAJuDHJhbmRvbQxIdWF3ZWkKYnJhbmQcSFVBV0VJIE1hdGUgMjAKbW9kZWwOcmVsZWFzZRZ0b1VwcGVyQ2FzZQ5idWlsZElkBnJlcQxtZXRob2QUVXNlci1BZ2VudBhodHRwX3JlZmVyZXIOUmVmZXJlcg5oZWFkZXJzCGRhdGEIcG9zdAhmb3JtEHBvc3RUeXBlDmNvbnRlbnQIc2tleQpzdHlwZQpsb2NhbA5pc0VtcHR5FnRvTG93ZXJDYXNlBGlkQERhbHZpay8yLjEuMCAoTGludXg7IFU7IEFuZHJvaWQgBDsgDiBCdWlsZC8CKQR1YTooTW96aWxsYS81LjAgKExpbnV4OyBBbmRyb2lkIMQBOyB3dikgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgQ2hyb21lLzY4LjAuMzQ0MC43MCBNb2JpbGUgU2FmYXJpLzUzNy4zNilUaHR0cHM6Ly9sYWdzLm9zcy1jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20vCi5qc29uGCQ2YzFjZWY3OGFlPQhyc2FYElJTQS9QS0NTMQIvAm8CaQJzEGpzb25fdXJsHGNhdC9pbmRleC5qc29uCnRpdGxlBQZSe3wIdHlwZQV7fItXDHJlZHVjZQp0eXBlcwJ2CHNvcnQFkmOPXgZob3QIcHVzaAXYnqSLBe1w6JUF3o99jwxzZXJpYWwFjFvTfg50eXBlX2lkEnR5cGVfbmFtZQ5maWx0ZXJzFHN0YXJ0c1dpdGgIaHR0cA5pbWdfdXJsAnASY2F0X2xpc3QvCmJvb2tzDmJvb2tfaWQSYm9va19uYW1lBnBpYxBib29rX3BpYxhib29rX3JlbWFya3MIcGFnZQxzY3JvbGwScGFnZWNvdW50CmxpbWl0CnRvdGFsCGxpc3QKY29udC8KYXVkaW8IdGltZRJib29rX3llYXISYm9va19hcmVhDHRlbGxlchRib29r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 -------------------------------------------------------------------------------- /js/ikanbot.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from './lib/cat.js'; 2 | 3 | let key = 'ikanbot'; 4 | let url = 'https://www.ikanbot.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'User-Agent': agentSp || UA, 15 | 'referer': url 16 | }, 17 | }); 18 | return res.content; 19 | } 20 | 21 | // cfg = {skey: siteKey, ext: extend} 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | } 26 | 27 | function getClass($) { 28 | const nav = $('ul.nav-pills:eq(1) > li > a'); 29 | let tags = { 30 | key: 'tag', 31 | name: '标签', 32 | value: _.map(nav, (n) => { 33 | return { n: n.children[0].data, v: n.attribs.href }; 34 | }), 35 | }; 36 | tags['init'] = tags.value[0].v; 37 | const title = $('title:first').text().split('-')[0].substring(2); 38 | return { cls: { type_id: tags.value[0].v, type_name: title }, tags: [tags] }; 39 | } 40 | 41 | async function home(filter) { 42 | let classes = []; 43 | let filterObj = {}; 44 | for (const cate of ['/hot/index-movie-热门.html', '/hot/index-tv-热门.html']) { 45 | const html = await request(url + cate); 46 | const $ = load(html); 47 | const { cls, tags } = getClass($); 48 | classes.push(cls); 49 | filterObj[cls.type_id] = tags; 50 | } 51 | return JSON.stringify({ 52 | class: classes, 53 | filters: filterObj, 54 | }); 55 | } 56 | 57 | async function homeVod() { 58 | const html = await request(url); 59 | const $ = load(html); 60 | const items = $('div.v-list a.item'); 61 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 62 | let videos = _.map(items, (item) => { 63 | const img = $(item).find('img:first')[0]; 64 | return { 65 | vod_id: item.attribs.href, 66 | vod_name: img.attribs.alt, 67 | vod_pic: jsBase + base64Encode(img.attribs['data-src']), 68 | vod_remarks: '', 69 | }; 70 | }); 71 | return JSON.stringify({ 72 | list: videos, 73 | }); 74 | } 75 | 76 | async function category(tid, pg, filter, extend) { 77 | if (pg <= 0) pg = 1; 78 | const link = url + (extend.tag || tid).replace('.html', pg > 1 ? `-p-${pg}.html` : '.html'); 79 | const html = await request(link); 80 | const $ = load(html); 81 | const items = $('div.v-list a.item'); 82 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 83 | let videos = _.map(items, (item) => { 84 | const img = $(item).find('img:first')[0]; 85 | return { 86 | vod_id: item.attribs.href, 87 | vod_name: img.attribs.alt, 88 | vod_pic: jsBase + base64Encode(img.attribs['data-src']), 89 | vod_remarks: '', 90 | }; 91 | }); 92 | const hasMore = $('div.page-more > a:contains(下一页)').length > 0; 93 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 94 | return JSON.stringify({ 95 | page: parseInt(pg), 96 | pagecount: pgCount, 97 | limit: 24, 98 | total: 24 * pgCount, 99 | list: videos, 100 | }); 101 | } 102 | 103 | async function detail(id) { 104 | const html = await request(url + id); 105 | const $ = load(html); 106 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 107 | const detail = $('div.detail'); 108 | const remarks = $('span#line-tips').text(); 109 | let vod = { 110 | vod_id: id, 111 | vod_pic: jsBase + base64Encode($('div.item-root > img')[0].attribs['data-src']), 112 | vod_remarks: '', 113 | vod_content: remarks || '', 114 | vod_name: $(detail).find('h2').text().trim(), 115 | vod_year: $(detail).find('h3:nth-child(3)').text(), 116 | vod_area: $(detail).find('h3:nth-child(4)').text(), 117 | vod_actor: $(detail).find('h3:nth-child(5)').text(), 118 | }; 119 | const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2&token=9109590b194731fde643ce27924fcf6f', { 120 | headers: { 121 | Referer: 'play', 122 | 'User-Agent': UA, 123 | }, 124 | }); 125 | const list = JSON.parse(res.content).data.list; 126 | let playlist = {}; 127 | let arr = [] 128 | for (const l of list) { 129 | const flagData = JSON.parse(l.resData); 130 | for (const f of flagData) { 131 | const from = f.flag; 132 | const urls = f.url; 133 | if (!from || !urls) continue; 134 | if (playlist[from]) continue; 135 | playlist[from] = urls; 136 | } 137 | } 138 | for (var key in playlist) { 139 | if ('kuaikan' == key) { 140 | arr.push({ 141 | flag: '快看', 142 | url: playlist[key], 143 | sort: 1 144 | }) 145 | } else if ('bfzym3u8' == key) { 146 | arr.push({ 147 | flag: '暴风', 148 | url: playlist[key], 149 | sort: 2 150 | }) 151 | } else if ('ffm3u8' == key) { 152 | arr.push({ 153 | flag: '非凡', 154 | url: playlist[key], 155 | sort: 3 156 | }) 157 | } else if ('lzm3u8' == key) { 158 | arr.push({ 159 | flag: '量子', 160 | url: playlist[key], 161 | sort: 4 162 | }) 163 | } else { 164 | arr.push({ 165 | flag: key, 166 | url: playlist[key], 167 | sort: 5 168 | }) 169 | } 170 | } 171 | arr.sort((a, b) => a.sort - b.sort); 172 | let playFrom = []; 173 | let playList = []; 174 | arr.map(val => { 175 | playFrom.push(val.flag); 176 | playList.push(val.url); 177 | }) 178 | vod.vod_play_from = playFrom.join("$$$"); 179 | vod.vod_play_url = playList.join("$$$"); 180 | return JSON.stringify({ 181 | list: [vod], 182 | }); 183 | } 184 | 185 | function base64Encode(text) { 186 | return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); 187 | } 188 | 189 | function base64Decode(text) { 190 | return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); 191 | } 192 | 193 | async function proxy(segments, headers) { 194 | let what = segments[0]; 195 | let url = base64Decode(segments[1]); 196 | if (what == 'img') { 197 | var resp = await req(url, { 198 | buffer: 2, 199 | headers: { 200 | Referer: url, 201 | 'User-Agent': UA, 202 | }, 203 | }); 204 | return JSON.stringify({ 205 | code: resp.code, 206 | buffer: 2, 207 | content: resp.content, 208 | headers: resp.headers, 209 | }); 210 | } 211 | return JSON.stringify({ 212 | code: 500, 213 | content: '', 214 | }); 215 | } 216 | 217 | async function play(flag, id, flags) { 218 | return JSON.stringify({ 219 | parse: 0, 220 | url: id, 221 | }); 222 | } 223 | 224 | async function search(wd, quick, pg) { 225 | if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; 226 | const html = await request(url + '/search?q=' + wd + '&p=' + pg); 227 | const $ = load(html); 228 | const items = $('div.media'); 229 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 230 | let videos = _.map(items, (item) => { 231 | const a = $(item).find('a:first')[0]; 232 | const img = $(item).find('img:first')[0]; 233 | const remarks = $($(item).find('span.label')[0]).text().trim(); 234 | return { 235 | vod_id: a.attribs.href, 236 | vod_name: img.attribs.alt, 237 | vod_pic: jsBase + base64Encode(img.attribs['data-src']), 238 | vod_remarks: remarks || '', 239 | }; 240 | }); 241 | const hasMore = $('div.page-more > a:contains(下一页)').length > 0; 242 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 243 | return JSON.stringify({ 244 | page: parseInt(pg), 245 | pagecount: pgCount, 246 | list: videos, 247 | }); 248 | } 249 | 250 | export function __jsEvalReturn() { 251 | return { 252 | init: init, 253 | home: home, 254 | homeVod: homeVod, 255 | category: category, 256 | detail: detail, 257 | play: play, 258 | proxy: proxy, 259 | search: search, 260 | }; 261 | } 262 | -------------------------------------------------------------------------------- /js/anfun_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _, jinja2 } from './lib/cat.js'; 2 | 3 | let key = 'anfun'; 4 | let HOST = 'https://www.anfuns.cc'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'User-Agent': agentSp || UA, 15 | 'Referer': HOST 16 | }, 17 | }); 18 | return res.content; 19 | } 20 | 21 | // cfg = {skey: siteKey, ext: extend} 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | } 26 | 27 | async function home(filter) { 28 | let classes = [{"type_id":1,"type_name":"新旧番剧"},{"type_id":2,"type_name":"蓝光无修"},{"type_id":3,"type_name":"动漫剧场"},{"type_id":4,"type_name":"欧美动漫"}]; 29 | let filterObj = { 30 | "1":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"/by/time"},{"n":"最热","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}], 31 | "2":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"/by/time"},{"n":"最热","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}], 32 | "3":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"/by/time"},{"n":"最热","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}], 33 | "4":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"/by/time"},{"n":"最热","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}] 34 | }; 35 | 36 | return JSON.stringify({ 37 | class: classes, 38 | filters: filterObj, 39 | }); 40 | } 41 | 42 | async function homeVod() {} 43 | 44 | async function category(tid, pg, filter, extend) { 45 | if (pg <= 0) pg = 1; 46 | const link = HOST + '/show/' + tid + '-' + (extend.class || '') + '--' + (extend.year || '') + (extend.by || '/by/time') + '/page/' + pg + '.html';//https://www.anfuns.cc/show/1---2023/by/hits/page/2.html 47 | const html = await request(link); 48 | const $ = load(html); 49 | const items = $('ul.hl-vod-list > li'); 50 | let videos = _.map(items, (item) => { 51 | const it = $(item).find('a:first')[0]; 52 | const remarks = $($(item).find('span.hl-lc-1')[0]).text().trim(); 53 | return { 54 | vod_id: it.attribs.href.replace(/.*?\/anime\/(.*).html/g, '$1'), 55 | vod_name: it.attribs.title, 56 | vod_pic: it.attribs['data-original'], 57 | vod_remarks: remarks || '', 58 | }; 59 | }); 60 | const hasMore = $('ul.hl-page-wrap > li > a > span.hl-hidden-xs:contains(下一页)').length > 0; 61 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 62 | return JSON.stringify({ 63 | page: parseInt(pg), 64 | pagecount: pgCount, 65 | limit: 24, 66 | total: 24 * pgCount, 67 | list: videos, 68 | }); 69 | } 70 | 71 | async function detail(id) { 72 | var html = await request( HOST + '/anime/' + id + '.html'); 73 | var $ = load(html); 74 | var vod = { 75 | vod_id: id, 76 | vod_name: $('h1:first').text().trim(), 77 | vod_type: $('.stui-content__detail p:first a').text(), 78 | vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:',''), 79 | vod_pic: $('.stui-content__thumb img:first').attr('data-original'), 80 | vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '', 81 | vod_content: $('span.detail-content').text().trim(), 82 | }; 83 | var playMap = {}; 84 | var tabs = $('ul.hl-from-list > li > span'); 85 | var playlists = $('ul.hl-plays-list'); 86 | _.each(tabs, (tab, i) => { 87 | var from = tab.children[0].data; 88 | var list = playlists[i]; 89 | list = $(list).find('a'); 90 | _.each(list, (it) => { 91 | var title = it.children[0].data; 92 | var playUrl = it.attribs.href.replace(/\/play\/(.*).html/g, '$1'); 93 | 94 | if (!playMap.hasOwnProperty(from)) { 95 | playMap[from] = []; 96 | } 97 | playMap[from].push( title + '$' + playUrl); 98 | }); 99 | }); 100 | vod.vod_play_from = _.keys(playMap).join('$$$'); 101 | var urls = _.values(playMap); 102 | var vod_play_url = _.map(urls, (urlist) => { 103 | return urlist.join('#'); 104 | }); 105 | vod.vod_play_url = vod_play_url.join('$$$'); 106 | return JSON.stringify({ 107 | list: [vod], 108 | }); 109 | } 110 | async function play(flag, id, flags) { 111 | const link = HOST + '/play/' + id + '.html'; 112 | const html = await request(link); 113 | const $ = load(html); 114 | const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=','')); 115 | const playurl = js.url; 116 | const playUrl = unescape(base64Decode(playurl)); 117 | return JSON.stringify({ 118 | parse: 0, 119 | url: playUrl, 120 | }); 121 | } 122 | 123 | function base64Encode(text) { 124 | return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); 125 | } 126 | 127 | function base64Decode(text) { 128 | return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); 129 | } 130 | 131 | async function search(wd, quick) { 132 | let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list; 133 | let videos = []; 134 | for (const vod of data) { 135 | videos.push({ 136 | vod_id: vod.id, 137 | vod_name: vod.name, 138 | vod_pic: vod.pic, 139 | vod_remarks: '', 140 | }); 141 | } 142 | return JSON.stringify({ 143 | list: videos, 144 | }); 145 | } 146 | 147 | export function __jsEvalReturn() { 148 | return { 149 | init: init, 150 | home: home, 151 | homeVod: homeVod, 152 | category: category, 153 | detail: detail, 154 | play: play, 155 | search: search, 156 | }; 157 | } -------------------------------------------------------------------------------- /js/ikanbot_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from 'assets://js/lib/cat.js'; 2 | 3 | let key = 'ikanbot'; 4 | let url = 'https://www.aikanbot.com'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | async function request(reqUrl, agentSp) { 11 | let res = await req(reqUrl, { 12 | method: 'get', 13 | headers: { 14 | 'User-Agent': agentSp || UA, 15 | 'referer': url 16 | }, 17 | }); 18 | return res.content; 19 | } 20 | 21 | // cfg = {skey: siteKey, ext: extend} 22 | async function init(cfg) { 23 | siteKey = cfg.skey; 24 | siteType = cfg.stype; 25 | } 26 | 27 | function getClass($) { 28 | const nav = $('ul.nav-pills:eq(1) > li > a'); 29 | let tags = { 30 | key: 'tag', 31 | name: '标签', 32 | value: _.map(nav, (n) => { 33 | return { n: n.children[0].data, v: n.attribs.href }; 34 | }), 35 | }; 36 | tags['init'] = tags.value[0].v; 37 | const title = $('title:first').text().split('-')[0].substring(2); 38 | return { cls: { type_id: tags.value[0].v, type_name: title }, tags: [tags] }; 39 | } 40 | 41 | async function home(filter) { 42 | let classes = []; 43 | let filterObj = {}; 44 | for (const cate of ['/hot/index-movie-热门.html', '/hot/index-tv-热门.html']) { 45 | const html = await request(url + cate); 46 | const $ = load(html); 47 | const { cls, tags } = getClass($); 48 | classes.push(cls); 49 | filterObj[cls.type_id] = tags; 50 | } 51 | return JSON.stringify({ 52 | class: classes, 53 | filters: filterObj, 54 | }); 55 | } 56 | 57 | async function homeVod() { 58 | const html = await request(url); 59 | const $ = load(html); 60 | const items = $('div.v-list a.item'); 61 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 62 | let videos = _.map(items, (item) => { 63 | const img = $(item).find('img:first')[0]; 64 | return { 65 | vod_id: item.attribs.href, 66 | vod_name: img.attribs.alt, 67 | vod_pic: jsBase + base64Encode(img.attribs['data-src']), 68 | vod_remarks: '', 69 | }; 70 | }); 71 | return JSON.stringify({ 72 | list: videos, 73 | }); 74 | } 75 | 76 | async function category(tid, pg, filter, extend) { 77 | if (pg <= 0) pg = 1; 78 | const link = url + (extend.tag || tid).replace('.html', pg > 1 ? `-p-${pg}.html` : '.html'); 79 | const html = await request(link); 80 | const $ = load(html); 81 | const items = $('div.v-list a.item'); 82 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 83 | let videos = _.map(items, (item) => { 84 | const img = $(item).find('img:first')[0]; 85 | return { 86 | vod_id: item.attribs.href, 87 | vod_name: img.attribs.alt, 88 | vod_pic: jsBase + base64Encode(img.attribs['data-src']), 89 | vod_remarks: '', 90 | }; 91 | }); 92 | const hasMore = $('div.page-more > a:contains(下一页)').length > 0; 93 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 94 | return JSON.stringify({ 95 | page: parseInt(pg), 96 | pagecount: pgCount, 97 | limit: 24, 98 | total: 24 * pgCount, 99 | list: videos, 100 | }); 101 | } 102 | 103 | async function detail(id) { 104 | const html = await request(url + id); 105 | const $ = load(html); 106 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 107 | const detail = $('div.detail'); 108 | const remarks = $('span#line-tips').text(); 109 | let vod = { 110 | vod_id: id, 111 | vod_pic: jsBase + base64Encode($('div.item-root > img')[0].attribs['data-src']), 112 | vod_remarks: '', 113 | vod_content: remarks || '', 114 | vod_name: $(detail).find('h2').text().trim(), 115 | vod_year: $(detail).find('h3:nth-child(3)').text(), 116 | vod_area: $(detail).find('h3:nth-child(4)').text(), 117 | vod_actor: $(detail).find('h3:nth-child(5)').text(), 118 | }; 119 | const token = getToken($); 120 | const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2&token=' + token, { 121 | headers: { 122 | Referer: 'play', 123 | 'User-Agent': UA, 124 | }, 125 | }); 126 | const list = JSON.parse(res.content).data.list; 127 | let playlist = {}; 128 | let arr = [] 129 | for (const l of list) { 130 | const flagData = JSON.parse(l.resData); 131 | for (const f of flagData) { 132 | const from = f.flag; 133 | const urls = f.url; 134 | if (!from || !urls) continue; 135 | if (playlist[from]) continue; 136 | playlist[from] = urls; 137 | } 138 | } 139 | for (var key in playlist) { 140 | if ('kuaikan' == key) { 141 | arr.push({ 142 | flag: '快看', 143 | url: playlist[key], 144 | sort: 1 145 | }) 146 | } else if ('bfzym3u8' == key) { 147 | arr.push({ 148 | flag: '暴风', 149 | url: playlist[key], 150 | sort: 2 151 | }) 152 | } else if ('ffm3u8' == key) { 153 | arr.push({ 154 | flag: '非凡', 155 | url: playlist[key], 156 | sort: 3 157 | }) 158 | } else if ('lzm3u8' == key) { 159 | arr.push({ 160 | flag: '量子', 161 | url: playlist[key], 162 | sort: 4 163 | }) 164 | } else { 165 | arr.push({ 166 | flag: key, 167 | url: playlist[key], 168 | sort: 5 169 | }) 170 | } 171 | } 172 | arr.sort((a, b) => a.sort - b.sort); 173 | let playFrom = []; 174 | let playList = []; 175 | arr.map(val => { 176 | playFrom.push(val.flag); 177 | playList.push(val.url); 178 | }) 179 | vod.vod_play_from = playFrom.join("$$$"); 180 | vod.vod_play_url = playList.join("$$$"); 181 | return JSON.stringify({ 182 | list: [vod], 183 | }); 184 | } 185 | 186 | function getToken($) { 187 | const currentId = $('#current_id').val(); 188 | let eToken = $('#e_token').val(); 189 | if (!currentId || !eToken) return ''; 190 | const idLength = currentId.length; 191 | const subId = currentId.substring(idLength - 4, idLength); 192 | let keys = []; 193 | for (let i = 0; i < subId.length; i++) { 194 | const curInt = parseInt(subId[i]); 195 | const splitPos = curInt % 3 + 1; 196 | keys[i] = eToken.substring(splitPos, splitPos + 8); 197 | eToken = eToken.substring(splitPos + 8, eToken.length); 198 | } 199 | return keys.join(''); 200 | } 201 | 202 | function base64Encode(text) { 203 | return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); 204 | } 205 | 206 | function base64Decode(text) { 207 | return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); 208 | } 209 | 210 | async function proxy(segments, headers) { 211 | let what = segments[0]; 212 | let url = base64Decode(segments[1]); 213 | if (what == 'img') { 214 | var resp = await req(url, { 215 | buffer: 2, 216 | headers: { 217 | Referer: url, 218 | 'User-Agent': UA, 219 | }, 220 | }); 221 | return JSON.stringify({ 222 | code: resp.code, 223 | buffer: 2, 224 | content: resp.content, 225 | headers: resp.headers, 226 | }); 227 | } 228 | return JSON.stringify({ 229 | code: 500, 230 | content: '', 231 | }); 232 | } 233 | 234 | async function play(flag, id, flags) { 235 | return JSON.stringify({ 236 | parse: 0, 237 | url: id, 238 | }); 239 | } 240 | 241 | async function search(wd, quick, pg) { 242 | if (pg <= 0 || typeof(pg) == 'undefined') pg = 1; 243 | const html = await request(url + '/search?q=' + wd + '&p=' + pg); 244 | const $ = load(html); 245 | const items = $('div.media'); 246 | var jsBase = await js2Proxy(true, siteType, siteKey, 'img/', {}); 247 | let videos = _.map(items, (item) => { 248 | const a = $(item).find('a:first')[0]; 249 | const img = $(item).find('img:first')[0]; 250 | const remarks = $($(item).find('span.label')[0]).text().trim(); 251 | return { 252 | vod_id: a.attribs.href, 253 | vod_name: img.attribs.alt, 254 | vod_pic: jsBase + base64Encode(img.attribs['data-src']), 255 | vod_remarks: remarks || '', 256 | }; 257 | }); 258 | const hasMore = $('div.page-more > a:contains(下一页)').length > 0; 259 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 260 | return JSON.stringify({ 261 | page: parseInt(pg), 262 | pagecount: pgCount, 263 | list: videos, 264 | }); 265 | } 266 | 267 | export function __jsEvalReturn() { 268 | return { 269 | init: init, 270 | home: home, 271 | homeVod: homeVod, 272 | category: category, 273 | detail: detail, 274 | play: play, 275 | proxy: proxy, 276 | search: search, 277 | }; 278 | } 279 | -------------------------------------------------------------------------------- /js/star_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from 'assets://js/lib/cat.js'; 2 | 3 | let key = 'star'; 4 | let host = 'https://www.histar.tv'; 5 | let apiHost = 'https://aws.ulivetv.net'; 6 | let types = {}; 7 | // let ver = ''; 8 | let siteKey = ''; 9 | let siteType = 0; 10 | 11 | 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'; 12 | 13 | async function request(reqUrl, method, data) { 14 | const headers = { 15 | 'User-Agent': UA, 16 | }; 17 | if (method == 'post') { 18 | headers['Content-Type'] = 'application/json'; 19 | } else { 20 | headers['Cookie'] = 'userIP=127.0.0.1; aws-waf-token='; 21 | headers['Referer'] = host; 22 | } 23 | const res = await req(reqUrl, { 24 | method: method || 'get', 25 | headers: headers, 26 | data: data, 27 | }); 28 | return res.content; 29 | } 30 | 31 | // cfg = {skey: siteKey, ext: extend} 32 | async function init(cfg) { 33 | siteKey = cfg.skey; 34 | siteType = cfg.stype; 35 | types = { 36 | 'movie': '电影', 37 | 'drama': '电视剧', 38 | 'animation': '动漫', 39 | 'variety': '综艺', 40 | 'documentary': '纪录片', 41 | }; 42 | // ver = await getVer(); 43 | } 44 | 45 | // async function getVer() { 46 | // const html = await request(host); 47 | // const $ = load(html); 48 | // const srcAttr = $('script[src*=\'buildManifest.js\']').attr('src'); 49 | // return srcAttr.split('/')[3]; 50 | // } 51 | 52 | async function home(filter) { 53 | const typeList = _.keys(types); 54 | const classes = _.map(typeList, (item) => { 55 | return { type_id: item, type_name: types[item] }; 56 | }); 57 | const filterConfig = {}; 58 | const jsonData = JSON.stringify(typeList); 59 | for (const typeId of typeList) { 60 | const html = await request(host + '/' + typeId + '/all/all/all'); 61 | const $ = load(html); 62 | const json = $('#__NEXT_DATA__')[0].children[0].data; 63 | const obj = JSON.parse(json).props.pageProps.filterCondition; 64 | const label = convertTypeData(obj, 'label', '类型'); 65 | const country = convertTypeData(obj, 'country', '地区'); 66 | const time = convertTypeData(obj, 'time', '年份'); 67 | const filterArray = [label, country, time]; 68 | filterConfig[typeId] = filterArray; 69 | }; 70 | return JSON.stringify({ 71 | class: classes, 72 | filters: filterConfig, 73 | }); 74 | } 75 | 76 | function convertTypeData(typeData, key, name) { 77 | if (!typeData || !typeData[key] || typeData[key].length <= 2) { 78 | return null; 79 | } 80 | let valueList = typeData[key]; 81 | if (key == 'time') { 82 | valueList = valueList.sort((a, b) => { return b - a;}); 83 | valueList.pop(); 84 | } 85 | const values = _.map(valueList, (item) => { 86 | let name; 87 | let value; 88 | if (item instanceof Array) { 89 | name = item[0]; 90 | value = item[0]; 91 | } else { 92 | name = item.toString(); 93 | value = item.toString(); 94 | } 95 | return { 96 | n: name, 97 | v: value, 98 | }; 99 | }); 100 | values.unshift({ 101 | n: '全部', 102 | v: '', 103 | }); 104 | const typeClass = { 105 | key: key, 106 | name: name, 107 | init: '', 108 | value: values, 109 | }; 110 | return typeClass; 111 | } 112 | 113 | async function homeVod() { 114 | const html = await request(host); 115 | const $ = load(html); 116 | const json = $('#__NEXT_DATA__')[0].children[0].data; 117 | const obj = JSON.parse(json).props.pageProps.cards; 118 | const videos = []; 119 | _.each(obj, (cards) => { 120 | if (cards.name == '电视直播') return; 121 | _.each(cards.cards, (card) => { 122 | const v = { 123 | vod_id: card.id, 124 | vod_name: card.name, 125 | vod_pic: card.img, 126 | vod_remarks: card.countStr, 127 | }; 128 | videos.push(v); 129 | }); 130 | }); 131 | return JSON.stringify({ 132 | list: videos, 133 | }); 134 | } 135 | 136 | async function category(tid, pg, filter, extend) { 137 | const limit = 16; 138 | const param = { 139 | chName: types[tid], 140 | page: pg, 141 | pageSize: limit, 142 | label: extend.label, 143 | country: extend.country, 144 | }; 145 | if (extend.time) { 146 | const year = parseInt(extend.time); 147 | param.startTime = year; 148 | param.endTime = year; 149 | } 150 | const json = await request(apiHost + '/v3/web/api/filter', 'post', JSON.stringify(param)); 151 | const data = JSON.parse(json).data; 152 | const videos = _.map(data.list, (card) => { 153 | return { 154 | vod_id: card.id, 155 | vod_name: card.name, 156 | vod_pic: card.img, 157 | vod_remarks: card.countStr, 158 | }; 159 | }); 160 | const page = parseInt(pg); 161 | const count = parseInt(data.total / limit); 162 | return JSON.stringify({ 163 | page: page, 164 | pagecount: count, 165 | limit: limit, 166 | total: data.total, 167 | list: videos, 168 | }); 169 | } 170 | 171 | async function detail(id) { 172 | const html = await request(host + '/vod/detail/' + id); 173 | const $ = load(html); 174 | const json = $('#__NEXT_DATA__')[0].children[0].data; 175 | const obj = JSON.parse(json).props.pageProps; 176 | const vObj = obj.pageData; 177 | const vodAtom = { 178 | vod_id: id, 179 | vod_name: vObj.name, 180 | vod_type: vObj.chname, 181 | vod_pic: vObj.picurl, 182 | vod_area: vObj.country, 183 | vod_lang: vObj.language, 184 | vod_remarks: vObj.countStr, 185 | vod_actor: vObj.actor, 186 | vod_director: vObj.director, 187 | vod_content: vObj.desc, 188 | } 189 | const playInfo = obj.videosGroup; 190 | const playVod = {}; 191 | _.each(playInfo, (info) => { 192 | const sourceName = info.name; 193 | let playList = ''; 194 | const videoInfo = info.videos; 195 | const vodItems = _.map(videoInfo, (epObj) => { 196 | const epName = epObj.epInfo; 197 | const playUrl = epObj.purl 198 | return epName + '$' + playUrl; 199 | }); 200 | if (_.isEmpty(vodItems)) return; 201 | playList = vodItems.join('#'); 202 | playVod[sourceName] = playList; 203 | }); 204 | vodAtom.vod_play_from = _.keys(playVod).join('$$$'); 205 | vodAtom.vod_play_url = _.values(playVod).join('$$$'); 206 | return JSON.stringify({ 207 | list: [vodAtom], 208 | }); 209 | } 210 | 211 | async function play(flag, id, flags) { 212 | let playUrl = id; 213 | return JSON.stringify({ 214 | parse: 0, 215 | url: playUrl, 216 | }); 217 | } 218 | 219 | async function search(wd, quick, pg) { 220 | // const limit = 10; 221 | // const json = await request(host + '/_next/data/' + ver + '/search.json?word=' + encodeURIComponent(wd) + '&page=' + pg); 222 | // const data = JSON.parse(json).pageProps; 223 | // const videos = _.map(data.initList, (card) => { 224 | // return { 225 | // vod_id: card.id, 226 | // vod_name: card.name, 227 | // vod_pic: card.picurl, 228 | // vod_remarks: card.countStr, 229 | // }; 230 | // }); 231 | // const page = parseInt(pg); 232 | // const count = parseInt(data.total / limit); 233 | // return JSON.stringify({ 234 | // page: page, 235 | // pagecount: count, 236 | // limit: limit, 237 | // total: data.total, 238 | // list: videos, 239 | // }); 240 | const limit = 10; 241 | const param = { 242 | word: wd, 243 | page: pg, 244 | pageSize: limit, 245 | }; 246 | const json = await request(apiHost + '/v3/web/api/search', 'post', JSON.stringify(param)); 247 | const data = JSON.parse(json).data; 248 | const videos = _.map(data.list, (card) => { 249 | return { 250 | vod_id: card.id, 251 | vod_name: card.name, 252 | vod_pic: card.picurl, 253 | vod_remarks: card.countStr, 254 | }; 255 | }); 256 | const page = parseInt(pg); 257 | const count = parseInt(data.total / limit); 258 | return JSON.stringify({ 259 | page: page, 260 | pagecount: count, 261 | limit: limit, 262 | total: data.total, 263 | list: videos, 264 | }); 265 | } 266 | 267 | export function __jsEvalReturn() { 268 | return { 269 | init: init, 270 | home: home, 271 | homeVod: homeVod, 272 | category: category, 273 | detail: detail, 274 | play: play, 275 | search: search, 276 | }; 277 | } -------------------------------------------------------------------------------- /js/mtsp_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, _ } from './lib/cat.js'; 2 | 3 | let key = 'mtsp'; 4 | let main = 'http://mt77.pw'; 5 | let url = ''; 6 | let siteKey = ''; 7 | let siteType = 0; 8 | 9 | let searchKeys = []; 10 | 11 | let tags = 'JTVCJTIyJUU2JUI1JTkzJUU1JUFGJTg2JUU2JUJGJTgwJUU2JTgzJTg1JTIyJTJDJTIyJUU2JTkwJTlDJUU2JTlGJUE1JUU1JUFFJTk4JTIyJTJDJTIyJUU1JUE1JUIzJUU0JUJCJTg2JTIyJTJDJTIyJUU1JTkwJThFJUU1JTg1JUE1JTIyJTJDJTIyJUU3JUJFJThFJUU0JUI5JUIzJUU1JUI3JUE4JUU4JTgzJUI4JTIyJTJDJTIyJUU1JThGJUEzJUU0JUJBJUE0JUU1JThGJUEzJUU3JTg4JTg2JTIyJTJDJTIyJUU1JTg2JTg1JUU1JUIwJTg0JTIyJTJDJTIyJUU1JUE1JUIzJUU0JUI4JThBJTIyJTJDJTIyJUU3JUJFJThFJUU4JTg1JUJGJTIyJTJDJTIyJUU3JUIyJUJFJUU1JTkzJTgxJTIyJTJDJTIyJUU0JUI4JTlEJUU4JUEyJTlDJTIyJTJDJTIyJUU1JUIwJTkxJUU1JUE1JUIzJTIyJTJDJTIyJUU1JTg4JUI2JUU2JTlDJThEJTIyJTJDJTIyJUU3JUJFJUE0UCUyMiUyQyUyMiVFNyU5OSVCRCVFOCU5OSU4RSUyMiUyQyUyMiVFNiU4MyU4NSVFOCVCNiVBMyVFOCVBRiVCMSVFNiU4MyU5MSUyMiUyQyUyMiVFOSU4MSU5MyVFNSU4NSVCNyUyMiUyQyUyMiVFNSVBNSVCMyVFNyVBNSU5RSUyMiUyQyUyMiVFOSVCQSVCQiVFOCVCMSU4NiVFNCVCQyVBMCVFNSVBQSU5MiUyMiUyQyUyMiVFOSVBMiU5QyVFNSVCMCU4NCUyMiUyQyUyMiVFNSVBRCVBNiVFNyU5NCU5RiUyMiUyQyUyMiVFNCVCQSVCQSVFNSVBNiVCQiUyMiUyQyUyMiVFNyVCNCVBMCVFNCVCQSVCQSUyMiUyQyUyMiVFNiVCNSVCNCVFNSVBRSVBNCUyMiUyQyUyMiVFOSU4NSU5MiVFNSVCQSU5NyUyMiUyQyUyMiVFNyU4NiU5RiVFNSVBNSVCMyUyMiUyQyUyMiVFOCU4NyVBQSVFNiU4QiU4RCUyMiUyQyUyMiVFNSVCMCU5MSVFNSVBNiU4NyUyMiUyQyUyMiVFNSU4OSVBNyVFNiU4MyU4NSUyMiUyQyUyMiVFNCVCOSVCMyVFNCVCQSVBNCUyMiUyQyUyMiVFNiU4OCVCNyVFNSVBNCU5NiUyMiUyQyUyMlNXQUclMjIlMkMlMjIlRTUlQTUlQjMlRTQlQjglQkIlRTYlOTIlQUQlMjIlMkMlMjIlRTQlQjglQUQlRTYlOTYlODclRTUlQUQlOTclRTUlQjklOTUlMjIlMkMlMjIlRTQlQjklQjElRTQlQkMlQTYlMjIlMkMlMjIlRTglQjAlODMlRTYlOTUlOTklMjIlMkMlMjIlRTYlOEQlODYlRTclQkIlOTElMjIlMkMlMjIlRTYlQTglQTElRTclODklQjklMjIlMkMlMjIlRTclOUIlQjQlRTYlOTIlQUQlMjIlMkMlMjI5MSVFNSU4OCVCNiVFNyU4OSU4NyVFNSU4RSU4MiUyMiUyQyUyMiVFOSU4NyU4RSVFNiU4OCU5OCUyMiUyQyUyMiVFNSU4MSVCNyVFNiU4QiU4RCUyMiUyQyUyMiVFNSU4QiVCRSVFNiU5MCVBRCUyMiUyQyUyMiVFNiU5MSU4NCVFNSU4MyU4RiVFNSVBNCVCNCUyMiUyQyUyMiVFNSU4NyVCQSVFOCVCRCVBOCUyMiUyQyUyMiVFNyVCRCU5MSVFNyVCQSVBMiUyMiUyQyUyMiVFNSVCNyVBOCVFNiVBMCVCOSUyMiUyQyUyMiVFNiVBQyVBNyVFNyVCRSU4RSUyMiUyQyUyMmNvc3BsYXklMjIlMkMlMjIlRTUlQkMlQkElRTUlQTUlQjglMjIlMkMlMjIlRTUlQTQlQTklRTclQkUlOEUlRTQlQkMlQTAlRTUlQUElOTIlMjIlMkMlMjIlRTYlOEMlODklRTYlOTElQTklMjIlMkMlMjIzRCVFNSU4QSVBOCVFNiVCQyVBQiUyMiUyQyUyMiVFOCU5MCU5RCVFOCU4RSU4OSUyMiUyQyUyMiVFNSVBNyU5MCVFNSVBNiVCOSVFOCU4QSVCMSUyMiUyQyUyMiVFNSU4QSU5RSVFNSU4NSVBQyVFNSVBRSVBNCUyMiUyQyUyMiVFOCVCRCVBNiVFOSU5QyU4NyUyMiUyQyUyMiVFNSU4MSVCNyVFNiU4MyU4NSUyMiUyQyUyMiVFNiU5RSU5QyVFNSU4NiVCQiVFNCVCQyVBMCVFNSVBQSU5MiUyMiUyQyUyMiVFOCU4MiU5QiVFNCVCQSVBNCUyMiUyQyUyMlNNJTIyJTJDJTIyJUU5JTg3JThEJUU1JThGJUEzJTIyJTJDJTIyJUU2JUIzJUIzJUU4JUExJUEzJTIyJTJDJTIyU1BBJTIyJTJDJTIyJUU2JThFJUEyJUU4JThBJUIxJTIyJTJDJTIyJUU4JUI2JUIzJUU0JUJBJUE0JTIyJTJDJTIyJUU3JUE5JUJBJUU1JUE3JTkwJTIyJTJDJTIyJUU4JTlDJTlDJUU2JUExJTgzJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JTk1JTk5JUU1JUI4JTg4JTIyJTJDJTIyJUU2JUJEJUFFJUU1JTkwJUI5JTIyJTJDJTIyJUU5JTk3JUE4JUU0JUJBJThCJUU0JUJCJUI2JTIyJTJDJTIyJUU1JUE1JUIzJUU1JTkwJThDJTIyJTJDJTIyJUU2JThBJTgwJUU1JUI4JTg4JTIyJTJDJTIyJUU3JUIyJUJFJUU0JUI4JTlDJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JTk1JTk5JUU1JUFFJUE0JTIyJTJDJTIyJUU4JUJGJUI3JUU1JUE1JUI4JTIyJTJDJTIyJUU2JThEJUEyJUU1JUE2JUJCJTIyJTJDJTIyS1RWJTIyJTJDJTIyJUU2JTk4JTlGJUU3JUE5JUJBJUU0JUJDJUEwJUU1JUFBJTkyJTIyJTJDJTIyJUU2JThBJUE0JUU1JUEzJUFCJTIyJTJDJTIyJUU2JUFGJThEJUU1JUE1JUIzJTIyJTVE'; 12 | 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'; 13 | async function request(reqUrl, agentSp) { 14 | const res = await req(reqUrl, { 15 | headers: { 16 | 'User-Agent': agentSp || UA, 17 | }, 18 | }); 19 | return res.content; 20 | } 21 | 22 | // cfg = {skey: siteKey, ext: extend} 23 | async function init(cfg) { 24 | siteKey = cfg.skey; 25 | siteType = cfg.stype; 26 | // 获取url 27 | let html = await request(main); 28 | url = html.match(/location\.href="(.*)"/)[1].replace('https', 'http'); 29 | tags = JSON.parse(decodeURIComponent(base64Decode(tags))); 30 | searchKeys = cfg.tags || []; 31 | let mainJs = await request(url + '/main.js'); 32 | url = mainJs.match(/apiurl = '(.*)'/)[1].replace('https', 'http'); 33 | } 34 | 35 | async function home(filter) { 36 | let classes = []; 37 | let filterObj = {}; 38 | let tagIdx = 1; 39 | _.each(_.chunk(tags, 24), (array) => { 40 | const subs = _.chunk(array, 8); 41 | let tid = ''; 42 | let init = ''; 43 | for (let i = 0; i < subs.length; i++) { 44 | let tt = { 45 | key: 'tag', 46 | name: '', 47 | init: '', 48 | value: _.map(subs[i], (e) => { 49 | return { n: e, v: e }; 50 | }), 51 | }; 52 | if (i == 0) { 53 | init = tt.value[0].v; 54 | tt['init'] = init; 55 | tid = tt.value[0].v; 56 | filterObj[tid] = [tt]; 57 | } else { 58 | tt['init'] = init; 59 | filterObj[tid].push(tt); 60 | } 61 | } 62 | classes.push({ 63 | type_id: tid, 64 | type_name: '综合' + tagIdx, 65 | land: 1, 66 | }); 67 | tagIdx++; 68 | }); 69 | 70 | _.each(searchKeys, (s) => { 71 | classes.push({ 72 | type_id: 'sc_' + s, 73 | type_name: s, 74 | land: 1, 75 | }); 76 | }); 77 | 78 | return JSON.stringify({ 79 | class: classes, 80 | filters: filterObj, 81 | }); 82 | } 83 | 84 | async function homeVod() { 85 | return '{}'; 86 | } 87 | 88 | async function category(tid, pg, filter, extend) { 89 | if (pg <= 0) pg = 1; 90 | let link = url; 91 | if (tid.startsWith('sc_')) { 92 | link = link + '/search?q=' + encodeURIComponent(tid.substr(3)) + '&page=' + pg + '&size=16'; 93 | } else { 94 | link = link + '/vodList?&tag=' + (extend.tag || tid) + '&page=' + pg + '&size=16'; 95 | } 96 | const data = decrypt(JSON.parse(await request(link)).data); 97 | let videos = []; 98 | for (const vod of data.movies) { 99 | if (!vod.id) continue; 100 | videos.push({ 101 | vod_id: vod.id, 102 | vod_name: vod.name, 103 | vod_pic: vod.thumb, 104 | vod_remarks: vod.views, 105 | }); 106 | } 107 | return JSON.stringify({ 108 | page: parseInt(data.page), 109 | pagecount: _.ceil(data.totals / 16), 110 | limit: 16, 111 | total: data.totals, 112 | list: videos, 113 | }); 114 | } 115 | 116 | async function detail(id) { 117 | const link = url + '/vodDetail?id=' + id; 118 | const data = decrypt(JSON.parse(await request(link)).data).info; 119 | let desc = data.name + '\n'; 120 | if (data.views) { 121 | desc += '观看次数:' + data.views + '\n'; 122 | } 123 | let vod = { 124 | vod_id: id, 125 | vod_name: data.name, 126 | vod_pic: data.thumb, 127 | type_name: (data.tag || []).join(','), 128 | vod_year: data.date, 129 | vod_content: desc, 130 | }; 131 | vod.vod_play_from = 'm3u8'; 132 | let urls = []; 133 | if (data.m3u8) { 134 | urls.push('主力$' + data.m3u8); 135 | } 136 | if (data.m3u8bak) { 137 | urls.push('备用$' + data.m3u8bak); 138 | } 139 | vod.vod_play_url = urls.join('#'); 140 | return JSON.stringify({ 141 | list: [vod], 142 | }); 143 | } 144 | 145 | async function proxy(segments, headers) {} 146 | 147 | async function play(flag, id, flags) { 148 | return JSON.stringify({ 149 | parse: 0, 150 | url: id, 151 | }); 152 | } 153 | 154 | async function search(wd, quick, pg) { 155 | let page = pg || 1; 156 | if (page == 0) page = 1; 157 | let videos = []; 158 | let link = url + '/search?q=' + encodeURIComponent(wd) + '&page=' + page + '&size=16'; 159 | const data = decrypt(JSON.parse(await request(link)).data); 160 | for (const vod of data.movies) { 161 | if (!vod.id) continue; 162 | videos.push({ 163 | vod_id: vod.id, 164 | vod_name: vod.name, 165 | vod_pic: vod.thumb, 166 | vod_remarks: vod.views, 167 | }); 168 | } 169 | 170 | return JSON.stringify({ 171 | page: parseInt(data.page), 172 | pagecount: _.ceil(data.totals / 16), 173 | land: 1, 174 | list: videos, 175 | }); 176 | } 177 | 178 | function decrypt(content) { 179 | return JSON.parse(aesX('AES/CBC/PKCS7', false, content, true, 'F31F2A75FBF94099', '12345BCA901ER456', false)); 180 | } 181 | 182 | function base64Encode(text) { 183 | return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); 184 | } 185 | 186 | function base64Decode(text) { 187 | return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); 188 | } 189 | 190 | export function __jsEvalReturn() { 191 | return { 192 | init: init, 193 | home: home, 194 | homeVod: homeVod, 195 | category: category, 196 | detail: detail, 197 | play: play, 198 | search: search, 199 | }; 200 | } 201 | -------------------------------------------------------------------------------- /js/czzy_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from './lib/cat.js'; 2 | 3 | let key = 'czzy'; 4 | let url = 'https://cz01.cc'; 5 | let siteKey = ''; 6 | let siteType = 0; 7 | 8 | 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'; 9 | 10 | const cookie = {}; 11 | 12 | async function request(reqUrl, referer, mth, data, hd) { 13 | const headers = { 14 | 'User-Agent': UA, 15 | Cookie: _.map(cookie, (value, key) => { 16 | return `${key}=${value}`; 17 | }).join(';'), 18 | }; 19 | if (referer) headers.referer = encodeURIComponent(referer); 20 | let res = await req(reqUrl, { 21 | method: mth || 'get', 22 | headers: headers, 23 | data: data, 24 | postType: mth === 'post' ? 'form' : '', 25 | }); 26 | if (res.headers['set-cookie']) { 27 | const set_cookie = _.isArray(res.headers['set-cookie']) ? res.headers['set-cookie'].join(';') : res.headers['set-cookie']; 28 | const cks = set_cookie.split(';'); 29 | for (const c of cks) { 30 | const tmp = c.trim(); 31 | if (tmp.startsWith('result=')) { 32 | cookie.result = tmp.substring(7); 33 | return await request(reqUrl, reqUrl, 'post', { 34 | result: cookie.result, 35 | }); 36 | } else if (tmp.startsWith('esc_search_captcha=1')) { 37 | cookie.esc_search_captcha = 1; 38 | delete cookie.result; 39 | return await request(reqUrl); 40 | } 41 | } 42 | // console.log(res.headers['set-cookie']); 43 | } 44 | return res.content; 45 | } 46 | 47 | // cfg = {skey: siteKey, ext: extend} 48 | async function init(cfg) { 49 | siteKey = cfg.skey; 50 | siteType = cfg.stype; 51 | } 52 | 53 | async function home(filter) { 54 | let filterObj = {}; 55 | const html = await request(url + '/movie_bt'); 56 | const $ = load(html); 57 | const series = $('div#beautiful-taxonomy-filters-tax-movie_bt_series > a[cat-url*=movie_bt_series]'); 58 | const tags = $('div#beautiful-taxonomy-filters-tax-movie_bt_tags > a'); 59 | let tag = { 60 | key: 'tag', 61 | name: '类型', 62 | value: _.map(tags, (n) => { 63 | let v = n.attribs['cat-url'] || ''; 64 | v = v.substring(v.lastIndexOf('/') + 1); 65 | return { n: n.children[0].data, v: v }; 66 | }), 67 | }; 68 | tag['init'] = tag.value[0].v; 69 | let classes = _.map(series, (s) => { 70 | let typeId = s.attribs['cat-url']; 71 | typeId = typeId.substring(typeId.lastIndexOf('/') + 1); 72 | filterObj[typeId] = [tag]; 73 | return { 74 | type_id: typeId, 75 | type_name: s.children[0].data, 76 | }; 77 | }); 78 | const sortName = ['电影', '电视剧', '国产剧', '美剧', '韩剧', '日剧', '海外剧(其他)', '华语电影', '印度电影', '日本电影', '欧美电影', '韩国电影', '动画', '俄罗斯电影', '加拿大电影']; 79 | classes = _.sortBy(classes, (c) => { 80 | const index = sortName.indexOf(c.type_name); 81 | return index === -1 ? sortName.length : index; 82 | }); 83 | return JSON.stringify({ 84 | class: classes, 85 | filters: filterObj, 86 | }); 87 | } 88 | 89 | async function homeVod() { 90 | return '{}'; 91 | } 92 | 93 | async function category(tid, pg, filter, extend) { 94 | if (pg <= 0) pg = 1; 95 | const tag = extend.tag || ''; 96 | const link = url + '/movie_bt' + (tag.length > 0 ? `/movie_bt_tags/${tag}` : '') + '/movie_bt_series/' + tid + (pg > 1 ? `/page/${pg}` : ''); 97 | const html = await request(link); 98 | const $ = load(html); 99 | const items = $('div.mrb > ul > li'); 100 | let videos = _.map(items, (item) => { 101 | const img = $(item).find('img:first')[0]; 102 | const a = $(item).find('a:first')[0]; 103 | const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim(); 104 | const jidi = $($(item).find('div.jidi')[0]).text().trim(); 105 | return { 106 | vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'), 107 | vod_name: img.attribs.alt, 108 | vod_pic: img.attribs['data-original'], 109 | vod_remarks: jidi || hdinfo || '', 110 | }; 111 | }); 112 | const hasMore = $('div.mrb > div.pagenavi_txt > a:contains(>)').length > 0; 113 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 114 | return JSON.stringify({ 115 | page: parseInt(pg), 116 | pagecount: pgCount, 117 | limit: 20, 118 | total: 20 * pgCount, 119 | list: videos, 120 | }); 121 | } 122 | 123 | function stripHtmlTag(src) { 124 | return src 125 | .replace(/<\/?[^>]+(>|$)/g, '') 126 | .replace(/&.{1,5};/g, '') 127 | .replace(/\s{2,}/g, ' '); 128 | } 129 | 130 | async function detail(id) { 131 | const html = await request(url + '/movie/' + id + '.html'); 132 | const $ = load(html); 133 | const detail = $('ul.moviedteail_list > li'); 134 | let vod = { 135 | vod_id: id, 136 | vod_name: $('div.moviedteail_tt > h1').text().trim(), 137 | vod_pic: $('div.dyimg img:first').attr('src'), 138 | vod_remarks: '', 139 | vod_content: stripHtmlTag($('div.yp_context').html()).trim(), 140 | }; 141 | for (const info of detail) { 142 | const i = $(info).text().trim(); 143 | if (i.startsWith('地区:')) { 144 | vod.vod_area = i.substring(3); 145 | } else if (i.startsWith('年份:')) { 146 | vod.vod_year = i.substring(3); 147 | } else if (i.startsWith('导演:')) { 148 | vod.vod_director = _.map($(info).find('a'), (a) => { 149 | return a.children[0].data; 150 | }).join('/'); 151 | } else if (i.startsWith('主演:')) { 152 | vod.vod_actor = _.map($(info).find('a'), (a) => { 153 | return a.children[0].data; 154 | }).join('/'); 155 | } else if (i.startsWith('语言:')) { 156 | vod.vod_lang = i.substring(3); 157 | } 158 | } 159 | const playlist = _.map($('div.paly_list_btn > a'), (a) => { 160 | return a.children[0].data + '$' + a.attribs.href.replace(/.*?\/v_play\/(.*).html/g, '$1'); 161 | }); 162 | vod.vod_play_from = key; 163 | vod.vod_play_url = playlist.join('#'); 164 | return JSON.stringify({ 165 | list: [vod], 166 | }); 167 | } 168 | 169 | async function play(flag, id, flags) { 170 | const link = url + '/v_play/' + id + '.html'; 171 | const html = await request(link); 172 | const $ = load(html); 173 | const iframe = $('body iframe[src*=Cloud]'); 174 | if (iframe.length > 0) { 175 | const iframeHtml = ( 176 | await req(iframe[0].attribs.src, { 177 | headers: { 178 | Referer: link, 179 | 'User-Agent': UA, 180 | }, 181 | }) 182 | ).content; 183 | let code = iframeHtml 184 | .match(/var url = '(.*?)'/)[1] 185 | .split('') 186 | .reverse() 187 | .join(''); 188 | let temp = ''; 189 | for (let i = 0x0; i < code.length; i = i + 0x2) { 190 | temp += String.fromCharCode(parseInt(code[i] + code[i + 0x1], 0x10)); 191 | } 192 | const playUrl = temp.substring(0x0, (temp.length - 0x7) / 0x2) + temp.substring((temp.length - 0x7) / 0x2 + 0x7); 193 | return JSON.stringify({ 194 | parse: 0, 195 | url: playUrl, 196 | }); 197 | } else { 198 | const js = $('script:contains(window.wp_nonce)').html(); 199 | const group = js.match(/(var.*)eval\((\w*\(\w*\))\)/); 200 | const md5 = Crypto; 201 | const result = eval(group[1] + group[2]); 202 | const playUrl = result.match(/url:.*?['"](.*?)['"]/)[1]; 203 | return JSON.stringify({ 204 | parse: 0, 205 | url: playUrl, 206 | }); 207 | } 208 | } 209 | 210 | async function search(wd, quick) { 211 | const html = await request(url + '/?s=' + wd); 212 | const $ = load(html); 213 | const items = $('div.search_list > ul > li'); 214 | let videos = _.map(items, (item) => { 215 | const img = $(item).find('img:first')[0]; 216 | const a = $(item).find('a:first')[0]; 217 | const hdinfo = $($(item).find('div.hdinfo')[0]).text().trim(); 218 | const jidi = $($(item).find('div.jidi')[0]).text().trim(); 219 | return { 220 | vod_id: a.attribs.href.replace(/.*?\/movie\/(.*).html/g, '$1'), 221 | vod_name: img.attribs.alt, 222 | vod_pic: img.attribs['data-original'], 223 | vod_remarks: jidi || hdinfo || '', 224 | }; 225 | }); 226 | return JSON.stringify({ 227 | list: videos, 228 | }); 229 | } 230 | 231 | export function __jsEvalReturn() { 232 | return { 233 | init: init, 234 | home: home, 235 | homeVod: homeVod, 236 | category: category, 237 | detail: detail, 238 | play: play, 239 | search: search, 240 | }; 241 | } 242 | -------------------------------------------------------------------------------- /js/kanqiu_open.js: -------------------------------------------------------------------------------- 1 | import { Crypto, load, _ } from './lib/cat.js'; 2 | 3 | let siteUrl = 'http://www.88kanqiu.one'; 4 | let siteKey = ''; 5 | let siteType = 0; 6 | let headers = { 7 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' 8 | }; 9 | 10 | async function request(reqUrl, postData, agentSp, get) { 11 | 12 | let res = await req(reqUrl, { 13 | method: get ? 'get' : 'post', 14 | headers: headers, 15 | data: postData || {}, 16 | postType: get ? '' : 'form', 17 | }); 18 | 19 | let content = res.content; 20 | return content; 21 | } 22 | 23 | async function get(reqUrl) { 24 | let res = await req(reqUrl, { 25 | method: 'get', 26 | headers: headers 27 | }); 28 | 29 | let content = res.content; 30 | return content; 31 | } 32 | 33 | async function init(cfg) { 34 | siteKey = cfg.skey; 35 | siteType = cfg.stype; 36 | if(cfg.ext) { 37 | siteUrl = cfg.ext; 38 | } 39 | } 40 | 41 | async function home(filter) { 42 | let classes = [{ 43 | type_id: '0', 44 | type_name: '全部直播', 45 | },{ 46 | type_id: '1', 47 | type_name: '篮球直播', 48 | },{ 49 | type_id: '8', 50 | type_name: '足球直播', 51 | },{ 52 | type_id: '29', 53 | type_name: '其他直播', 54 | }]; 55 | 56 | let filterObj = genFilterObj(); 57 | return JSON.stringify({ 58 | class: classes, 59 | filters: filterObj 60 | }); 61 | } 62 | 63 | async function category(tid, pg, filter, extend) { 64 | if(pg <=0) pg = 1; 65 | let cateId = tid == '0'?'':tid; 66 | if (extend['cateId']) { 67 | cateId = extend['cateId']; 68 | } 69 | let url = siteUrl; 70 | if (cateId != '') { 71 | url = url + '/match/' + cateId + '/live'; 72 | } 73 | const html = await get(url); 74 | const $ = load(html); 75 | let videos = []; 76 | let cards = $('.list-group-item'); 77 | for(let i=0;i a')[0]).text().trim(); 87 | let name = ''; 88 | if (time != '') { 89 | name = time + ' ' + gameType + ' ' + teamOne + ' VS ' + teamTwo + ' ' + liveStatus; 90 | } else { 91 | name = $(n).text().replaceAll('\n', '').trim(); 92 | } 93 | let pic = $($(n).find('.col-xs-1 > img')[0]).attr('src'); 94 | if(!pic || pic == '') pic = 'http://www.88kanqiu.one/static/img/default-img.png'; 95 | if(pic.indexOf('http') < 0) pic = siteUrl + pic; 96 | let remark = $($(n).find('.btn.btn-primary')).text(); 97 | if (extend['livingStatus'] != '1' || (extend['livingStatus'] === '1' && remark.length > 0)) { 98 | videos.push({ 99 | vod_id: vid == ''?name:vid, 100 | vod_name: name, 101 | vod_pic: pic, 102 | vod_remarks: remark 103 | }); 104 | } 105 | }; 106 | return JSON.stringify({ 107 | list: videos, 108 | page: 1, 109 | pagecount: 1, 110 | limit: 0, 111 | total: videos.length 112 | }); 113 | } 114 | 115 | async function detail(id) { 116 | try { 117 | if(id.indexOf('http') < 0) { 118 | return '{}'; 119 | } 120 | let url = id + '-url'; 121 | const data = JSON.parse(await get(url)).links; 122 | let playUrls = []; 123 | data.forEach(item => { 124 | let name = item['name']; 125 | let playUrl = item['url']; 126 | playUrls.push(name + '$' + playUrl); 127 | }); 128 | const video = { 129 | vod_id: id, 130 | vod_play_from: 'Leospring', 131 | vod_play_url: playUrls.join('#') 132 | }; 133 | const list = [video]; 134 | const result = { list }; 135 | return JSON.stringify(result); 136 | } catch (e) { 137 | //console.log('err', e); 138 | } 139 | return null; 140 | } 141 | 142 | async function play(flag, id, flags) { 143 | return JSON.stringify(await getPlayObj(id)); 144 | } 145 | 146 | async function getPlayObj(id) { 147 | if(id.indexOf('?url=') > 0) { 148 | return {parse: 0, url: id.split('?url=')[1]} 149 | } 150 | if(id.indexOf('replayer') > 0) { 151 | let url = 'https://dszbok.com/prod-api/match/detail?mid=' + id.split('id=')[1] + '&pid=7&langtype=vi&zoneld=Asia/Shanghai'; 152 | let playUrl = JSON.parse(await get(url)).data.matchinfo.live_urls[0].url; 153 | return {parse: 0, url: playUrl} 154 | } 155 | if (id.indexOf('live.jpyex.com/player') > 0) { 156 | let url = id.replace('player/play.html', 'api/index/live'); 157 | let playUrl = Object.values(JSON.parse(await get(url)).detail.play_url)[0].pCode.m3u8; 158 | return {parse: 0, url: playUrl} 159 | } 160 | if(id.indexOf('sportsteam1234') > 0) { 161 | let playUrl = await parseSportSteam1234(id); 162 | let parse = 0; 163 | if (!playUrl.startsWith('http')) { 164 | playUrl = id; 165 | parse = 1; 166 | } 167 | return { 168 | parse: parse, 169 | url: playUrl, 170 | header: { 171 | 'User-Agent': headers['User-Agent'], 172 | 'Referer': 'http://play.sportsteam1234.com/', 173 | 'Accept': '*/*' 174 | } 175 | } 176 | } 177 | if(id.indexOf('play.926.tv') > 0) { 178 | let playUrl = await parse926Tv(id); 179 | return { 180 | parse: 0, 181 | url: playUrl, 182 | header: { 183 | 'User-Agent': headers['User-Agent'], 184 | 'Referer': 'http://play.926.tv/', 185 | 'Accept': '*/*' 186 | } 187 | } 188 | } 189 | return {parse: 1, url: id,}; 190 | } 191 | 192 | async function parseSportSteam1234(url) { 193 | if (url.indexOf('gm.php') > 0 || url.indexOf('kbm.php') > 0) { 194 | url = url.replace('gm.php', 'kbm.php'); 195 | const html = await get(url); 196 | const $ = load(html); 197 | for(const n of $('script')) { 198 | const text = $(n).text(); 199 | if(text.indexOf('encryptedBase64Str') > 0) { 200 | let str = text.split("var encryptedBase64Str = '")[1].split("';")[0]; 201 | return decodeURIComponent(aesDecode(str)); 202 | } 203 | } 204 | } 205 | return ''; 206 | } 207 | 208 | async function parse926Tv(url) { 209 | const html = await get(url); 210 | const $ = load(html); 211 | let str = $('div#a1 > span').attr('no-zw-zxx'); 212 | str = base64Decode(decode926Tv(str)); 213 | str = 'http:' + decodeURIComponent(decode926Tv(str)); 214 | return str; 215 | } 216 | 217 | function decode926Tv(str){ 218 | var arr = []; 219 | for(var i=0;i li'); 50 | let videos = _.map(items, (item) => { 51 | const it = $(item).find('a:first')[0]; 52 | const remarks = $($(item).find('span.pic-text text-right')[0]).text().trim(); 53 | return { 54 | vod_id: it.attribs.href.replace(/.*?\/voddetail\/(.*).html/g, '$1'), 55 | vod_name: it.attribs.title, 56 | vod_pic: it.attribs['data-original'], 57 | vod_remarks: remarks || '', 58 | }; 59 | }); 60 | const hasMore = $('ul.myui-page > li > a:contains(下一页)').length > 0; 61 | const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg); 62 | return JSON.stringify({ 63 | page: parseInt(pg), 64 | pagecount: pgCount, 65 | limit: 24, 66 | total: 24 * pgCount, 67 | list: videos, 68 | }); 69 | } 70 | 71 | async function detail(id) { 72 | var html = await request( HOST + '/voddetail/' + id + '.html'); 73 | var $ = load(html); 74 | var vod = { 75 | vod_id: id, 76 | vod_name: $('h1:first').text().trim(), 77 | vod_type: $('.stui-content__detail p:first a').text(), 78 | vod_actor: $('.stui-content__detail p:nth-child(3)').text().replace('主演:',''), 79 | vod_pic: $('.stui-content__thumb img:first').attr('data-original'), 80 | vod_remarks : $('.stui-content__detail p:nth-child(5)').text() || '', 81 | vod_content: $('span.detail-content').text().trim(), 82 | }; 83 | var playMap = {}; 84 | var tabs = $('ul.nav-tabs > li > a[data-toggle*=tab]'); 85 | var playlists = $('ul.myui-content__list'); 86 | _.each(tabs, (tab, i) => { 87 | var from = tab.children[0].data; 88 | var list = playlists[i]; 89 | list = $(list).find('a'); 90 | _.each(list, (it) => { 91 | var title = it.children[0].data; 92 | var playUrl = it.attribs.href.replace(/\/vodplay\/(.*).html/g, '$1'); 93 | if (title.length == 0) title = it.children[0].data.trim(); 94 | if (!playMap.hasOwnProperty(from)) { 95 | playMap[from] = []; 96 | } 97 | playMap[from].push( title + '$' + playUrl); 98 | }); 99 | }); 100 | vod.vod_play_from = _.keys(playMap).join('$$$'); 101 | var urls = _.values(playMap); 102 | var vod_play_url = _.map(urls, (urlist) => { 103 | return urlist.join('#'); 104 | }); 105 | vod.vod_play_url = vod_play_url.join('$$$'); 106 | return JSON.stringify({ 107 | list: [vod], 108 | }); 109 | } 110 | async function play(flag, id, flags) { 111 | const link = HOST + '/vodplay/' + id + '.html'; 112 | const html = await request(link); 113 | const $ = load(html); 114 | const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=','')); 115 | const playurl = js.url; 116 | const playUrl = unescape(playurl); 117 | return JSON.stringify({ 118 | parse: 0, 119 | url: playUrl, 120 | }); 121 | } 122 | 123 | async function search(wd, quick) { 124 | let data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&wd=' + wd)).list; 125 | let videos = []; 126 | for (const vod of data) { 127 | videos.push({ 128 | vod_id: vod.id, 129 | vod_name: vod.name, 130 | vod_pic: vod.pic, 131 | vod_remarks: '', 132 | }); 133 | } 134 | return JSON.stringify({ 135 | list: videos, 136 | }); 137 | } 138 | 139 | export function __jsEvalReturn() { 140 | return { 141 | init: init, 142 | home: home, 143 | homeVod: homeVod, 144 | category: category, 145 | detail: detail, 146 | play: play, 147 | search: search, 148 | }; 149 | } --------------------------------------------------------------------------------