TBox/JS/subaibai.js
2025-02-01 22:21:11 -05:00

294 lines
11 KiB
JavaScript

const webSite = 'https://www.subaibaiys.com';
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';
let cookie = '';
const ignoreClassName = ['首页', '公告留言'];
//console.log('运行脚本');
//let key = Crypto.MD5('123456').toString();
//console.log(key);
//homeContent();
//categoryContent("https://www.subaibaiys.com/anime-drama",2,null);
//detailContent("https://www.subaibaiys.com/movie/53098.html");
//playerContent("https://www.subaibaiys.com/v_play/bXZfNTY4OTMtbm1fMQ==.html");
//searchContent("斗罗大陆");
//sliderBypass('https://www.subaibaiys.com');
async function sliderBypass(url) {
let pro = await req(url, {
headers: {
'User-Agent': UA,
Cookie: cookie,
},
});
let proData = await pro.text();
const $ = cheerio.load(proData);
if ($('title').text() === '滑动验证') {
let slide_js = webSite + $('body script').attr('src');
let slide_js_res = await req(slide_js, {
headers: {
'User-Agent': UA,
},
});
let slide_js_res_data = await slide_js_res.text();
let vd_url = webSite + slide_js_res_data.match(/\/a20be899_96a6_40b2_88ba_32f1f75f1552_yanzheng_huadong\.php\?type=.*?&key=/)[0];
let [, key, value] = slide_js_res_data.match(/key="(.*?)",value="(.*?)";/);
vd_url = vd_url + `${key}&value=${md5encode(stringtoHex(value))}`;
let vd_res = await req(vd_url, {
headers: {
'User-Agent': UA,
Referer: webSite + '/',
},
});
let jsonHeaders = await vd_res.headers;
// 提取 set-cookie 字段
const headers = JSON.parse(jsonHeaders);
const setCookie = headers["set-cookie"];
//console.log('setCookie:' + setCookie);
cookie = setCookie[0].split(";")[0];
//console.log('取出cookie:' + cookie);
pro = await req(url, {
headers: {
'User-Agent': UA,
Cookie: cookie,
},
});
proData = await pro.text();
}
function stringtoHex(acSTR) {
var val = ''
for (var i = 0; i <= acSTR.length - 1; i++) {
var str = acSTR.charAt(i)
var code = str.charCodeAt()
val += parseInt(code) + 1
}
return val
}
function md5encode(word) {
return Crypto.MD5(word).toString()
}
return proData;
}
function isIgnoreClassName(className) {
for (let index = 0; index < ignoreClassName.length; index++) {
const element = ignoreClassName[index];
if (className.indexOf(element) !== -1) {
return true;
}
}
return false;
}
//获取影视列表
async function categoryContent(tid, pg = 1, extend) {
let backData = new RepVideo();
try {
let listUrl = tid;
if (pg > 1) listUrl += '/page/' + pg;
let proData = await sliderBypass(listUrl);
const $ = cheerio.load(proData);
let allVideo = $('.bt_img.mi_ne_kd.mrb li');
let videos = [];
allVideo.each((_, e) => {
let vodUrl = $(e).find('a').attr('href');
let vodPic = $(e).find('img.thumb').attr('data-original');
let vodName = $(e).find('img.thumb').attr('alt');
let remarks = $(e).find('.jidi').text() || $(e).find('.hdinfo').text().trim();
let videoDet = new VideoList();
videoDet.vod_id = vodUrl;
videoDet.vod_pic = vodPic;
videoDet.vod_name = vodName;
videoDet.vod_remarks = remarks;
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) {
let backData = new RepVideo();
const webUrl = ids;
try {
let proData = await sliderBypass(webUrl);
const $ = cheerio.load(proData);
let vod_content = $('.yp_context').text();
let vod_pic = $('.dyimg img').attr('src');
let vod_name = $('.moviedteail_tt h1').text();
let detList = $('ul.moviedteail_list li');
let vod_year = '';
let vod_director = '';
let vod_actor = '';
let vod_area = '';
let playlist = $('.stui-content__playlist');
let playSources = $('.nav.nav-tabs.pull-right li a');
let vod_play_from = '播放列表';
detList.each((_, e) => {
const element = $(e);
if (element.text().includes('年份')) {
vod_year = element.text().replace('年份:', '');
} else if (element.text().includes('导演')) {
vod_director = element.text().replace('导演:', '');
} else if (element.text().includes('主演')) {
vod_actor = element.text().replace('主演:', '');
} else if (element.text().includes('地区')) {
vod_area = element.text().replace('地区:', '');
}
});
let juJiDocment = $('.paly_list_btn').find('a');
let vod_play_url = '';
juJiDocment.each((index, e) => {
const element = $(e);
vod_play_url += element.text();
vod_play_url += '$';
vod_play_url += element.attr('href');
if (index !== juJiDocment.length - 1) {
vod_play_url += '#';
}
});
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 = 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() {
await toast('尝试加载分类信息',2);
let backData = new RepVideo();
try {
const proData = await sliderBypass(webSite);
const $ = cheerio.load(proData);
let list = [];
let allClass = $('ul.navlist a');
allClass.each((_, e) => {
let isIgnore = isIgnoreClassName($(e).text());
if (isIgnore) {
return;
}
let type_name = $(e).text();
let url = $(e).attr('href');
if (url.length > 0 && type_name.length > 0) {
let videoClass = new VideoClass();
videoClass.type_id = url;
videoClass.type_name = 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);
}
//解析获取播放地址
async function playerContent(vod_id) {
let backData = new RepVideoPlayUrl();
let url = vod_id;
const headers = {'User-Agent': UA,'Origin': 'https://www.subaibaiys.com'};
try {
let proData = await sliderBypass(url);
let $ = cheerio.load(proData);
const isVipOnly = $('.noplay').text();
if (isVipOnly) {
backData.msg = isVipOnly;
}
let iframe = $('iframe').filter((i, iframe) => $(iframe).attr('src').includes('Cloud'));
if (0 < iframe.length) {
let pro = await req($(iframe[0]).attr('src'), {
headers: {
Referer: url,
'User-Agent':
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
},
});
const iframeHtml = pro.data;
let code = iframeHtml.match(/var url = '(.*?)'/)[1].split('').reverse().join('');
console.log('code:'+code);
let temp = '';
for (let i = 0; i < code.length; i += 2) {
temp += String.fromCharCode(parseInt(code[i] + code[i + 1], 16));
}
const playUrl = temp.substring(0, (temp.length - 7) / 2) + temp.substring((temp.length - 7) / 2 + 7);
backData.url = playUrl;
} else {
let playUrl = 'error';
const script = $('script');
const js = script.filter((i, script) => $(script).text().includes('window.wp_nonce')).text() ?? '';
const group = js.match(/(var.*)eval\((\w*\(\w*\))\)/);
console.log('group:'+group);
const md5 = Crypto;
const result = eval(group[1] + group[2]);
console.log('result2:'+result);
playUrl = result.match(/url:.*?['"](.*?)['"]/)[1];
console.log('playUrl:'+playUrl);
backData.url = playUrl;
}
} catch (error) {
console.error('Error in fetchData:', error);
backData.msg = error.statusText;
}
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 proData = await sliderBypass(url);
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);
}