TBox/JS/gzys.js
2025-02-01 22:19:38 -05:00

321 lines
10 KiB
JavaScript

const webSite = 'https://api.zaqohu.com';
const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36';
//console.log('运行脚本');
//let key = Crypto.MD5('123456').toString();
//console.log(key);
//homeContent();
//categoryContent("6|9384",1,null);
//detailContent("66477");
//playerContent("https://www.czzy77.com/v_play/bXZfMTg5NTEtbm1fNDA=.html");
//searchContent("斗罗大陆");
//获取影视列表
async function categoryContent(tid, pg = 1, extend) {
let backData = new RepVideo();
try {
let listUrl = webSite;
let params='';
const tidArray = tid.split('|');
if (tidArray[1]) {
listUrl = listUrl + '/H5/Category/GetModuleList';
params = { show_id: tidArray[1], show_pid: tidArray[0], pageSize: 24, page: pg };
} else {
listUrl = listUrl + '/H5/Category/GetChoiceList';
params = { pid: tidArray[0], pageSize: 24, page: pg };
}
let pro = await req(listUrl, {
method: 'POST',
headers: {
'User-Agent': UA,
'Content-Type': 'application/json',
},
body: JSON.stringify({ params: aesEncode(JSON.stringify(params)) }),
});
let proData = await pro.text();
let obj2 = JSON.parse(proData);
let decryptBody = aesDecode(obj2.data);
let obj = JSON.parse(decryptBody);
let allVideo = obj.list;
let videos = [];
allVideo.forEach((e) => {
let vodUrl = e.vod_id || ''
let vodPic = e.c_pic || e.vod_pic
let vodName = e.c_name || e.vod_name
let vodDiJiJi = e.vod_continu || ''
let videoDet = new VideoList()
videoDet.vod_id = +vodUrl
videoDet.vod_pic = vodPic
videoDet.vod_name = vodName.trim()
videoDet.vod_remarks = vodDiJiJi.trim()
videos.push(videoDet)
});
backData.list = videos;
} catch (error) {
//console.error('Error in fetchData:', error);
backData.msg = error.statusText;
}
//console.log(JSON.stringify(backData));
return JSON.stringify(backData);
}
//获取影视详情信息
async function detailContent(ids) {
await toast('尝试获取影片信息',2);
let backData = new RepVideo();
const webUrl = `${webSite}/H5/Resource/GetVodInfo`
try {
let params = { vod_id: ids };
let pro = await req(webUrl, {
method: 'POST',
headers: {
'User-Agent': UA,
'Content-Type': 'application/json',
},
body: JSON.stringify({ params: aesEncode(JSON.stringify(params)) }),
});
let proData = await pro.text();
let obj2 = JSON.parse(proData);
let decryptBody = aesDecode(obj2.data);
let obj = JSON.parse(decryptBody).vodInfo;
let vod_content = obj.vod_use_content;
let vod_pic = obj.pic;
let vod_name = obj.vod_name;
let vod_year = obj.vod_year || '';
let vod_director = obj.vod_director || '';
let vod_actor = obj.vod_actor || '';
let vod_area = obj.vod_area || '';
await toast('尝试获取剧集信息',2);
let playlistUrl = `${webSite}/H5/Resource/GetOnePlayList`
let params2 = { vod_id: ids, pageSize: 10000, page: 1 };
let res = await req(playlistUrl, {
method: 'POST',
headers: {
'User-Agent': UA,
'Content-Type': 'application/json',
},
body: JSON.stringify({ params: aesEncode(JSON.stringify(params2)) }),
});
let playData = await res.text();
let obj3 = JSON.parse(playData);
let decryptBody2 = aesDecode(obj3.data);
let obj4 = JSON.parse(decryptBody2);
//let vod_play_url = obj4.urls.map((item) => item.name + '$' + item.url).join('#');
let vod_play_url = obj4.urls.map((item) => {
let name = item.name || '正片'; // 如果 item.name 为空,则使用 '正品'
return name + '$' + item.url;
}).join('#');
let detModel = new VideoDetail();
let videos = [];
detModel.vod_year = vod_year;
detModel.vod_director = vod_director;
detModel.vod_actor = vod_actor;
detModel.vod_area = vod_area;
detModel.vod_content = vod_content.replace(/\s+/g, '');
detModel.vod_pic = vod_pic;
detModel.vod_name = vod_name;
detModel.vod_play_from = '播放列表';
detModel.vod_play_url = vod_play_url;
detModel.vod_id = ids;
videos.push(detModel);
backData.list = videos;
} catch (error) {
//console.error('Error in fetchData:', error);
backData.msg = error.statusText;
}
//console.log(JSON.stringify(backData));
return JSON.stringify(backData);
}
//获取首页分类
async function homeContent() {
let backData = new RepVideo();
try {
let list = [];
let allClass = [
{
type_id: '3|',
type_name: '电影',
},
{
type_id: '4|',
type_name: '电视剧',
},
{
type_id: '5|',
type_name: '动漫',
},
{
type_id: '6|',
type_name: '综艺',
},
{
type_id: '3|19260',
type_name: 'TC抢先看',
},{
type_id: '3|15649',
type_name: '院线大片',
},{
type_id: '3|12814',
type_name: '网络新片',
},{
type_id: '3|9153',
type_name: '动作片',
},{
type_id: '3|12558',
type_name: '犯罪片',
},{
type_id: '3|14',
type_name: '喜剧片',
},{
type_id: '3|15511',
type_name: '惊悚恐怖片',
},{
type_id: '3|11517',
type_name: '科幻魔幻片',
},{
type_id: '3|466',
type_name: '情感剧情片',
},{
type_id: '3|15510',
type_name: 'Netflix电影',
},{
type_id: '4|17473',
type_name: '港剧',
},{
type_id: '4|15386',
type_name: '高分大陆剧',
},{
type_id: '4|17084',
type_name: '高分台剧',
},{
type_id: '5|127',
type_name: '国产动漫',
},{
type_id: '5|446',
type_name: '日本动漫',
},{
type_id: '5|128',
type_name: '欧美动漫',
},{
type_id: '5|14182',
type_name: '动漫电影',
},{
type_id: '5|6175',
type_name: '今日动漫',
},{
type_id: '5|10772',
type_name: '必追动漫',
},{
type_id: '5|12655',
type_name: '奇幻番剧榜',
},{
type_id: '5|8101',
type_name: '热血番剧榜',
},{
type_id: '6|6663',
type_name: '热门综艺',
},{
type_id: '6|14244',
type_name: 'NetFlix综艺',
},{
type_id: '6|7017',
type_name: '日韩综艺',
},{
type_id: '6|9384',
type_name: '卫视综艺',
},
];
//console.log(allClass.length);
allClass.forEach((e) => {
let videoClass = new VideoClass()
videoClass.type_id = e.type_id
videoClass.type_name = e.type_name
list.push(videoClass)
});
backData.class = list;
} catch (error) {
//console.error('Error in fetchData:', error);
backData.msg = error.statusText;
}
//console.log(JSON.stringify(backData));
return JSON.stringify(backData);
}
function aesEncode(str) {
const key = Crypto.enc.Utf8.parse('181cc88340ae5b2b')
const iv = Crypto.enc.Utf8.parse('4423d1e2773476ce')
let encData = Crypto.AES.encrypt(str, key, {
iv: iv,
mode: Crypto.mode.CBC,
padding: Crypto.pad.Pkcs7,
})
return encData.ciphertext.toString(Crypto.enc.Hex)
}
function aesDecode(str) {
const key = Crypto.enc.Utf8.parse('181cc88340ae5b2b')
const iv = Crypto.enc.Utf8.parse('4423d1e2773476ce')
str = Crypto.enc.Hex.parse(str)
return Crypto.AES.decrypt({ ciphertext: str }, key, {
iv: iv,
mode: Crypto.mode.CBC,
padding: Crypto.pad.Pkcs7,
}).toString(Crypto.enc.Utf8)
}
//解析获取播放地址
async function playerContent(vod_id) {
//await toast('正在分析直链...',2);
let backData = new RepVideoPlayUrl();
const headers = {'User-Agent': UA};
backData.url=vod_id;
backData.playUrl='';
backData.parse = 1;
backData.header = headersToString(headers);
//console.log(JSON.stringify(backData));
return JSON.stringify(backData);
}
async function searchContent(keyword) {
let backData = new RepVideo();
try {
let url = webSite + `/?s=${keyword}`
//console.log(url);
let pro = await req(url, {
headers: {
'User-Agent': UA
},
});
let proData = await pro.text();
let $ = cheerio.load(proData);
let allVideo = $('.search_list li');
let videos = [];
allVideo.each((_, e) => {
let url = $(e).find('a').attr('href');
let name = $(e).find('img.thumb').attr('alt');
let pic = $(e).find('img.thumb').attr('data-original');
let subTitle = $(e).find('.jidi span').text();
let hdinfo = $(e).find('.hdinfo .qb').text();
let videoDet = new VideoList();
videoDet.vod_id = url;
videoDet.vod_pic = pic;
videoDet.vod_name = name;
videoDet.vod_remarks = subTitle || hdinfo;
videos.push(videoDet);
})
backData.list = videos;
} catch (error) {
console.error('Error in fetchData:', error);
backData.msg = error.statusText;
}
//console.log(JSON.stringify(backData));
return JSON.stringify(backData);
}