mirror of
https://github.com/lxhfans/cat.git
synced 2025-10-25 18:32:40 +00:00
Compare commits
3 Commits
288d1a14b1
...
69f5043698
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69f5043698 | ||
|
|
4daf531412 | ||
|
|
09f4f5cab1 |
276
js/alist_open.js
276
js/alist_open.js
File diff suppressed because one or more lines are too long
16
js/app.js
16
js/app.js
@@ -1,8 +1,8 @@
|
||||
function __jsEvalReturn() {
|
||||
return {
|
||||
isVideoFormat: function (url) {
|
||||
return !0;
|
||||
},
|
||||
};
|
||||
}
|
||||
export { __jsEvalReturn };
|
||||
function __jsEvalReturn() {
|
||||
return {
|
||||
isVideoFormat: function (url) {
|
||||
return !0;
|
||||
},
|
||||
};
|
||||
}
|
||||
export { __jsEvalReturn };
|
||||
|
||||
895
js/appysv2.js
895
js/appysv2.js
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
import { _ } from 'assets://js/lib/cat.js';
|
||||
import { _ } from './lib/cat.js';
|
||||
|
||||
let key = 'bookkan';
|
||||
let url = 'https://api.bookan.com.cn';
|
||||
@@ -65,7 +65,7 @@ async function detail(id) {
|
||||
|
||||
let book = {
|
||||
book_id: id,
|
||||
book_type: '',
|
||||
type_name: '',
|
||||
book_year: '',
|
||||
book_area: '',
|
||||
book_remarks: '',
|
||||
|
||||
@@ -1 +1 @@
|
||||
//bbQ0FUT1BTEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoaY2F0ZWdvcmllc09iagZvbmUIY2F0ZQJlCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lDnR5cGVfaWQQdHlwZV9waWQIcHVzaBJzdHJpbmdpZnkOZmlsdGVycw5jb25zb2xlCmRlYnVnBHt9BnRpZARwZwxleHRlbmQMdmlkZW9zID9hYz12aWRlb2xpc3QmdD0IJnBnPQhsaXN0DHZvZF9pZBB2b2RfbmFtZQ52b2RfcGljFnZvZF9yZW1hcmtzEHBhcnNlSW50CHBhZ2UScGFnZWNvdW50CmxpbWl0CnRvdGFsBGlkBnZvZCQ/YWM9dmlkZW9saXN0Jmlkcz0Qdm9kX3llYXIQdm9kX2FyZWESdm9kX2FjdG9yGHZvZF9kaXJlY3RvchZ2b2RfY29udGVudBp2b2RfcGxheV9mcm9tGHZvZF9wbGF5X3VybAhmbGFnBHdkCnF1aWNrHD9hYz1kZXRhaWwmd2Q9D6QDAaYDAQAPqAMAAQCqAwAOAAYBoAEAAAABEApLAKoDAAysAwAJrgMBCbADAgmyAwMJtAMECbYDBQG4AwYBugMHAbwDCAG+AwkBwAMKAcIDCwHEAwwBxgMNAagDDgEI6DS+AF8GAL4BXwcAvgJfCAC+A18JAL4EXwoAvgVfCwC+Bl8M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wQRiAwBCAQEAAAtiBABBDgEAAEwOAQAAYgQAQQ8BAABMDwEAAGIEAEEQAQAATBABAABiBABBEQEAAEwRAQAAJAEADoAA6LoOgziYAAAAQgIBAAALOBIBAABiAgBBEwEAAO1MEwEAAGICAEEUAQAATBQBAABiAwBMDQEAACQBAC6kA40BEj9dZyZYF1MwRERERBciOmJEKw5DBgGoAwAAAAIHADIAtgMGALwDCQC+AwoAwAMLAMIDDADEAw0AxgMOAAvbTNsAAADcTN4AAADdTN8AAADeTOAAAABeBABM4QAAAF4FAEziAAAAXgYATOMAAAAopAOjAQkDCCEhISErKys=
|
||||
//bbQ0FUT1BNEGNhaWppLmpzLGFzc2V0czovL2pzL2xpYi9jYXQuanMcX19qc0V2YWxSZXR1cm4CXw5zaXRlS2V5EHNpdGVUeXBlBFVBDmJhc2VVcmwUY2F0ZWdvcmllcwhpbml0EmdldEhlYWRlchJnZXRTdHJpbmcIaG9tZQ5ob21lVm9kEGNhdGVnb3J5DGRldGFpbAhwbGF5DHNlYXJjaN4BTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwOS4wLjAuMCBTYWZhcmkvNTM3LjM2BmNmZwhza2V5CnN0eXBlBmV4dAZ1cmwMaGVhZGVyFFVzZXItQWdlbnQGcmVzBnJlcQ5oZWFkZXJzDmNvbnRlbnQMZmlsdGVyDHJlcVVybA5qc29uU3RyCGRhdGEWY2xhc3Nlc3NBcnIOY2xhc3NlcxJmaWx0ZXJPYmoGb25lCnBhcnNlDmlzRW1wdHkQaW5jbHVkZXMSdHlwZV9uYW1lCHB1c2gOdHlwZV9pZBJzdHJpbmdpZnkOZmlsdGVycwR7fQZ0aWQEcGcMZXh0ZW5kDHZpZGVvcyA/YWM9dmlkZW9saXN0JnQ9CCZwZz0IbGlzdAx2b2RfaWQQdm9kX25hbWUOdm9kX3BpYxZ2b2RfcmVtYXJrcxBwYXJzZUludAhwYWdlEnBhZ2Vjb3VudApsaW1pdAp0b3RhbARpZAZ2b2QkP2FjPXZpZGVvbGlzdCZpZHM9EHZvZF95ZWFyEHZvZF9hcmVhEnZvZF9hY3Rvchh2b2RfZGlyZWN0b3IWdm9kX2NvbnRlbnQadm9kX3BsYXlfZnJvbRh2b2RfcGxheV91cmwIZmxhZwR3ZApxdWljaxw/YWM9ZGV0YWlsJndkPQ+kAwGmAwEAD6gDAAEAqgMADgAGAaABAAAAARAKSwCqAwAMrAMACa4DAQmwAwIJsgMDCbQDBAm2AwUBuAMGAboDBwG8AwgBvgMJAcADCgHCAwsBxAMMAcYDDQGoAw4BCOg0vgBfBgC+AV8HAL4CXwgAvgNfCQC+BF8KAL4FXwsAvgZfDAC+B18NAL4IXw4AvglfDwApv+Cz4QTkAAAA4r9fBAAmAABfBQAppAMBDAEA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
|
||||
@@ -15,20 +15,34 @@
|
||||
"indexs": 1,
|
||||
"api": "douban_open.js"
|
||||
},
|
||||
{
|
||||
"key": "wogg",
|
||||
"name": "🎬️乐享汇fans丨玩偶①",
|
||||
"type": 3,
|
||||
"api": "wogg_open.js",
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "wobg",
|
||||
"name": "🎬️乐享汇fans丨玩偶②",
|
||||
"type": 4,
|
||||
"api": "wobg_open.js",
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "wogg1",
|
||||
"name": "🎬️乐享汇fans丨玩偶①",
|
||||
"type": 3,
|
||||
"api": "wogg_open.js",
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "wogg2",
|
||||
"name": "🎬️乐享汇fans丨玩偶②",
|
||||
"type": 3,
|
||||
"api": "wogg2_open.js",
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "wolb",
|
||||
"name": "🎬️乐享汇fans丨表哥①",
|
||||
"type": 3,
|
||||
"api": "wolb_open.js",
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "wobg1",
|
||||
"name": "🎬️乐享汇fans丨表哥②",
|
||||
"type": 3,
|
||||
"api": "wobg_open.js",
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "kkys",
|
||||
"name": "🎬️乐享汇fans丨快看",
|
||||
@@ -46,7 +60,43 @@
|
||||
"name": "🎬️乐享汇fans丨厂长",
|
||||
"type": 3,
|
||||
"api": "czzy_open.js"
|
||||
},
|
||||
},
|
||||
{
|
||||
"key": "ggys",
|
||||
"name": "🎬️乐享汇fans丨高光",
|
||||
"type": 3,
|
||||
"api": "ggys_open.js"
|
||||
},
|
||||
{
|
||||
"key": "tutu",
|
||||
"name": "🎬️乐享汇fans丨图图",
|
||||
"type": 3,
|
||||
"api": "tutu_open.js"
|
||||
},
|
||||
{
|
||||
"key": "sc1080",
|
||||
"name": "🎬️乐享汇fans丨圣城",
|
||||
"type": 3,
|
||||
"api": "sc1080_open.js"
|
||||
},
|
||||
{
|
||||
"key": "ys996",
|
||||
"name": "🎬️乐享汇fans丨九六",
|
||||
"type": 3,
|
||||
"api": "ys996_open.js"
|
||||
},
|
||||
{
|
||||
"key": "ikanbot",
|
||||
"name": "🎬️乐享汇fans丨爱看",
|
||||
"type": 3,
|
||||
"api": "ikanbot_open.js"
|
||||
},
|
||||
{
|
||||
"key": "nkvod",
|
||||
"name": "🎬️乐享汇fans丨耐看",
|
||||
"type": 3,
|
||||
"api": "nkvod_open.js"
|
||||
},
|
||||
{
|
||||
"key": "ikanbot",
|
||||
"name": "🎬️乐享汇fans丨爱看",
|
||||
@@ -718,7 +768,7 @@
|
||||
"name": "🍭乐享汇fans丨易搜",
|
||||
"type": 3,
|
||||
"api": "yiso_open.js",
|
||||
"ext": "阿狸token码$$$易搜账号cookie"
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "云盘4K",
|
||||
@@ -732,14 +782,14 @@
|
||||
"name": "🍭乐享汇fans丨资源",
|
||||
"type": 3,
|
||||
"api": "zhaozy_open.js",
|
||||
"ext": "阿狸token码$$$找资源账号$$$找资源密码"
|
||||
"ext": "阿狸token码"
|
||||
},
|
||||
{
|
||||
"key": "夸克趣盘搜",
|
||||
"name": "🍭乐享汇fans丨夸克",
|
||||
"type": 3,
|
||||
"api": "funletu_open.js",
|
||||
"ext": "夸克账号cookie"
|
||||
"ext": "夸克cookie"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
239
js/ddys_open.js
Normal file
239
js/ddys_open.js
Normal file
@@ -0,0 +1,239 @@
|
||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
const key = 'ddys';
|
||||
let DOMAIN = 'ddys.pro';
|
||||
let HOST = 'https://' + DOMAIN;
|
||||
let PLAY_HOST = 'https://v.' + DOMAIN;
|
||||
const FROM_DIRECT = '直连';
|
||||
const FROM_PARSE = '解析';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
|
||||
|
||||
async function request(reqUrl) {
|
||||
const res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'Host': HOST.match(/.*\:\/\/(.*)/)[1],
|
||||
'User-Agent': UA,
|
||||
'Referer': HOST,
|
||||
'Accept-Encoding': 'gzip',
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
if (cfg.hasOwnProperty('ext')) {
|
||||
if (cfg.ext.hasOwnProperty('domain')) {
|
||||
DOMAIN = cfg.ext.domain;
|
||||
HOST = 'https://' + DOMAIN;
|
||||
PLAY_HOST = 'https://v.' + DOMAIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{'type_id':'class','type_name':'类型'},{'type_id':'movie','type_name':'电影'},{'type_id':'airing','type_name':'热映中'},{'type_id':'drama','type_name':'剧集'},{'type_id':'anime','type_name':'动画'},{'type_id':'documentary','type_name':'纪录片'},{'type_id':'variety','type_name':'综艺'}];
|
||||
const filterObj = {
|
||||
'class':[{'key':'tag','name':'标签','init':'recommend','value':[{'n':'站长推荐','v':'recommend'},{'n':'动作','v':'action'},{'n':'喜剧','v':'comedy'},{'n':'爱情','v':'romance'},{'n':'科幻','v':'sci-fi'},{'n':'犯罪','v':'crime'},{'n':'悬疑','v':'mystery'},{'n':'恐怖','v':'horror'}]}],
|
||||
'movie':[{'key':'type','name':'分类','init':'','value':[{'n':'全部','v':''},{'n':'欧美电影','v':'western-movie'},{'n':'日韩电影','v':'asian-movie'},{'n':'华语电影','v':'chinese-movie'}]}],
|
||||
'drama':[{'key':'type','name':'分类','init':'','value':[{'n':'全部','v':''},{'n':'欧美剧','v':'western-drama'},{'n':'日剧','v':'jp-drama'},{'n':'韩剧','v':'kr-drama'},{'n':'华语剧','v':'cn-drama'},{'n':'其他地区','v':'other'}]}],
|
||||
'anime':[{'key':'type','name':'分类','init':'','value':[{'n':'全部','v':''},{'n':'本季新番','v':'new-bangumi'}]}]
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let path = '';
|
||||
if (extend.tag) {
|
||||
path = '/tag/' + extend.tag;
|
||||
} else {
|
||||
path = '/category/' + tid;
|
||||
if (!_.isEmpty(extend.type)) {
|
||||
path += '/' + extend.type;
|
||||
}
|
||||
}
|
||||
let page = '';
|
||||
if (pg > 1) {
|
||||
page = 'page/' + pg + '/';
|
||||
}
|
||||
const link = HOST + path + '/' + page;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('.post-box-list article');
|
||||
const videos = _.map(items, (item) => {
|
||||
const $item = $(item);
|
||||
const title = $item.find('.post-box-title a');
|
||||
const name = title.text();
|
||||
const url = title.attr('href');
|
||||
const image = $item.find('.post-box-image').attr('style').replace(/.*url\((.*)\);/g, '$1');
|
||||
const remarks = $item.find('.post-box-meta').text();
|
||||
return {
|
||||
vod_id: url.replace(/.*\/\/.*\/(.*)\//g, '$1'),
|
||||
vod_name: name,
|
||||
vod_pic: image,
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const limit = 28;
|
||||
const hasMore = $('nav.navigation a.next').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(HOST + '/' + id + '/');
|
||||
const $ = load(html);
|
||||
const abstract = $('div.abstract')[0].children;
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1.post-title').text(),
|
||||
vod_type: findAbstractText(abstract, '类型:'),
|
||||
vod_year: findAbstractText(abstract, '年份:'),
|
||||
vod_area: findAbstractText(abstract, '制片国家/地区:'),
|
||||
vod_director: findAbstractText(abstract, '导演:'),
|
||||
vod_actor: findAbstractText(abstract, '演员:'),
|
||||
vod_pic: $('div.post img:first').attr('data-cfsrc'),
|
||||
vod_remarks : $('span.cat-links').text().trim(),
|
||||
vod_content: findAbstractText(abstract, '简介:'),
|
||||
};
|
||||
const playMap = {};
|
||||
parseAndUpdateUrls($, playMap);
|
||||
const links = $('div.page-links a');
|
||||
if (!_.isEmpty(links)) {
|
||||
const promiseList = _.map(links, (link) => {
|
||||
const url = $(link).attr('href');
|
||||
return request(url);
|
||||
});
|
||||
const respList = await Promise.all(promiseList);
|
||||
_.each(respList, (resp) => {
|
||||
try {
|
||||
const $ = load(resp);
|
||||
parseAndUpdateUrls($, playMap);
|
||||
} catch(e) {
|
||||
}
|
||||
});
|
||||
}
|
||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||
const urls = _.values(playMap);
|
||||
const vod_play_url = _.map(urls, (urlist) => {
|
||||
return urlist.join('#');
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
function findAbstractText(children, keyword) {
|
||||
for (const item of children) {
|
||||
if (item.type == 'text' && item.data && item.data.startsWith(keyword)) {
|
||||
return item.data.substring(keyword.length).trim();
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function parseAndUpdateUrls($, playMap) {
|
||||
const trackText = $('script.wp-playlist-script').text();
|
||||
const tracks = JSON.parse(trackText).tracks;
|
||||
_.each(tracks, (track) => {
|
||||
const title = track.caption;
|
||||
const directUrl = track.src0;
|
||||
if (!playMap.hasOwnProperty(FROM_DIRECT)) {
|
||||
playMap[FROM_DIRECT] = [];
|
||||
}
|
||||
playMap[FROM_DIRECT].push(title + '$' + directUrl);
|
||||
if (!_.isEmpty(track.src1)) {
|
||||
if (!playMap.hasOwnProperty(FROM_PARSE)) {
|
||||
playMap[FROM_PARSE] = [];
|
||||
}
|
||||
playMap[FROM_PARSE].push(title + '$' + track.src1);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let playUrl;
|
||||
if (flag == FROM_PARSE) {
|
||||
const resp = await request(HOST + '/getvddr2/video?id=' + id + '&type=json');
|
||||
playUrl = JSON.parse(resp).url;
|
||||
} else {
|
||||
playUrl = PLAY_HOST + id;
|
||||
}
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
'Referer': HOST,
|
||||
'Icy-MetaData': '1',
|
||||
'Sec-Fetch-Site': 'same-site',
|
||||
'Sec-Fetch-Mode': 'cors',
|
||||
'Sec-Fetch-Dest': 'video',
|
||||
};
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
header: headers,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let page = '';
|
||||
if (pg > 1) {
|
||||
page = '/page/' + pg;
|
||||
}
|
||||
const html = await request(HOST + page + '/?s=' + wd + '&post_type=post');
|
||||
const $ = load(html);
|
||||
const list = $('div.post-content');
|
||||
const videos = _.map(list, (item) => {
|
||||
const $item = $(item);
|
||||
const title = $item.find('.post-title a');
|
||||
const name = title.text();
|
||||
const url = title.attr('href');
|
||||
const remarks = $item.find('.cat-links').text();
|
||||
return {
|
||||
vod_id: url.replace(/.*\/\/.*\/(.*)\//g, '$1'),
|
||||
vod_name: name,
|
||||
vod_pic: HOST + '/android-chrome-512x512.png',
|
||||
vod_remarks: remarks,
|
||||
};
|
||||
});
|
||||
const limit = 100;
|
||||
const hasMore = $('nav.navigation a.next').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -22,7 +22,7 @@ async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
222
js/ggys_open.js
Normal file
222
js/ggys_open.js
Normal file
@@ -0,0 +1,222 @@
|
||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
const key = 'ggys';
|
||||
const HOST = 'https://ggys.me';
|
||||
const TYPE_MOVIE = 'movie';
|
||||
const TYPE_TVSHOW = 'tv-show';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36';
|
||||
|
||||
async function request(reqUrl, method, data) {
|
||||
const res = await req(reqUrl, {
|
||||
method: method || 'get',
|
||||
headers: {
|
||||
'User-Agent': UA,
|
||||
'Referer': HOST,
|
||||
},
|
||||
data: data,
|
||||
postType: method === 'post' ? 'form' : '',
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
if (cfg.hasOwnProperty('ext')) {
|
||||
if (cfg.ext.hasOwnProperty('host')) {
|
||||
HOST = cfg.ext.host;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{'type_id':'movies','type_name':'电影'},{'type_id':'tv-shows','type_name':'剧集'}];
|
||||
const filterObj = {
|
||||
'movies':[{'key':'class','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'欧美电影','v':'tag/欧美电影'},{'n':'华语电影','v':'tag/华语电影'},{'n':'日韩电影','v':'tag/日韩电影'},{'n':'其他地区','v':'tag/其他地区'},{'n':'冒险','v':'genre/冒险'},{'n':'剧情','v':'genre/剧情'},{'n':'动作','v':'genre/动作'},{'n':'动画','v':'genre/动画'},{'n':'历史','v':'genre/历史'},{'n':'喜剧','v':'genre/喜剧'},{'n':'奇幻','v':'genre/奇幻'},{'n':'家庭','v':'genre/家庭'},{'n':'恐怖','v':'genre/恐怖'},{'n':'悬疑','v':'genre/悬疑'},{'n':'惊悚','v':'genre/惊悚'},{'n':'战争','v':'genre/战争'},{'n':'爱情','v':'genre/爱情'},{'n':'犯罪','v':'genre/犯罪'},{'n':'科幻','v':'genre/科幻'},{'n':'纪录','v':'genre/纪录'},{'n':'音乐','v':'genre/音乐'}]}],
|
||||
'tv-shows':[{'key':'class','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'欧美剧','v':'tag/欧美剧'},{'n':'日韩剧','v':'tag/日韩剧'},{'n':'国产剧','v':'tag/国产剧'},{'n':'其他地区','v':'tag/其他地区'},{'n':'剧情','v':'genre/剧情'},{'n':'动作','v':'genre/动作'},{'n':'动画','v':'genre/动画'},{'n':'喜剧','v':'genre/喜剧'},{'n':'家庭','v':'genre/家庭'},{'n':'悬疑','v':'genre/悬疑'},{'n':'犯罪','v':'genre/犯罪'},{'n':'科幻','v':'genre/科幻'},{'n':'西部','v':'genre/西部'}]}],
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let path = '';
|
||||
const prefixMap = {
|
||||
'movies': TYPE_MOVIE,
|
||||
'tv-shows': TYPE_TVSHOW,
|
||||
}
|
||||
const prefix = prefixMap[tid];
|
||||
if (extend.class) {
|
||||
path = '/' + prefix + '-' + extend.class;
|
||||
} else {
|
||||
path = '/' + tid;
|
||||
}
|
||||
let page = '';
|
||||
if (pg > 1) {
|
||||
page = 'page/' + pg + '/';
|
||||
}
|
||||
const link = HOST + path + '/' + page;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const videos = [];
|
||||
parseVideoList($, prefix, false, videos);
|
||||
const limit = 20;
|
||||
const hasMore = $('.page-numbers a.next').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function parseVideoList($, prefix, imgSrc, videos) {
|
||||
const items = $('.' + prefix);
|
||||
_.each(items, (item) => {
|
||||
const $item = $(item);
|
||||
const title = $item.find('.' + prefix + '__title:first').text();
|
||||
const url = $item.find('.' + prefix + '__actions a:first').attr('href');
|
||||
const imgAttr = imgSrc ? 'src' : 'data-lazy-src';
|
||||
const image = $item.find('.' + prefix + '__poster img:first').attr(imgAttr);
|
||||
const remarks = $item.find('.' + prefix + '__meta span:last').text();
|
||||
if (!url) return;
|
||||
const videoItem = {
|
||||
vod_id: decodeURIComponent(url.replace(/.*\/\/.*\/(.*\/.*)\//g, '$1')),
|
||||
vod_name: title,
|
||||
vod_pic: image,
|
||||
vod_remarks: remarks,
|
||||
};
|
||||
videos.push(videoItem);
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const isMovieType = id.startsWith(TYPE_MOVIE);
|
||||
const html = await request(HOST + '/' + id + '/');
|
||||
const $ = load(html);
|
||||
const prefix = isMovieType ? TYPE_MOVIE : TYPE_TVSHOW;
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('.' + prefix + '_title').text(),
|
||||
vod_actor: $('.' + prefix + '-casts').text().trim().substring(3).replace(/\s+\/\s+/g, '/'),
|
||||
vod_pic: $('.' + prefix + '__poster img:first').attr('data-lazy-src'),
|
||||
vod_remarks: $('.' + prefix + '__meta span:last').text(),
|
||||
};
|
||||
if (isMovieType) {
|
||||
vod.vod_type = $('.' + prefix + '__meta span:last').text();
|
||||
vod.vod_year = $('.' + prefix + '__meta span:first').text();
|
||||
vod.vod_content = $('.movie__description').text();
|
||||
} else {
|
||||
vod.vod_type = $('.' + prefix + '__meta span:first').text();
|
||||
vod.vod_content = $('.tv-show__info--body').text();
|
||||
}
|
||||
const from = 'ggys';
|
||||
const playMap = {};
|
||||
if (isMovieType) {
|
||||
const playId = $('.ggys-video-player').attr('data-source-id');
|
||||
const playCfg = playId + '@' + TYPE_MOVIE;
|
||||
playMap[from] = [ '全$' + playCfg ];
|
||||
} else {
|
||||
const tabs = $('.tv_show__season-tabs-wrap .nav-item');
|
||||
const episodes = $('.episodes');
|
||||
_.each(tabs, (tab, i) => {
|
||||
const titlePrefix = $(tab).text().trim();
|
||||
const episodeList = $(episodes[i]).find('.episode__body');
|
||||
_.each(episodeList, (episode) => {
|
||||
const $episode = $(episode);
|
||||
const title = titlePrefix + ' ' + $episode.text().trim();
|
||||
const url = $episode.find('a').attr('href');
|
||||
const playCfg = url + '@' + TYPE_TVSHOW;
|
||||
if (!playMap.hasOwnProperty(from)) {
|
||||
playMap[from] = [];
|
||||
}
|
||||
playMap[from].push(title + '$' + playCfg);
|
||||
});
|
||||
});
|
||||
}
|
||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||
const urls = _.values(playMap);
|
||||
const vod_play_url = _.map(urls, (urlist) => {
|
||||
return urlist.join('#');
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const playCfg = id.split('@');
|
||||
const playType = playCfg[1];
|
||||
let playId = playCfg[0];
|
||||
let playUrl;
|
||||
if (playType == TYPE_TVSHOW) {
|
||||
const html = await request(playId);
|
||||
const $ = load(html);
|
||||
playId = $('.ggys-video-player').attr('data-source-id');
|
||||
}
|
||||
const param = {
|
||||
video_id: playId,
|
||||
};
|
||||
const resp = await request(HOST + '/wp-json/get_addr/v1/get_video_url', 'post', param);
|
||||
playUrl = JSON.parse(resp).video_url;
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
'Referer': HOST,
|
||||
};
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
header: headers,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let page = '';
|
||||
if (pg > 1) {
|
||||
page = '/page/' + pg;
|
||||
}
|
||||
const url = HOST + '/search/' + wd + page + '/?post_type=';
|
||||
const videos = [];
|
||||
let html = await request(url + 'movie');
|
||||
let $ = load(html);
|
||||
parseVideoList($, TYPE_MOVIE, true, videos);
|
||||
const hasMoreMovie = $('.page-numbers a.next').length > 0;
|
||||
html = await request(url + 'tv_show');
|
||||
$ = load(html);
|
||||
parseVideoList($, TYPE_TVSHOW, true, videos);
|
||||
const hasMoreTVShow = $('.page-numbers a.next').length > 0;
|
||||
const limit = 40;
|
||||
const hasMore = hasMoreMovie || hasMoreTVShow;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
let key = 'ikanbot';
|
||||
let url = 'https://www.aikanbot.com';
|
||||
let url = 'https://www.ikanbot.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
@@ -117,7 +117,7 @@ async function detail(id) {
|
||||
vod_actor: $(detail).find('h3:nth-child(5)').text(),
|
||||
};
|
||||
const token = getToken($);
|
||||
const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=2&token=' + token, {
|
||||
const res = await req(url + '/api/getResN?videoId=' + id.substring(id.lastIndexOf('/') + 1) + '&mtype=1&token=' + token, {
|
||||
headers: {
|
||||
Referer: 'play',
|
||||
'User-Agent': UA,
|
||||
@@ -275,4 +275,4 @@ export function __jsEvalReturn() {
|
||||
proxy: proxy,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
}
|
||||
207
js/nkvod_open.js
Normal file
207
js/nkvod_open.js
Normal file
@@ -0,0 +1,207 @@
|
||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
let key = 'nkvod';
|
||||
let HOST = 'https://nkvod.pro';
|
||||
let parseMap = {};
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl) {
|
||||
let res = await req(reqUrl, {
|
||||
method: 'get',
|
||||
headers: {
|
||||
'User-Agent': UA,
|
||||
'Referer': HOST
|
||||
},
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
await initParseMap();
|
||||
}
|
||||
|
||||
async function initParseMap() {
|
||||
const date = new Date();
|
||||
const t = '' + date.getFullYear() + (date.getMonth() + 1) + date.getDate();
|
||||
const js = await request(HOST + '/static/js/playerconfig.js?t=' + t);
|
||||
try {
|
||||
const jsEval = js + '\nMacPlayerConfig';
|
||||
const playerList = eval(jsEval).player_list;
|
||||
const players = _.values(playerList);
|
||||
_.each(players, (item) => {
|
||||
if (!item.ps || item.ps == '0') return;
|
||||
if (_.isEmpty(item.parse)) return;
|
||||
parseMap[item.show] = item.parse;
|
||||
});
|
||||
} catch(e) {
|
||||
}
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const classes = [{'type_id':'1','type_name':'电影'},{'type_id':'2','type_name':'电视剧'},{'type_id':'3','type_name':'综艺'},{'type_id':'4','type_name':'动漫'}];
|
||||
const filterObj = {
|
||||
'1':[{'key':'cateId','name':'类型','init':'1','value':[{'n':'全部','v':'1'},{'n':'动作片','v':'6'},{'n':'喜剧片','v':'7'},{'n':'爱情片','v':'8'},{'n':'科幻片','v':'9'},{'n':'恐怖片','v':'10'},{'n':'剧情片','v':'11'},{'n':'战争片','v':'12'}]},{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'2':[{'key':'cateId','name':'类型','init':'2','value':[{'n':'全部','v':'2'},{'n':'国产剧','v':'13'},{'n':'港台剧','v':'14'},{'n':'日韩剧','v':'15'},{'n':'欧美剧','v':'16'},{'n':'其他剧','v':'20'}]},{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'3':[{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'4':[{'key':'year','name':'年代','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}]
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const link = HOST + '/show/' + (extend.cateId || tid) + '--' + (extend.by || '') + '-' + (extend.class || '') + '--' + (extend.letter || '') + '---' + pg + '---' + (extend.year || '') + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('a.module-item');
|
||||
const videos = _.map(items, (item) => {
|
||||
const $item = $(item);
|
||||
const a = $item;
|
||||
const img = $item.find('img:first');
|
||||
const remarks = $item.find('div.module-item-note').text().trim();
|
||||
return {
|
||||
vod_id: a.attr('href').replace(/.*?\/detail\/(.*).html/g, '$1'),
|
||||
vod_name: a.attr('title'),
|
||||
vod_pic: img.attr('data-original'),
|
||||
vod_remarks: remarks,
|
||||
};
|
||||
});
|
||||
const limit = 72;
|
||||
const hasMore = $('div#page > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(HOST + '/detail/' + id + '.html');
|
||||
const $ = load(html);
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('h1:first').text().trim(),
|
||||
vod_type: $('.module-info-tag a:eq(2)').text().trim(),
|
||||
vod_year: $('.module-info-tag a:eq(0)').text().trim(),
|
||||
vod_area: $('.module-info-tag a:eq(1)').text().trim(),
|
||||
vod_actor: $('.module-info-item:contains(主演:)').text().trim().substring(3).replace(/\/$/, ''),
|
||||
vod_director: $('.module-info-item:contains(导演:)').text().trim().substring(3).replace(/\/$/, ''),
|
||||
vod_pic: $('.module-info-poster img:first').attr('data-original'),
|
||||
vod_remarks : $('.module-info-item:contains(备注:)').text(),
|
||||
vod_content: $('.module-info-introduction-content').text().trim(),
|
||||
};
|
||||
const playMap = {};
|
||||
const tabs = $('.module-tab .module-tab-item span');
|
||||
const playlists = $('.module-play-list');
|
||||
_.each(tabs, (tab, i) => {
|
||||
const $tab = $(tab);
|
||||
const from = $tab.text().trim();
|
||||
let list = playlists[i];
|
||||
list = $(list).find('a');
|
||||
_.each(list, (it) => {
|
||||
const $it = $(it);
|
||||
let title = $it.find('span').text();
|
||||
const playUrl = $it.attr('href');
|
||||
if (_.isEmpty(title)) title = $it.text();
|
||||
if (!playMap.hasOwnProperty(from)) {
|
||||
playMap[from] = [];
|
||||
}
|
||||
playMap[from].push(title + '$' + playUrl);
|
||||
});
|
||||
});
|
||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||
const urls = _.values(playMap);
|
||||
const vod_play_url = _.map(urls, (urlist) => {
|
||||
return urlist.join('#');
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = HOST + id;
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||
let playUrl = js.url;
|
||||
if (js.encrypt == 1) {
|
||||
playUrl = unescape(playUrl);
|
||||
} else if (js.encrypt == 2) {
|
||||
playUrl = unescape(base64Decode(playUrl));
|
||||
}
|
||||
const parseUrl = parseMap[flag];
|
||||
if (parseUrl) {
|
||||
const reqUrl = parseUrl + playUrl;
|
||||
const parseHtml = await request(reqUrl);
|
||||
const matches = parseHtml.match(/let ConFig = {([\w\W]*)},box/);
|
||||
if (!_.isEmpty(matches)) {
|
||||
const configJson = '{' + matches[1].trim() + '}';
|
||||
const config = JSON.parse(configJson);
|
||||
playUrl = decryptUrl(config);
|
||||
}
|
||||
}
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
header: {
|
||||
'User-Agent': UA,
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function decryptUrl(jsConfig) {
|
||||
const key = Crypto.enc.Utf8.parse('2890' + jsConfig.config.uid + 'tB959C');
|
||||
const iv = Crypto.enc.Utf8.parse('GZ4JgN2BdSqVWJ1z');
|
||||
const mode = Crypto.mode.CBC;
|
||||
const padding = Crypto.pad.Pkcs7;
|
||||
const decrypted = Crypto.AES.decrypt(jsConfig.url, key, {
|
||||
iv: iv,
|
||||
mode: mode,
|
||||
padding: padding
|
||||
});
|
||||
const decryptedUrl = Crypto.enc.Utf8.stringify(decrypted);
|
||||
return decryptedUrl;
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
const data = JSON.parse(await request(HOST + '/index.php/ajax/suggest?mid=1&limit=50&wd=' + wd)).list;
|
||||
const videos = _.map(data, (vod) => {
|
||||
return {
|
||||
vod_id: vod.id,
|
||||
vod_name: vod.name,
|
||||
vod_pic: vod.pic,
|
||||
vod_remarks: '',
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -30,7 +30,7 @@ async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
208
js/sc1080_open.js
Normal file
208
js/sc1080_open.js
Normal file
@@ -0,0 +1,208 @@
|
||||
import { load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
let key = 'sc1080';
|
||||
let HOST = 'https://sc1080.top';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, method, data) {
|
||||
const res = await req(reqUrl, {
|
||||
method: method || 'get',
|
||||
headers: {
|
||||
'User-Agent': UA,
|
||||
'Referer': HOST,
|
||||
},
|
||||
data: data,
|
||||
postType: method === 'post' ? 'form' : '',
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [{'type_id':1,'type_name':'电影'},{'type_id':2,'type_name':'电视剧'},{'type_id':3,'type_name':'综艺'},{'type_id':4,'type_name':'动漫'},{'type_id':5,'type_name':'纪录片'},{'type_id':20,'type_name':'4K片库'},{'type_id':21,'type_name':'短剧片库'}];
|
||||
let filterObj = {
|
||||
'1':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'喜剧','v':'喜剧'},{'n':'爱情','v':'爱情'},{'n':'恐怖','v':'恐怖'},{'n':'动作','v':'动作'},{'n':'科幻','v':'科幻'},{'n':'剧情','v':'剧情'},{'n':'战争','v':'战争'},{'n':'警匪','v':'警匪'},{'n':'犯罪','v':'犯罪'},{'n':'动画','v':'动画'},{'n':'奇幻','v':'奇幻'},{'n':'武侠','v':'武侠'},{'n':'冒险','v':'冒险'},{'n':'枪战','v':'枪战'},{'n':'恐怖','v':'恐怖'},{'n':'悬疑','v':'悬疑'},{'n':'惊悚','v':'惊悚'},{'n':'经典','v':'经典'},{'n':'青春','v':'青春'},{'n':'文艺','v':'文艺'},{'n':'其他微电影','v':'其他微电影'},{'n':'古装','v':'古装'},{'n':'历史','v':'历史'},{'n':'运动','v':'运动'},{'n':'农村','v':'农村'},{'n':'儿童','v':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'大陆','v':'大陆'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'美国','v':'美国'},{'n':'法国','v':'法国'},{'n':'英国','v':'英国'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'德国','v':'德国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'意大利','v':'意大利'},{'n':'西班牙','v':'西班牙'},{'n':'加拿大','v':'加拿大'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'2':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'古装','v':'古装'},{'n':'战争','v':'战争'},{'n':'青春偶像','v':'青春偶像'},{'n':'喜剧','v':'喜剧'},{'n':'家庭','v':'家庭'},{'n':'犯罪','v':'犯罪'},{'n':'动作','v':'动作'},{'n':'奇幻','v':'奇幻'},{'n':'剧情','v':'剧情'},{'n':'历史','v':'历史'},{'n':'经典','v':'经典'},{'n':'乡村','v':'乡村'},{'n':'情景','v':'情景'},{'n':'商战','v':'商战'},{'n':'网剧','v':'网剧'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'英国','v':'英国'},{'n':'马来西亚','v':'马来西亚'},{'n':'加拿大','v':'加拿大'},{'n':'俄罗斯','v':'俄罗斯'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'3':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'选秀','v':'选秀'},{'n':'情感','v':'情感'},{'n':'访谈','v':'访谈'},{'n':'播报','v':'播报'},{'n':'旅游','v':'旅游'},{'n':'音乐','v':'音乐'},{'n':'美食','v':'美食'},{'n':'纪实','v':'纪实'},{'n':'曲艺','v':'曲艺'},{'n':'生活','v':'生活'},{'n':'游戏互动','v':'游戏互动'},{'n':'财经','v':'财经'},{'n':'求职','v':'求职'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'港台','v':'港台'},{'n':'日韩','v':'日韩'},{'n':'欧美','v':'欧美'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'4':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'情感','v':'情感'},{'n':'科幻','v':'科幻'},{'n':'热血','v':'热血'},{'n':'推理','v':'推理'},{'n':'搞笑','v':'搞笑'},{'n':'冒险','v':'冒险'},{'n':'萝莉','v':'萝莉'},{'n':'校园','v':'校园'},{'n':'动作','v':'动作'},{'n':'机战','v':'机战'},{'n':'运动','v':'运动'},{'n':'战争','v':'战争'},{'n':'少年','v':'少年'},{'n':'少女','v':'少女'},{'n':'社会','v':'社会'},{'n':'原创','v':'原创'},{'n':'亲子','v':'亲子'},{'n':'益智','v':'益智'},{'n':'励志','v':'励志'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'国产','v':'国产'},{'n':'日本','v':'日本'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'类型','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'1999','v':'1999'},{'n':'1998','v':'1998'},{'n':'1997','v':'1997'},{'n':'1995','v':'1995'},{'n':'1994','v':'1994'},{'n':'1993','v':'1993'},{'n':'1992','v':'1992'},{'n':'1991','v':'1991'},{'n':'1990','v':'1990'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'5':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'20':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'21':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
};
|
||||
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const area = getFilterUrlPart(extend, 'area');
|
||||
const clazz = getFilterUrlPart(extend, 'class');
|
||||
const by = getFilterUrlPart(extend, 'by');
|
||||
const lang = getFilterUrlPart(extend, 'lang');
|
||||
const year = getFilterUrlPart(extend, 'year');
|
||||
let page = '';
|
||||
if (pg > 1) {
|
||||
page = '/page/' + pg;
|
||||
}
|
||||
const link = HOST + '/index.php/vod/show' + area + by + clazz + '/id/' + tid + lang + page + year + '.html';
|
||||
const html = await request(link);
|
||||
const $ = load(html);
|
||||
const items = $('.module .module-item');
|
||||
let videos = _.map(items, (item) => {
|
||||
const $item = $(item);
|
||||
const it = $item.find('a:first')[0];
|
||||
const img = $item.find('img:first')[0];
|
||||
const remarks = $item.find('.module-item-text').text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/detail\/id\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: img.attribs['data-src'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div#page > a.page-next').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
const limit = 24;
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
function getFilterUrlPart(extend, part) {
|
||||
let result = '';
|
||||
if (extend[part]) {
|
||||
result = '/' + part + '/' + extend[part];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(HOST + '/index.php/vod/detail/id/' + id + '.html');
|
||||
const $ = load(html);
|
||||
const vod = {
|
||||
vod_id: id,
|
||||
vod_name: $('.page-title').text(),
|
||||
vod_area: $('a.tag-link:last').text(),
|
||||
vod_year: $('a.tag-link:eq(1)').text(),
|
||||
vod_director: $('.video-info-main .video-info-items:contains(导演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
|
||||
vod_actor: $('.video-info-main .video-info-items:contains(主演:)').text().substring(3).replace(/(^\/|\/$)/g, ''),
|
||||
vod_pic: $('.video-cover img:first').attr('data-src'),
|
||||
vod_remarks : $('.stui-content__thumb span.pic-text').text(),
|
||||
vod_content: $('.video-info-main .video-info-items:contains(剧情:)').text().substring(3).replace(/收起$/g, ''),
|
||||
};
|
||||
const playMap = {};
|
||||
const tabs = $('.module-player-tab .tab-item');
|
||||
const playlists = $('.module-blocklist');
|
||||
_.each(tabs, (tab, i) => {
|
||||
const from = $(tab).find('span:first').text();
|
||||
let list = playlists[i];
|
||||
list = $(list).find('a');
|
||||
_.each(list, (it) => {
|
||||
const title = it.children[0].children[0].data;
|
||||
const playUrl = it.attribs.href;
|
||||
|
||||
if (!playMap.hasOwnProperty(from)) {
|
||||
playMap[from] = [];
|
||||
}
|
||||
playMap[from].push( title + '$' + playUrl);
|
||||
});
|
||||
});
|
||||
vod.vod_play_from = _.keys(playMap).join('$$$');
|
||||
const urls = _.values(playMap);
|
||||
const vod_play_url = _.map(urls, (urlist) => {
|
||||
return urlist.join('#');
|
||||
});
|
||||
vod.vod_play_url = vod_play_url.join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vod],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
const link = HOST + id;
|
||||
const html = await request(link);
|
||||
let $ = load(html);
|
||||
const js = JSON.parse($('script:contains(player_)').html().replace('var player_aaaa=',''));
|
||||
const parseHtml = await request('https://jx.sc1080.top/?url=' + js.url);
|
||||
const htmlData = parseHtml.match(/var config = {([\w\W]*)}([\w\W]*)player/)[1];
|
||||
const json = JSON.parse('{' + htmlData.trim().replace(/,$/, '') + '}');
|
||||
const config = {
|
||||
url: json.url,
|
||||
key: json.key,
|
||||
time: json.time,
|
||||
};
|
||||
const parseResp = await request('https://jx.sc1080.top/api_config.php', 'post', config);
|
||||
const result = JSON.parse(parseResp);
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: result.url,
|
||||
header: {
|
||||
'User-Agent': UA,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const keyword = encodeURIComponent(wd);
|
||||
let path = 'search';
|
||||
if (pg == 1) {
|
||||
path += '.html?wd=' + keyword;
|
||||
} else {
|
||||
path += '/page/' + pg + '/wd/' + keyword + '.html';
|
||||
}
|
||||
const html = await request(HOST + '/index.php/vod/' + path);
|
||||
const $ = load(html);
|
||||
const items = $('.module .module-search-item');
|
||||
let videos = _.map(items, (item) => {
|
||||
const $item = $(item);
|
||||
const it = $item.find('.video-info a:first')[0];
|
||||
const img = $item.find('.video-cover img:first')[0];
|
||||
const remarks = $item.find('.video-info-header .video-serial').text().trim();
|
||||
return {
|
||||
vod_id: it.attribs.href.replace(/.*?\/detail\/id\/(.*).html/g, '$1'),
|
||||
vod_name: it.attribs.title,
|
||||
vod_pic: img.attribs['data-src'],
|
||||
vod_remarks: remarks || '',
|
||||
};
|
||||
});
|
||||
const hasMore = $('div#page > a.page-next').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
const limit = 24;
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: limit,
|
||||
total: limit * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
277
js/star_open.js
Normal file
277
js/star_open.js
Normal file
@@ -0,0 +1,277 @@
|
||||
import { Crypto, load, _ } from 'assets://js/lib/cat.js';
|
||||
|
||||
let key = 'star';
|
||||
let host = 'https://www.histar.tv';
|
||||
let apiHost = 'https://aws.ulivetv.net';
|
||||
let types = {};
|
||||
// let ver = '';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
|
||||
const UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1';
|
||||
|
||||
async function request(reqUrl, method, data) {
|
||||
const headers = {
|
||||
'User-Agent': UA,
|
||||
};
|
||||
if (method == 'post') {
|
||||
headers['Content-Type'] = 'application/json';
|
||||
} else {
|
||||
headers['Cookie'] = 'userIP=127.0.0.1; aws-waf-token=';
|
||||
headers['Referer'] = host;
|
||||
}
|
||||
const res = await req(reqUrl, {
|
||||
method: method || 'get',
|
||||
headers: headers,
|
||||
data: data,
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
// cfg = {skey: siteKey, ext: extend}
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
types = {
|
||||
'movie': '电影',
|
||||
'drama': '电视剧',
|
||||
'animation': '动漫',
|
||||
'variety': '综艺',
|
||||
'documentary': '纪录片',
|
||||
};
|
||||
// ver = await getVer();
|
||||
}
|
||||
|
||||
// async function getVer() {
|
||||
// const html = await request(host);
|
||||
// const $ = load(html);
|
||||
// const srcAttr = $('script[src*=\'buildManifest.js\']').attr('src');
|
||||
// return srcAttr.split('/')[3];
|
||||
// }
|
||||
|
||||
async function home(filter) {
|
||||
const typeList = _.keys(types);
|
||||
const classes = _.map(typeList, (item) => {
|
||||
return { type_id: item, type_name: types[item] };
|
||||
});
|
||||
const filterConfig = {};
|
||||
const jsonData = JSON.stringify(typeList);
|
||||
for (const typeId of typeList) {
|
||||
const html = await request(host + '/' + typeId + '/all/all/all');
|
||||
const $ = load(html);
|
||||
const json = $('#__NEXT_DATA__')[0].children[0].data;
|
||||
const obj = JSON.parse(json).props.pageProps.filterCondition;
|
||||
const label = convertTypeData(obj, 'label', '类型');
|
||||
const country = convertTypeData(obj, 'country', '地区');
|
||||
const time = convertTypeData(obj, 'time', '年份');
|
||||
const filterArray = [label, country, time];
|
||||
filterConfig[typeId] = filterArray;
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterConfig,
|
||||
});
|
||||
}
|
||||
|
||||
function convertTypeData(typeData, key, name) {
|
||||
if (!typeData || !typeData[key] || typeData[key].length <= 2) {
|
||||
return null;
|
||||
}
|
||||
let valueList = typeData[key];
|
||||
if (key == 'time') {
|
||||
valueList = valueList.sort((a, b) => { return b - a;});
|
||||
valueList.pop();
|
||||
}
|
||||
const values = _.map(valueList, (item) => {
|
||||
let name;
|
||||
let value;
|
||||
if (item instanceof Array) {
|
||||
name = item[0];
|
||||
value = item[0];
|
||||
} else {
|
||||
name = item.toString();
|
||||
value = item.toString();
|
||||
}
|
||||
return {
|
||||
n: name,
|
||||
v: value,
|
||||
};
|
||||
});
|
||||
values.unshift({
|
||||
n: '全部',
|
||||
v: '',
|
||||
});
|
||||
const typeClass = {
|
||||
key: key,
|
||||
name: name,
|
||||
init: '',
|
||||
value: values,
|
||||
};
|
||||
return typeClass;
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const html = await request(host);
|
||||
const $ = load(html);
|
||||
const json = $('#__NEXT_DATA__')[0].children[0].data;
|
||||
const obj = JSON.parse(json).props.pageProps.cards;
|
||||
const videos = [];
|
||||
_.each(obj, (cards) => {
|
||||
if (cards.name == '电视直播') return;
|
||||
_.each(cards.cards, (card) => {
|
||||
const v = {
|
||||
vod_id: card.id,
|
||||
vod_name: card.name,
|
||||
vod_pic: card.img,
|
||||
vod_remarks: card.countStr,
|
||||
};
|
||||
videos.push(v);
|
||||
});
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
const limit = 16;
|
||||
const param = {
|
||||
chName: types[tid],
|
||||
page: pg,
|
||||
pageSize: limit,
|
||||
label: extend.label,
|
||||
country: extend.country,
|
||||
};
|
||||
if (extend.time) {
|
||||
const year = parseInt(extend.time);
|
||||
param.startTime = year;
|
||||
param.endTime = year;
|
||||
}
|
||||
const json = await request(apiHost + '/v3/web/api/filter', 'post', JSON.stringify(param));
|
||||
const data = JSON.parse(json).data;
|
||||
const videos = _.map(data.list, (card) => {
|
||||
return {
|
||||
vod_id: card.id,
|
||||
vod_name: card.name,
|
||||
vod_pic: card.img,
|
||||
vod_remarks: card.countStr,
|
||||
};
|
||||
});
|
||||
const page = parseInt(pg);
|
||||
const count = parseInt(data.total / limit);
|
||||
return JSON.stringify({
|
||||
page: page,
|
||||
pagecount: count,
|
||||
limit: limit,
|
||||
total: data.total,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
const html = await request(host + '/vod/detail/' + id);
|
||||
const $ = load(html);
|
||||
const json = $('#__NEXT_DATA__')[0].children[0].data;
|
||||
const obj = JSON.parse(json).props.pageProps;
|
||||
const vObj = obj.pageData;
|
||||
const vodAtom = {
|
||||
vod_id: id,
|
||||
vod_name: vObj.name,
|
||||
vod_type: vObj.chname,
|
||||
vod_pic: vObj.picurl,
|
||||
vod_area: vObj.country,
|
||||
vod_lang: vObj.language,
|
||||
vod_remarks: vObj.countStr,
|
||||
vod_actor: vObj.actor,
|
||||
vod_director: vObj.director,
|
||||
vod_content: vObj.desc,
|
||||
}
|
||||
const playInfo = obj.videosGroup;
|
||||
const playVod = {};
|
||||
_.each(playInfo, (info) => {
|
||||
const sourceName = info.name;
|
||||
let playList = '';
|
||||
const videoInfo = info.videos;
|
||||
const vodItems = _.map(videoInfo, (epObj) => {
|
||||
const epName = epObj.epInfo;
|
||||
const playUrl = epObj.purl
|
||||
return epName + '$' + playUrl;
|
||||
});
|
||||
if (_.isEmpty(vodItems)) return;
|
||||
playList = vodItems.join('#');
|
||||
playVod[sourceName] = playList;
|
||||
});
|
||||
vodAtom.vod_play_from = _.keys(playVod).join('$$$');
|
||||
vodAtom.vod_play_url = _.values(playVod).join('$$$');
|
||||
return JSON.stringify({
|
||||
list: [vodAtom],
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let playUrl = id;
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
// const limit = 10;
|
||||
// const json = await request(host + '/_next/data/' + ver + '/search.json?word=' + encodeURIComponent(wd) + '&page=' + pg);
|
||||
// const data = JSON.parse(json).pageProps;
|
||||
// const videos = _.map(data.initList, (card) => {
|
||||
// return {
|
||||
// vod_id: card.id,
|
||||
// vod_name: card.name,
|
||||
// vod_pic: card.picurl,
|
||||
// vod_remarks: card.countStr,
|
||||
// };
|
||||
// });
|
||||
// const page = parseInt(pg);
|
||||
// const count = parseInt(data.total / limit);
|
||||
// return JSON.stringify({
|
||||
// page: page,
|
||||
// pagecount: count,
|
||||
// limit: limit,
|
||||
// total: data.total,
|
||||
// list: videos,
|
||||
// });
|
||||
const limit = 10;
|
||||
const param = {
|
||||
word: wd,
|
||||
page: pg,
|
||||
pageSize: limit,
|
||||
};
|
||||
const json = await request(apiHost + '/v3/web/api/search', 'post', JSON.stringify(param));
|
||||
const data = JSON.parse(json).data;
|
||||
const videos = _.map(data.list, (card) => {
|
||||
return {
|
||||
vod_id: card.id,
|
||||
vod_name: card.name,
|
||||
vod_pic: card.picurl,
|
||||
vod_remarks: card.countStr,
|
||||
};
|
||||
});
|
||||
const page = parseInt(pg);
|
||||
const count = parseInt(data.total / limit);
|
||||
return JSON.stringify({
|
||||
page: page,
|
||||
pagecount: count,
|
||||
limit: limit,
|
||||
total: data.total,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -22,7 +22,7 @@ async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {load, _, Uri} from './lib/cat.js';
|
||||
import {load, _, Uri} from 'assets://js/lib/cat.js';
|
||||
import {log} from './lib/utils.js';
|
||||
import {initAli, detailContent, playContent} from './lib/ali.js';
|
||||
|
||||
@@ -6,15 +6,15 @@ let siteKey = 'wobg';
|
||||
let siteType = 0;
|
||||
let siteUrl = 'https://wobge.run.goorm.io';
|
||||
let UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";
|
||||
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/
|
||||
let patternAli = /(https:\/\/www\.(aliyundrive|alipan)\.com\/s\/[^"]+)/
|
||||
|
||||
async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
console.debug('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,23 +44,35 @@ async function getString(url) {
|
||||
return res.content;
|
||||
}
|
||||
|
||||
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' : '音乐'}];
|
||||
let filterObj = {};
|
||||
async function home(filter) {
|
||||
let classes = [{'type_id':'1','type_name':'自营电影'},{'type_id':'2','type_name':'自营剧集'},{'type_id':'3','type_name':'动漫'},{'type_id':'4','type_name':'综艺'},{'type_id':'5','type_name':'音乐'},{'type_id':'44','type_name':'自营短剧'}];
|
||||
let filterObj = {
|
||||
'1':[{'key':'cateId','name':'类型','init':'1','value':[{'n':'全部','v':'1'},{'n':'大陆自营电影','v':'6'},{'n':'香港自营电影','v':'7'},{'n':'台湾自营电影','v':'8'},{'n':'美国自营电影','v':'9'},{'n':'法国自营电影','v':'10'},{'n':'英国自营电影','v':'11'},{'n':'日本自营电影','v':'12'},{'n':'韩国自营电影','v':'20'},{'n':'德国自营电影','v':'21'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'喜剧','v':'喜剧'},{'n':'爱情','v':'爱情'},{'n':'恐怖','v':'恐怖'},{'n':'动作','v':'动作'},{'n':'科幻','v':'科幻'},{'n':'剧情','v':'剧情'},{'n':'战争','v':'战争'},{'n':'警匪','v':'警匪'},{'n':'犯罪','v':'犯罪'},{'n':'动画','v':'动画'},{'n':'奇幻','v':'奇幻'},{'n':'武侠','v':'武侠'},{'n':'冒险','v':'冒险'},{'n':'枪战','v':'枪战'},{'n':'恐怖','v':'恐怖'},{'n':'悬疑','v':'悬疑'},{'n':'惊悚','v':'惊悚'},{'n':'经典','v':'经典'},{'n':'青春','v':'青春'},{'n':'文艺','v':'文艺'},{'n':'微电影','v':'微电影'},{'n':'古装','v':'古装'},{'n':'历史','v':'历史'},{'n':'运动','v':'运动'},{'n':'农村','v':'农村'},{'n':'儿童','v':'儿童'},{'n':'网络电影','v':'网络电影'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'大陆','v':'大陆'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'美国','v':'美国'},{'n':'法国','v':'法国'},{'n':'英国','v':'英国'},{'n':'日本','v':'日本'},{'n':'韩国','v':'韩国'},{'n':'德国','v':'德国'},{'n':'泰国','v':'泰国'},{'n':'印度','v':'印度'},{'n':'意大利','v':'意大利'},{'n':'西班牙','v':'西班牙'},{'n':'加拿大','v':'加拿大'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'2':[{'key':'cateId','name':'类型','init':'2','value':[{'n':'全部','v':'2'},{'n':'大陆自营剧集','v':'13'},{'n':'香港自营剧集','v':'14'},{'n':'台湾自营剧集','v':'15'},{'n':'美国自营剧集','v':'16'},{'n':'法国自营剧集','v':'22'},{'n':'英国自营剧集','v':'23'},{'n':'日本自营剧集','v':'24'},{'n':'韩国自营剧集','v':'25'},{'n':'德国自营剧集','v':'26'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'古装','v':'古装'},{'n':'战争','v':'战争'},{'n':'青春偶像','v':'青春偶像'},{'n':'喜剧','v':'喜剧'},{'n':'家庭','v':'家庭'},{'n':'犯罪','v':'犯罪'},{'n':'动作','v':'动作'},{'n':'奇幻','v':'奇幻'},{'n':'剧情','v':'剧情'},{'n':'历史','v':'历史'},{'n':'经典','v':'经典'},{'n':'乡村','v':'乡村'},{'n':'情景','v':'情景'},{'n':'商战','v':'商战'},{'n':'网剧','v':'网剧'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'韩国','v':'韩国'},{'n':'香港','v':'香港'},{'n':'台湾','v':'台湾'},{'n':'日本','v':'日本'},{'n':'美国','v':'美国'},{'n':'泰国','v':'泰国'},{'n':'英国','v':'英国'},{'n':'新加坡','v':'新加坡'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'3':[{'key':'cateId','name':'类型','init':'3','value':[{'n':'全部','v':'3'},{'n':'大陆动漫','v':'27'},{'n':'香港动漫','v':'28'},{'n':'台湾动漫','v':'29'},{'n':'美国动漫','v':'30'},{'n':'法国动漫','v':'31'},{'n':'英国动漫','v':'32'},{'n':'日本动漫','v':'33'},{'n':'韩国动漫','v':'34'},{'n':'德国动漫','v':'35'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'选秀','v':'选秀'},{'n':'情感','v':'情感'},{'n':'访谈','v':'访谈'},{'n':'播报','v':'播报'},{'n':'旅游','v':'旅游'},{'n':'音乐','v':'音乐'},{'n':'美食','v':'美食'},{'n':'纪实','v':'纪实'},{'n':'曲艺','v':'曲艺'},{'n':'生活','v':'生活'},{'n':'游戏互动','v':'游戏互动'},{'n':'财经','v':'财经'},{'n':'求职','v':'求职'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'},{'n':'港台','v':'港台'},{'n':'日韩','v':'日韩'},{'n':'欧美','v':'欧美'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'4':[{'key':'cateId','name':'类型','init':'4','value':[{'n':'全部','v':'4'},{'n':'大陆综艺','v':'36'},{'n':'香港综艺','v':'37'},{'n':'台湾综艺','v':'38'},{'n':'美国综艺','v':'39'},{'n':'法国综艺','v':'40'},{'n':'英国综艺','v':'41'},{'n':'日本综艺','v':'42'},{'n':'韩国综艺','v':'43'}]},{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'情感','v':'情感'},{'n':'科幻','v':'科幻'},{'n':'热血','v':'热血'},{'n':'推理','v':'推理'},{'n':'搞笑','v':'搞笑'},{'n':'冒险','v':'冒险'},{'n':'萝莉','v':'萝莉'},{'n':'校园','v':'校园'},{'n':'动作','v':'动作'},{'n':'机战','v':'机战'},{'n':'运动','v':'运动'},{'n':'战争','v':'战争'},{'n':'少年','v':'少年'},{'n':'少女','v':'少女'},{'n':'社会','v':'社会'},{'n':'原创','v':'原创'},{'n':'亲子','v':'亲子'},{'n':'益智','v':'益智'},{'n':'励志','v':'励志'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'国产','v':'国产'},{'n':'日本','v':'日本'},{'n':'欧美','v':'欧美'},{'n':'其他','v':'其他'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'5':[{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
'44':[{'key':'class','name':'剧情','init':'','value':[{'n':'全部','v':''},{'n':'情感','v':'情感'},{'n':'科幻','v':'科幻'},{'n':'热血','v':'热血'},{'n':'推理','v':'推理'},{'n':'搞笑','v':'搞笑'},{'n':'冒险','v':'冒险'},{'n':'萝莉','v':'萝莉'},{'n':'校园','v':'校园'},{'n':'动作','v':'动作'},{'n':'机战','v':'机战'},{'n':'运动','v':'运动'},{'n':'战争','v':'战争'},{'n':'少年','v':'少年'},{'n':'少女','v':'少女'},{'n':'社会','v':'社会'},{'n':'原创','v':'原创'},{'n':'亲子','v':'亲子'},{'n':'益智','v':'益智'},{'n':'励志','v':'励志'},{'n':'其他','v':'其他'}]},{'key':'area','name':'地区','init':'','value':[{'n':'全部','v':''},{'n':'内地','v':'内地'}]},{'key':'lang','name':'语言','init':'','value':[{'n':'全部','v':''},{'n':'国语','v':'国语'},{'n':'英语','v':'英语'},{'n':'粤语','v':'粤语'},{'n':'闽南语','v':'闽南语'},{'n':'韩语','v':'韩语'},{'n':'日语','v':'日语'},{'n':'法语','v':'法语'},{'n':'德语','v':'德语'},{'n':'其它','v':'其它'}]},{'key':'year','name':'年份','init':'','value':[{'n':'全部','v':''},{'n':'2023','v':'2023'},{'n':'2022','v':'2022'},{'n':'2021','v':'2021'},{'n':'2020','v':'2020'},{'n':'2019','v':'2019'},{'n':'2018','v':'2018'},{'n':'2017','v':'2017'},{'n':'2016','v':'2016'},{'n':'2015','v':'2015'},{'n':'2014','v':'2014'},{'n':'2013','v':'2013'},{'n':'2012','v':'2012'},{'n':'2011','v':'2011'},{'n':'2010','v':'2010'},{'n':'2009','v':'2009'},{'n':'2008','v':'2008'},{'n':'2007','v':'2007'},{'n':'2006','v':'2006'},{'n':'2005','v':'2005'},{'n':'2004','v':'2004'}]},{'key':'letter','name':'字母','init':'','value':[{'n':'全部','v':''},{'n':'A','v':'A'},{'n':'B','v':'B'},{'n':'C','v':'C'},{'n':'D','v':'D'},{'n':'E','v':'E'},{'n':'F','v':'F'},{'n':'G','v':'G'},{'n':'H','v':'H'},{'n':'I','v':'I'},{'n':'J','v':'J'},{'n':'K','v':'K'},{'n':'L','v':'L'},{'n':'M','v':'M'},{'n':'N','v':'N'},{'n':'O','v':'O'},{'n':'P','v':'P'},{'n':'Q','v':'Q'},{'n':'R','v':'R'},{'n':'S','v':'S'},{'n':'T','v':'T'},{'n':'U','v':'U'},{'n':'V','v':'V'},{'n':'W','v':'W'},{'n':'X','v':'X'},{'n':'Y','v':'Y'},{'n':'Z','v':'Z'},{'n':'0-9','v':'0-9'}]},{'key':'by','name':'排序','value':[{'n':'时间','v':'time'},{'n':'人气','v':'hits'},{'n':'评分','v':'score'}]}],
|
||||
};
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async function homeVod() {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
let reqUrl = siteUrl + '/index.php/vod/show/id/'+tid+'/page/'+pg+'.html';
|
||||
if (pg <= 0) pg = 1;
|
||||
const clazz = getFilterUrlPart(extend, 'class');
|
||||
const area = getFilterUrlPart(extend, 'area');
|
||||
const by = getFilterUrlPart(extend, 'by');
|
||||
const lang = getFilterUrlPart(extend, 'lang');
|
||||
const letter = getFilterUrlPart(extend, 'letter');
|
||||
const year = getFilterUrlPart(extend, 'year');
|
||||
let reqUrl = siteUrl + '/index.php/vod/show' + area + by + clazz + '/id/' + (extend.cateId || tid) + lang + '/page/' + pg + letter + year + '.html';
|
||||
let con = await request(reqUrl, UA);
|
||||
const $ = load(con);
|
||||
let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
|
||||
@@ -91,6 +103,14 @@ async function category(tid, pg, filter, extend) {
|
||||
});
|
||||
}
|
||||
|
||||
function getFilterUrlPart(extend, part) {
|
||||
let result = '';
|
||||
if (extend[part]) {
|
||||
result = '/' + part + '/' + extend[part];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
await log('detail:id:' + id);
|
||||
@@ -99,25 +119,21 @@ async function detail(id) {
|
||||
let url = siteUrl + id;
|
||||
let aliUrl = await getString(url);
|
||||
let matches = aliUrl.match(patternAli);
|
||||
console.log('detailmatche');
|
||||
console.log(matches[1]);
|
||||
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
|
||||
return '';
|
||||
} catch (e) {
|
||||
await log( 'detail:' + e.message + ' line:' + e.lineNumber);
|
||||
console.debug( 'detail:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
try {
|
||||
return await playContent(flag, id, flags);
|
||||
} catch (e) {
|
||||
await log( 'play:' + e.message + ' line:' + e.lineNumber);
|
||||
console.debug( 'play:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function search(wd, quick) {
|
||||
await log('search' + wd);
|
||||
let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd;
|
||||
|
||||
1
js/wogg2_open.js
Normal file
1
js/wogg2_open.js
Normal file
File diff suppressed because one or more lines are too long
155
js/wolb_open.js
Normal file
155
js/wolb_open.js
Normal file
@@ -0,0 +1,155 @@
|
||||
import {load, _, Uri} from './lib/cat.js';
|
||||
import {log} from './lib/utils.js';
|
||||
import {initAli, detailContent, playContent} from './lib/ali.js';
|
||||
|
||||
let siteKey = 'wobg';
|
||||
let siteType = 0;
|
||||
let siteUrl = 'https://wobge.run.goorm.io';
|
||||
let UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1";
|
||||
let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+)/
|
||||
|
||||
async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
async function request(reqUrl, agentSp) {
|
||||
let header = {
|
||||
'user-agent': agentSp || 'okhttp/3.12.0',
|
||||
};
|
||||
let uri = new Uri(reqUrl);
|
||||
let res = await req(uri.toString(), {
|
||||
headers: header,
|
||||
timeout: 10000
|
||||
});
|
||||
let content = res.content;
|
||||
return content;
|
||||
}
|
||||
|
||||
function getHeader() {
|
||||
let header = {};
|
||||
header['User-Agent'] = UA;
|
||||
return header;
|
||||
}
|
||||
|
||||
async function getString(url) {
|
||||
let res = await req(url, {
|
||||
headers: getHeader()
|
||||
});
|
||||
return res.content;
|
||||
}
|
||||
|
||||
let classes = [{'type_id': 1, 'type_name' : '自营电影'},{'type_id': 2, 'type_name' : '自营剧集'},{'type_id': 44, 'type_name' : '自营短剧'},{'type_id': 3, 'type_name' : '动漫'},{'type_id': 4, 'type_name' : '综艺'},{'type_id': 5, 'type_name' : '音乐'}];
|
||||
let filterObj = {};
|
||||
async function home(filter) {
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async function homeVod() {
|
||||
return '{}';
|
||||
}
|
||||
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
let reqUrl = siteUrl + '/index.php/vod/show/id/'+tid+'/page/'+pg+'.html';
|
||||
let con = await request(reqUrl, UA);
|
||||
const $ = load(con);
|
||||
let items = $('.module:eq(0) > .module-list > .module-items > .module-item');
|
||||
let videos = [];
|
||||
for(var item of items) {
|
||||
let oneA = $(item).find('.module-item-cover .module-item-pic a').first();
|
||||
let href = oneA.attr('href');
|
||||
let name = oneA.attr('title');
|
||||
let oneImg = $(item).find('.module-item-cover .module-item-pic img').first();
|
||||
let pic = oneImg.attr('data-src');
|
||||
let remark = $(item).find('.module-item-text').first().text();
|
||||
videos.push({
|
||||
vod_id: href,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
});
|
||||
}
|
||||
|
||||
const hasMore = $('#page > a:contains(下一页)').length > 0;
|
||||
const pgCount = hasMore ? parseInt(pg) + 1 : parseInt(pg);
|
||||
return JSON.stringify({
|
||||
page: parseInt(pg),
|
||||
pagecount: pgCount,
|
||||
limit: 72,
|
||||
total: 72 * pgCount,
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
await log('detail:id:' + id);
|
||||
let preMatches = id.match(patternAli);
|
||||
if (!_.isEmpty(preMatches)) return await detailContent(preMatches[1]);
|
||||
let url = siteUrl + id;
|
||||
let aliUrl = await getString(url);
|
||||
let matches = aliUrl.match(patternAli);
|
||||
console.log('detailmatche');
|
||||
console.log(matches[1]);
|
||||
if (!_.isEmpty(matches)) return await detailContent(matches[1]);
|
||||
return '';
|
||||
} catch (e) {
|
||||
await log( 'detail:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
try {
|
||||
return await playContent(flag, id, flags);
|
||||
} catch (e) {
|
||||
await log( 'play:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function search(wd, quick) {
|
||||
await log('search' + wd);
|
||||
let searchUrl = siteUrl + '/index.php/vod/search.html?wd=' + wd;
|
||||
let html = await getString(searchUrl);
|
||||
let $ = load(html);
|
||||
let items = $('.module-search-item');
|
||||
let videos = [];
|
||||
for(var item of items) {
|
||||
let vodId = $(item).find(".video-serial")[0].attribs.href;
|
||||
let name = $(item).find(".video-serial")[0].attribs.title;
|
||||
let pic = $(item).find(".module-item-pic > img")[0].attribs['data-src'];
|
||||
let remark = '';
|
||||
videos.push({
|
||||
vod_id: vodId,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
});
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -28,7 +28,7 @@ async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
@@ -33,10 +33,7 @@ async function init(cfg) {
|
||||
if (configs.length == 2) {
|
||||
cookie = configs[1];
|
||||
}
|
||||
const token = {
|
||||
ext: configs[0]
|
||||
};
|
||||
await initAli(token);
|
||||
await initAli(configs[0]);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
272
js/ys996_open.js
Normal file
272
js/ys996_open.js
Normal file
@@ -0,0 +1,272 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let siteUrl = 'https://www.cs1369.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let headers = {};
|
||||
|
||||
async function request(reqUrl, postData, agentSp, get) {
|
||||
|
||||
let res = await req(reqUrl, {
|
||||
method: get ? 'get' : 'post',
|
||||
headers: headers,
|
||||
data: postData || {},
|
||||
postType: get ? '' : 'form',
|
||||
});
|
||||
|
||||
let content = res.content;
|
||||
return content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
let classes = [{
|
||||
type_id: '1',
|
||||
type_name: '电影',
|
||||
},{
|
||||
type_id: '2',
|
||||
type_name: '电视',
|
||||
},{
|
||||
type_id: '3',
|
||||
type_name: '动漫',
|
||||
}];
|
||||
|
||||
let filterObj = genFilterObj();
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
filters: filterObj
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
let videos = await getVideos(siteUrl);
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
let url = siteUrl;
|
||||
if (filter) {
|
||||
url = url + '/show';
|
||||
let area = extend['area'];
|
||||
if (area && area != '') {
|
||||
url = url + '/area/' + area;
|
||||
}
|
||||
let clazz = extend['class']
|
||||
if (clazz && clazz != '') {
|
||||
url = url + '/class/' + clazz;
|
||||
}
|
||||
let id = extend['id'];
|
||||
if(id && id != '') {
|
||||
url = url + '/id/' + id;
|
||||
} else {
|
||||
url = url + '/id/' + tid;
|
||||
}
|
||||
let year = extend['year'];
|
||||
if (year && year != '') {
|
||||
url = url + '/year/' + year;
|
||||
}
|
||||
if (pg && pg > 1) {
|
||||
url = url + '/page/' + pg;
|
||||
}
|
||||
url = url + '.html';
|
||||
} else {
|
||||
url = url + '/vod/type';
|
||||
url = url + '/id/' + tid;
|
||||
if (pg && pg > 1) {
|
||||
url = url + '/page/' + pg;
|
||||
}
|
||||
url = url + '.html';
|
||||
}
|
||||
//console.log('cate page url:', url);
|
||||
|
||||
let videos = await getVideos(url);
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
page: pg
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
let url = siteUrl + id;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
let actors = _.map($('div.stui-content__detail > p:nth-child(3) > a'), (n) => {
|
||||
return $(n).text();
|
||||
});
|
||||
let actor = actors.join(' ');
|
||||
let director = $('div.stui-content__detail > p:nth-child(4) > a').text();
|
||||
let title = $('div.stui-content__detail > h1.title').text();
|
||||
let content = $('div.stui-pannel_bd > p').text();
|
||||
const cards = $('div.stui-pannel_bd.col-pd.clearfix > ul > li > a');
|
||||
let playUrls = _.map(cards, (n) => {
|
||||
return $(n).text() + '$' + n.attribs['href'];
|
||||
});
|
||||
|
||||
const video = {
|
||||
vod_actor: actor,
|
||||
vod_play_from: 'Leospring',
|
||||
vod_play_url: playUrls.join('#'),
|
||||
vod_director: director,
|
||||
vod_content: content,
|
||||
};
|
||||
const list = [video];
|
||||
const result = { list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {
|
||||
//console.log('err', e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let url = siteUrl + '/search/wd/' + wd + '.html';
|
||||
//console.log('search url:', url);
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.stui-pannel_bd > ul.stui-vodlist__media.col-pd.clearfix > li');
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = $($(n).find('div.thumb > a')[0]).attr('href');
|
||||
let name = $($(n).find('div.thumb > a')[0]).attr('title');
|
||||
let pic = $($(n).find('div.thumb > a')[0]).attr('data-original');
|
||||
let remark = $($(n).find('div.thumb > a > span:nth-child(2)')[0]).text();
|
||||
|
||||
return {
|
||||
vod_id: id,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
let url = siteUrl + id;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
let info = '';
|
||||
for(const n of $('script')) {
|
||||
if($(n).text().indexOf('player_aaaa=') > 0) {
|
||||
info = $(n).text().split('player_aaaa=')[1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
//console.log('info', info);
|
||||
let obj = JSON.parse(info);
|
||||
let playUrl = obj.url;
|
||||
if(obj.encrypt == 1) {
|
||||
playUrl = unescape(playUrl);
|
||||
} else if (obj.encrypt == 2) {
|
||||
playUrl = unescape(base64Decode(playUrl))
|
||||
}
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: playUrl,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function genFilterObj() {
|
||||
return {
|
||||
'1':[
|
||||
{
|
||||
key: 'id',
|
||||
name: '类型',
|
||||
value: [{n:'全部',v:''},{n:'动作片',v:'6'},{n:'喜剧片',v:'7'},{n:'爱情片',v:'8'},{n:'科幻片',v:'9'},{n:'恐怖片',v:'10'},{n:'剧情片',v:'11'},{n:'战争片',v:'12'},{n:'动画片',v:'13'},{n:'纪录片',v:'14'}]
|
||||
},{
|
||||
key: 'class',
|
||||
name: '剧情',
|
||||
value: [{n:'全部',v:''},{n:'喜剧',v:'喜剧'},{n:'爱情',v:'爱情'},{n:'恐怖',v:'恐怖'},{n:'动作',v:'动作'},{n:'科幻',v:'科幻'},{n:'剧情',v:'剧情'},{n:'战争',v:'战争'},{n:'警匪',v:'警匪'},{n:'犯罪',v:'犯罪'},{n:'动画',v:'动画'},{n:'奇幻',v:'奇幻'},{n:'武侠',v:'武侠'},{n:'冒险',v:'冒险'},{n:'枪战',v:'枪战'},{n:'悬疑',v:'悬疑'},{n:'惊悚',v:'惊悚'},{n:'经典',v:'经典'},{n:'青春',v:'青春'},{n:'文艺',v:'文艺'},{n:'微电影',v:'微电影'},{n:'古装',v:'古装'},{n:'历史',v:'历史'},{n:'运动',v:'运动'},{n:'农村',v:'农村'},{n:'儿童',v:'儿童'},{n:'网络电影',v:'网络电影'}]
|
||||
},{
|
||||
key: 'area',
|
||||
name: '地区',
|
||||
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
|
||||
},{
|
||||
key: 'year',
|
||||
name: '年份',
|
||||
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
|
||||
}],
|
||||
'2':[{
|
||||
key: 'id',
|
||||
name: '类型',
|
||||
value: [{n:'全部',v:''},{n:'内地',v:'15'},{n:'美国',v:'16'},{n:'英国',v:'17'},{n:'韩国',v:'18'},{n:'泰国',v:'20'},{n:'日本',v:'21'},{n:'香港',v:'22'},{n:'台湾',v:'23'}]
|
||||
},{
|
||||
key: 'class',
|
||||
name: '剧情',
|
||||
value: [{n:'全部',v:''},{n:'古装',v:'古装'},{n:'战争',v:'战争'},{n:'青春偶像',v:'青春偶像'},{n:'喜剧',v:'喜剧'},{n:'家庭',v:'家庭'},{n:'犯罪',v:'犯罪'},{n:'动作',v:'动作'},{n:'奇幻',v:'奇幻'},{n:'剧情',v:'剧情'},{n:'历史',v:'历史'},{n:'经典',v:'经典'},{n:'乡村',v:'乡村'},{n:'情景',v:'情景'},{n:'商战',v:'商战'},{n:'网剧',v:'网剧'}]
|
||||
},{
|
||||
key: 'area',
|
||||
name: '地区',
|
||||
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
|
||||
},{
|
||||
key: 'year',
|
||||
name: '年份',
|
||||
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
|
||||
}],
|
||||
'3':[{
|
||||
key: 'id',
|
||||
name: '类型',
|
||||
value: [{n:'全部',v:''},{n:'内地',v:'25'},{n:'日漫',v:'26'},{n:'欧美',v:'27'},{n:'其他',v:'28'}]
|
||||
},{
|
||||
key: 'class',
|
||||
name: '剧情',
|
||||
value: [{n:'全部',v:''},{n:'情感',v:'情感'},{n:'科幻',v:'科幻'},{n:'热血',v:'热血'},{n:'推理',v:'推理'},{n:'搞笑',v:'搞笑'},{n:'冒险',v:'冒险'},{n:'萝莉',v:'萝莉'},{n:'校园',v:'校园'},{n:'动作',v:'动作'},{n:'机战',v:'机战'},{n:'运动',v:'运动'},{n:'战争',v:'战争'},{n:'少年',v:'少年'},{n:'少女',v:'少女'},{n:'社会',v:'社会'},{n:'原创',v:'原创'},{n:'亲子',v:'亲子'},{n:'益智',v:'益智'},{n:'励志',v:'励志'}]
|
||||
},{
|
||||
key: 'area',
|
||||
name: '地区',
|
||||
value: [{n:'全部',v:''},{n:'中国大陆',v:'中国大陆'},{n:'中国香港',v:'中国香港'},{n:'中国台湾',v:'中国台湾'},{n:'美国',v:'美国'},{n:'韩国',v:'韩国'},{n:'日本',v:'日本'},{n:'泰国',v:'泰国'},{n:'新加坡',v:'新加坡'},{n:'马来西亚',v:'马来西亚'},{n:'印度',v:'印度'},{n:'英国',v:'英国'},{n:'法国',v:'法国'},{n:'加拿大',v:'加拿大'},{n:'西班牙',v:'西班牙'},{n:'俄罗斯',v:'俄罗斯'}]
|
||||
},{
|
||||
key: 'year',
|
||||
name: '年份',
|
||||
value: [{n:'全部',v:''},{n:'2023',v:'2023'},{n:'2022',v:'2022'},{n:'2021',v:'2021'},{n:'2020',v:'2020'},{n:'2019',v:'2019'},{n:'2018',v:'2018'},{n:'2017',v:'2017'},{n:'2016',v:'2016'},{n:'2015',v:'2015'},{n:'2014',v:'2014'},{n:'2013',v:'2013'},{n:'2012',v:'2012'},{n:'2011',v:'2011'},{n:'2010',v:'2010'},{n:'2009',v:'2009'},{n:'2008',v:'2008'},{n:'2007',v:'2007'},{n:'2006',v:'2006'},{n:'2005',v:'2005'},{n:'2004',v:'2004'},{n:'2003',v:'2003'},{n:'2002',v:'2002'},{n:'2001',v:'2001'},{n:'2000',v:'2000'}]
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
async function getVideos(url) {
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.stui-vodlist__box > a')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['href'];
|
||||
let name = n.attribs['title'];
|
||||
let pic = n.attribs['data-original'];
|
||||
let remark = $($(n).find('span:nth-child(2)')[0]).text();
|
||||
return {
|
||||
vod_id: id,
|
||||
vod_name: name,
|
||||
vod_pic: pic,
|
||||
vod_remarks: remark,
|
||||
};
|
||||
});
|
||||
return videos;
|
||||
}
|
||||
|
||||
function base64Encode(text) {
|
||||
return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text));
|
||||
}
|
||||
|
||||
function base64Decode(text) {
|
||||
return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text));
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
@@ -33,7 +33,7 @@ async function init(cfg) {
|
||||
try {
|
||||
siteKey = _.isEmpty(cfg.skey) ? '' : cfg.skey;
|
||||
siteType = _.isEmpty(cfg.stype) ? '' : cfg.stype;
|
||||
await initAli(cfg);
|
||||
await initAli(cfg.ext);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
@@ -79,23 +79,15 @@ async function play(flag, id, flags) {
|
||||
async function search(wd, quick, pg) {
|
||||
if (pg <= 0) pg = 1;
|
||||
const limit = 20;
|
||||
let redirect;
|
||||
if (pg > 1) {
|
||||
redirect = 0;
|
||||
}
|
||||
const param = {
|
||||
keyboard: wd,
|
||||
};
|
||||
const data = await requestRaw(siteUrl + '/search', 'post', param, redirect);
|
||||
const data = await requestRaw(siteUrl + '/search', 'post', param);
|
||||
let html = '';
|
||||
if (redirect) {
|
||||
html = data.content;
|
||||
} else {
|
||||
const headers = data.headers;
|
||||
if (headers.hasOwnProperty('location')) {
|
||||
const url = headers['location'] + '?p=' + pg;
|
||||
html = await request(url);
|
||||
}
|
||||
const headers = data.headers;
|
||||
if (headers.hasOwnProperty('location')) {
|
||||
const url = headers['location'] + '?p=' + pg;
|
||||
html = await request(url);
|
||||
}
|
||||
|
||||
const $ = load(html);
|
||||
|
||||
@@ -39,10 +39,7 @@ async function init(cfg) {
|
||||
username = configs[1];
|
||||
password = configs[2];
|
||||
}
|
||||
const token = {
|
||||
ext: configs[0]
|
||||
};
|
||||
await initAli(token);
|
||||
await initAli(configs[0]);
|
||||
} catch (e) {
|
||||
await log('init:' + e.message + ' line:' + e.lineNumber);
|
||||
}
|
||||
|
||||
162
js/zzmusic_book_open.js
Normal file
162
js/zzmusic_book_open.js
Normal file
@@ -0,0 +1,162 @@
|
||||
import { Crypto, load, _ } from './lib/cat.js';
|
||||
|
||||
let siteUrl = 'https://gh.7761.cf/https://zz123.com';
|
||||
let imgUrl = 'https://music.jsbaidu.com';
|
||||
let siteKey = '';
|
||||
let siteType = 0;
|
||||
let headers = {};
|
||||
|
||||
async function request(reqUrl, postData, agentSp, get) {
|
||||
|
||||
let res = await req(reqUrl, {
|
||||
method: get ? 'get' : 'post',
|
||||
headers: headers,
|
||||
data: postData || {},
|
||||
postType: get ? '' : 'form',
|
||||
});
|
||||
|
||||
let content = res.content;
|
||||
return content;
|
||||
}
|
||||
|
||||
async function init(cfg) {
|
||||
siteKey = cfg.skey;
|
||||
siteType = cfg.stype;
|
||||
if (cfg.ext) {
|
||||
siteUrl = cfg.ext;
|
||||
}
|
||||
}
|
||||
|
||||
async function home(filter) {
|
||||
const html = await request(siteUrl);
|
||||
const $ = load(html);
|
||||
const cates = $('ul.aside-menu-list.channel > li')
|
||||
let classes = _.map(cates, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('a > span')[0]).text();
|
||||
return {
|
||||
type_id: id,
|
||||
type_name: name,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
class: classes,
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
const html = await request(siteUrl);
|
||||
const $ = load(html);
|
||||
const cards = $('div.page-main-wrap > div > div > div.card-list.d-none.d-md-block > div')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
|
||||
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
|
||||
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
|
||||
return {
|
||||
book_id: id,
|
||||
book_name: name,
|
||||
book_pic: pic,
|
||||
book_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function category(tid, pg, filter, extend) {
|
||||
if (pg <= 0) pg = 1;
|
||||
let url = siteUrl + '/ajax/';
|
||||
let res = await req(url, {
|
||||
method: 'post',
|
||||
data: {
|
||||
act: 'tag_music',
|
||||
type: 'tuijian',
|
||||
tid: tid,
|
||||
page: pg,
|
||||
lang: '',
|
||||
},
|
||||
postType: 'form',
|
||||
});
|
||||
//console.log('catedata:', res);
|
||||
let data = JSON.parse(res.content).data;
|
||||
let videos = [];
|
||||
for(let i=0;i<data.length;i++){
|
||||
const item = data[i];
|
||||
videos.push({
|
||||
book_id: item['mp3'],
|
||||
book_name: item['mname'],
|
||||
book_pic: item['pic'].replace('/img', imgUrl),
|
||||
book_remarks: item['play_time'],
|
||||
})
|
||||
}
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
async function detail(id) {
|
||||
try {
|
||||
let playUrl = id;
|
||||
if(!id.startsWith('http')) {
|
||||
playUrl = siteUrl + '/xplay/?act=songplay&id=' + id;
|
||||
}
|
||||
|
||||
const video = {
|
||||
book_id: id,
|
||||
book_actor: 'Leospring',
|
||||
book_play_from: 'Leospring',
|
||||
urls: '播放$' + playUrl,
|
||||
book_director: 'Leospring',
|
||||
book_content: '该音乐由公众号【蚂蚁科技杂谈】用爱发电制作,欢迎收听!',
|
||||
};
|
||||
const list = [video];
|
||||
const result = { list };
|
||||
return JSON.stringify(result);
|
||||
} catch (e) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function play(flag, id, flags) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
url: id,
|
||||
});
|
||||
}
|
||||
|
||||
async function search(wd, quick, pg) {
|
||||
let url = siteUrl + '/search/?key=' + wd;
|
||||
const html = await request(url);
|
||||
const $ = load(html);
|
||||
const cards = $('div.tab-item.tab-song > div.card-list.d-none.d-md-block > div')
|
||||
let videos = _.map(cards, (n) => {
|
||||
let id = n.attribs['data-id'];
|
||||
let name = $($(n).find('div.item-info > div > div.songname.text-ellipsis.color-link-content-primary > a')[0]).text();
|
||||
let pic = $($(n).find('div.item-cover-wrap > a > img')[0]).attr('data-src').replace('/img', imgUrl);
|
||||
let remark = $($(n).find('div.item-cover-wrap > div.item-time')[0]).text();
|
||||
|
||||
return {
|
||||
book_id: id,
|
||||
book_name: name,
|
||||
book_pic: pic,
|
||||
book_remarks: remark,
|
||||
};
|
||||
});
|
||||
return JSON.stringify({
|
||||
list: videos,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {
|
||||
init: init,
|
||||
home: home,
|
||||
homeVod: homeVod,
|
||||
category: category,
|
||||
detail: detail,
|
||||
play: play,
|
||||
search: search,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user