256 lines
6.5 KiB
JavaScript
256 lines
6.5 KiB
JavaScript
import "assets://js/lib/cat.js";
|
|
import "assets://js/lib/crypto-js.js";
|
|
|
|
//https://link3.cc/yyvod
|
|
|
|
async function init(cfg) {
|
|
cfg.skey = '悠悠视频-动态分类';
|
|
cfg.stype = '3';
|
|
}
|
|
let url = 'http://156.225.30.65:8090';
|
|
const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36';
|
|
|
|
//解密
|
|
function AES1(data) {
|
|
const key = CryptoJS.enc.Utf8.parse('RuN9LRvwTRgpQnpK');
|
|
const iv = CryptoJS.enc.Utf8.parse('RuN9LRvwTRgpQnpK');
|
|
const decrypted = CryptoJS.AES.decrypt(data, key, {
|
|
iv: iv,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
});
|
|
return decrypted.toString(CryptoJS.enc.Utf8);
|
|
}
|
|
|
|
//加密
|
|
function AES2(data) {
|
|
const key = CryptoJS.enc.Utf8.parse('RuN9LRvwTRgpQnpK');
|
|
const iv = CryptoJS.enc.Utf8.parse('RuN9LRvwTRgpQnpK');
|
|
const encrypted = CryptoJS.AES.encrypt(data, key, {
|
|
iv: iv,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
});
|
|
return encrypted.toString();
|
|
}
|
|
|
|
|
|
async function request (reqUrl, mth) {
|
|
const res = await req (reqUrl, {
|
|
method: mth || 'get',
|
|
headers: {
|
|
'User-Agent': UA,
|
|
referer: url,
|
|
},
|
|
postType: mth === 'post' ? 'form' : '',
|
|
});
|
|
return res.content;
|
|
}
|
|
|
|
//动态分类
|
|
async function home (filter) {
|
|
let html = await request(`${url}/api.php/getappapi.index/initV119`);
|
|
let res = JSON.parse(AES1(JSON.parse(html).data));
|
|
|
|
//一级
|
|
let classes = res.type_list.map(tp => ({
|
|
type_id: tp.type_id,
|
|
type_name: tp.type_name
|
|
})).filter(item => item.type_name !== "全部");
|
|
|
|
//二级
|
|
let filterObj = res.type_list.reduce((acc, tp) => {
|
|
if (tp.filter_type_list) {
|
|
acc[tp.type_id] = tp.filter_type_list.map(filter => ({
|
|
key: filter.name,
|
|
name: filter.list[0],
|
|
value: filter.list.map(item => ({
|
|
n: item,
|
|
v: item
|
|
}))
|
|
}));
|
|
}
|
|
return acc;
|
|
}, {});
|
|
|
|
let html2 = await request(`${url}/api.php/getappapi.index/rankListV134?type_id=0&page=1`);
|
|
let res2 = JSON.parse(AES1(JSON.parse(html2).data));
|
|
//推荐
|
|
let videos = res2.rank_list.map(item => ({
|
|
vod_id: item.vod_id,
|
|
vod_name: item.vod_name,
|
|
vod_pic: item.vod_pic,
|
|
vod_remarks: item.vod_remarks,
|
|
vod_year: item.vod_year
|
|
}));
|
|
|
|
return JSON.stringify({
|
|
class: classes,
|
|
filters: filterObj,
|
|
list: videos
|
|
});
|
|
|
|
}
|
|
|
|
|
|
//主页推荐
|
|
async function homeVod() {
|
|
|
|
}
|
|
|
|
//分类
|
|
async function category (tid, pg, filter, extend) {
|
|
|
|
let html = await request(`${url}/api.php/getappapi.index/typeFilterVodList?area=${extend.area ? extend.area : ''}&year=${extend.year ? extend.year : ''}&type_id=${tid}&page=${pg}&sort=${extend.sort ? extend.sort : ''}&lang=${extend.lang ? extend.lang : ''}&class=${extend.class ? extend.class : ''}`);
|
|
|
|
let res = JSON.parse(AES1(JSON.parse(html).data)).recommend_list;
|
|
|
|
let videos = res.map(item => ({
|
|
vod_id: item.vod_id,
|
|
vod_name: item.vod_name,
|
|
vod_pic: item.vod_pic,
|
|
vod_remarks: item.vod_remarks,
|
|
vod_year: ""
|
|
}));
|
|
|
|
|
|
return JSON.stringify ({
|
|
page: pg,
|
|
pagecount: 99999,
|
|
limit: 30,
|
|
total: 99999,
|
|
list: videos
|
|
});
|
|
}
|
|
|
|
//详情
|
|
async function detail (id) {
|
|
let html = await request (`${url}/api.php/getappapi.index/vodDetail?vod_id=${id}`);
|
|
let res = JSON.parse(AES1(JSON.parse(html).data));
|
|
|
|
let play_from = res.vod_play_list.map(item => item.player_info.show).join('$$$');
|
|
let play_url = res.vod_play_list.map(play => {
|
|
let p = play.player_info.parse; // 获取 parse
|
|
return play.urls.map(item => {
|
|
let name = item.name;
|
|
let url = item.url;
|
|
let urls = p
|
|
? (p.includes('?url=') || p.includes('?key=')) // 如果 p 包含 '?url=' 或 '?key='
|
|
? `${p}${url}` // 直接拼接 p 和 url
|
|
: `${p}|${url}` // 否则使用 '|' 拼接 p 和 url
|
|
: url; // 如果 p 不存在,则 urls 为 url
|
|
|
|
return `${name}$${urls}`;
|
|
}).join('#');
|
|
}).join('$$$');
|
|
|
|
var vod = [{
|
|
"type_name": res.vod.vod_class,
|
|
"vod_year": res.vod.vod_year,
|
|
"vod_area": res.vod.vod_area,
|
|
"vod_remarks": res.vod.vod_remarks,
|
|
"vod_content": res.vod.vod_content,
|
|
"vod_play_from": play_from,
|
|
"vod_play_url": play_url
|
|
}];
|
|
|
|
return JSON.stringify ({
|
|
list: vod
|
|
});
|
|
}
|
|
|
|
|
|
//播放
|
|
async function play (flag, id, flags) {
|
|
//
|
|
if (id.indexOf("|") > -1){
|
|
let html = await request (`${url}/api.php/getappapi.index/vodParse?parse_api=${id.split("|")[0]}&url=${encodeURIComponent(AES2(id.split("|")[1]))}`);
|
|
let res = JSON.parse(AES1(JSON.parse(html).data)).json;
|
|
let playUrl = JSON.parse(res).url;
|
|
return JSON.stringify ({
|
|
parse: 0,
|
|
url: playUrl
|
|
});
|
|
}
|
|
//
|
|
if (id.includes(".m3u8")){
|
|
let ids = id.includes('?url=') ? id.split("?url=")[1] : id;
|
|
return JSON.stringify ({
|
|
parse: 0,
|
|
url: ids
|
|
});
|
|
}
|
|
//
|
|
if (id.includes('?url=') || id.includes('?key=')) {
|
|
let html = await request (`${id}`);
|
|
let url = JSON.parse(html).url;
|
|
return JSON.stringify ({
|
|
parse: 0,
|
|
url: url
|
|
});
|
|
}
|
|
//
|
|
if (id.includes("nkvod.me")){
|
|
return JSON.stringify ({
|
|
parse: 1,
|
|
url: id
|
|
});
|
|
}
|
|
//金牌
|
|
if (id.includes("/vod/play/")){
|
|
let ids = id.split("/");
|
|
let t = Date.now();
|
|
let sign = CryptoJS.SHA1(CryptoJS.MD5(`id=${ids[5]}&nid=${ids[7]}&key=cb808529bae6b6be45ecfab29a4889bc&t=${t}`).toString()).toString();
|
|
let html = await req(`https://www.cfkj86.com/api/mw-movie/anonymous/v1/video/episode/url?id=${ids[5]}&nid=${ids[7]}`, {
|
|
method: 'GET',
|
|
headers: {
|
|
'User-Agent': UA,
|
|
'Referer': url,
|
|
"t": t,
|
|
"sign": sign
|
|
},
|
|
postType: '' // 非 POST 请求时设为空
|
|
});
|
|
|
|
let res = JSON.parse(html.content).data.playUrl
|
|
|
|
return JSON.stringify ({
|
|
parse: 0,
|
|
url: res
|
|
});
|
|
}
|
|
|
|
|
|
}
|
|
//搜索
|
|
async function search (wd, quick) {
|
|
const html = await request (`${url}/api.php/getappapi.index/searchList?keywords=${wd}&type_id=0&page=1`);
|
|
|
|
let res = JSON.parse(AES1(JSON.parse(html).data)).search_list;
|
|
|
|
let videos = res.map(item => ({
|
|
vod_id: item.vod_id,
|
|
vod_name: item.vod_name,
|
|
vod_pic: item.vod_pic,
|
|
vod_remarks: item.vod_remarks,
|
|
vod_year: item.vod_year
|
|
}));
|
|
|
|
const limit = 20;
|
|
return JSON.stringify ({
|
|
limit: limit,
|
|
list: videos
|
|
});
|
|
}
|
|
|
|
export function __jsEvalReturn() {
|
|
return {
|
|
init: init,
|
|
home: home,
|
|
homeVod: homeVod,
|
|
category: category,
|
|
detail: detail,
|
|
play: play,
|
|
search: search
|
|
};
|
|
} |