import { Crypto, load, _, html } from './lib/cat.js'; let siteUrl ='https://www.yjys01.com'; let siteKey = ''; let siteType = 0; let headers = { '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', 'Referer': siteUrl + '/' }; async function request(reqUrl, postData, post) { let res = await req(reqUrl, { method: post ? 'post' : 'get', headers: headers, data: postData || {}, postType: post ? '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) { let classes = [{ type_id: '0', type_name: '电影', },{ type_id: '1', type_name: '剧集'}]; let filterObj = await genFilterObj(); return JSON.stringify({ class: classes, filters: filterObj }); } async function homeVod() { } async function category(tid, pg, filter, ext) { if (!pg) pg = 1; if (pg <= 0) pg = 1; let type = ext['type']; let year = ext['year']; let area = ext['area']; let url = `${siteUrl}${type}/${pg}?type=${tid}`; if (area) { url = url + '&area=' + area; } if(year) { url = url + '&year=' + year; } let videos = await getVideos(url); return JSON.stringify({ list: videos, page: pg, }); } async function detail(id) { try { const html = await request(siteUrl + id); let $ = load(html); let content = '该影视由leospring采集分享,公众号【蚂蚁科技杂谈】,请勿传播分享,仅供技术学习使用,请在学习后24小时内删除;由此产生的任何法律风险自行承担,与本作者无关!' + $('#synopsis > div.card-body').text(); let director = _.map($('div.col.mb-2 > p:nth-child(2) > a'), (n) => { return $(n).text(); }).join(' '); let actor = _.map($('div.col.mb-2 > p:nth-child(4) > a'), (n) => { return $(n).text(); }).join(' '); const playNameUrls = _.map($('#play-list > div > a'), item => { return $(item).text() + '$' + $(item).attr('href').split(';')[0]; }).join('#'); const downloadList = _.map($('#download-list > tr'), item => { return $($(item).find('td')[1]).text() + '$'+ $($(item).find('td:nth-child(3) > a')[0]).attr('href').split(';')[0]; }).join('#'); const torrentList = _.map($('#torrent-list > ul > li > div > div > a'), item => { return $(item).attr('download') + '$' + $(item).attr('href').split(';')[0]; }).join('#'); const video = { vod_play_from: '直链$$$磁力', vod_play_url: playNameUrls + '$$$' + downloadList, vod_content: content, vod_director: director, vod_actor: actor, }; 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 + '/index.php?m=vod-search'; // const html = await request(url, {wd: wd}, true); // const $ = load(html); // let data = $('#data_list > li'); // let videos = _.map(data, (n) => { // let id = $($(n).find('div.pic > a')[0]).attr('href'); // let pic = $($(n).find('div.pic > a > img')[0]).attr('data-src'); // let name = $($(n).find(' span.sTit')[0]).text(); // return { // vod_id: id, // vod_name: name, // vod_pic: pic, // vod_remarks: '', // }; // }); // return JSON.stringify({ // list: videos, // }); } async function play(flag, id, flags) { if(id.endsWith('.torrent')) { return JSON.stringify({ parse: 0, url: siteUrl + id, }); } if(id.startsWith('ed2k://') || id.startsWith('magnet:')) { return JSON.stringify({ parse: 0, url: id, }); } let playUrl = siteUrl + id; const html = await request(playUrl); const $ = load(html); let pid='176078'; for(const n of $('script')) { if($(n).text().indexOf("var pid = ") >= 0) { pid = $(n).text().split("var pid = ")[1].split(";")[0]; } } //console.log('pid', pid); let dt = new Date().getTime(); //dt = 1709977071948; //2ed1ccdea49c0fa7e1af0f8507378f0a //2ed1ccdea49c0fa7e1af0f8507378f0a let md5Data = Crypto.MD5(pid + '-' + dt).toString().toLowerCase(); //console.log('md5', md5Data); let key = Crypto.enc.Utf8.parse(md5Data.substring(0, 16)); //console.log('key', key); let encData = Crypto.AES.encrypt(pid + '-' + dt, key, { mode: Crypto.mode.ECB, padding: Crypto.pad.Pkcs7 }); //"+OvtZJce3mznh0+NjhWgl4Nv6KAPToTft1c01+nUYi4=" //C0ERRC3eRyA5Q/LbZ6sGyv3K1vxT8EPOIXIqWk8XZEw= //console.log(encData + ''); let sg = encData.ciphertext.toString(Crypto.enc.Hex).toUpperCase(); //console.log('sg', sg); let url = `${siteUrl}/lines?t=${dt}&sg=${sg}&pid=${pid}`; //console.log('url', url); let res = await req(url, { method: 'get', headers: headers, }) playUrl = JSON.parse(res.content).data.url3; //console.log('url', res.content); return JSON.stringify({ parse: 0, url: playUrl, }); return JSON.stringify({ parse: 1, url: playUrl, }); } function base64Decode(text) { return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); } async function genFilterObj() { const url = siteUrl + '/s/all'; const html = await request(url); const $ = load(html); let types = _.map($('dl:nth-child(2) > dd > a'), item => { return { 'v': $(item).attr('href').split(';')[0], 'n': $(item).text(), } }); let areas = _.map($('dl:nth-child(3) > dd > a'), item => { return { 'n': $(item).text(), 'v': $(item).text().replace('不限',''), } }); let years = _.map($('dl:nth-child(4) > dd > a'), item => { return { 'n': $(item).text(), 'v': $(item).text().replace('不限',''), } }); return { '0': [{'key': 'type', 'name': '类型', 'init': '/s/all','value': types}, {'key': 'area', 'name': '地区', 'value': areas}, {'key': 'year', 'name': '年份', 'value': years} ], '1': [{'key': 'type', 'name': '类型', 'init': '/s/all', 'value': types}, {'key': 'area', 'name': '地区', 'value': areas}, {'key': 'year', 'name': '年份', 'value': years} ], }; } async function getVideos(url) { const html = await request(url); const $ = load(html); const cards = $('div.card.card-sm.card-link') let videos = _.map(cards, (n) => { let id = $($(n).find('a')[0]).attr('href').split(';')[0]; let name = $($(n).find('h3')[0]).text(); let pic = $($(n).find('img')[0]).attr('src'); let remarks = $($(n).find('span')[0]).text().trim(); return { vod_id: id, vod_name: name, vod_pic: pic, vod_remarks: remarks, }; }); return videos; } export function __jsEvalReturn() { return { init: init, home: home, homeVod: homeVod, category: category, detail: detail, play: play, search: search, }; }