260 lines
8.2 KiB
JavaScript
260 lines
8.2 KiB
JavaScript
import { Crypto, load, _ } from './lib/cat.js';
|
||
|
||
//地址
|
||
let siteUrl = 'https://cn1.91short.com';
|
||
let siteKey = '';
|
||
let siteType = 0;
|
||
let headers = {};
|
||
let nextPgKey = '';
|
||
let nextUrl = '';
|
||
const classes = [{
|
||
type_id: '/',
|
||
type_name: '短视频'
|
||
},{
|
||
type_id: '/film',
|
||
type_name: 'av电影'
|
||
}];
|
||
const filterObj = {
|
||
'/': [{'key': 'type', 'name': '类型', 'value': [{'n': '最新', 'v': ''},{'n': '推荐', 'v': 'short/recommend_home_list'},{'n': '美女正妹', 'v': 'short/label_related_list/Ug_pu_kskqY%3D'},{'n': '91大神', 'v': 'short/label_related_list/otDa4t6lDDQ%3D'},{'n': '国产高清', 'v': 'short/home_category_list/hd'},{'n': '排行', 'v': 'short/ranking_list'},{'n': '国产av', 'v': 'short/label_related_list/1Bd0Zzp8D_E%3D'},{'n': '门事件', 'v': 'short/label_related_list/3QW8lOdBcls%3D'},{'n': '大象传媒', 'v': 'short/label_related_list/F16wCJ3LmWY%3D'},{'n': '情趣综艺', 'v': 'short/label_related_list/-0S1LwkskU4%3D'}]}],
|
||
'/film': [{'key': 'type', 'name': '类型', 'value': [{'n': '推荐', 'v': '/home_recommend_list'}, {'n': '专辑', 'v': '/home_subject_list'}, {'n': '女优', 'v': '/home_actor_list'}, {'n': '无码', 'v': '/home_category_list/coded'},{'n': '中文', 'v': '/home_category_list/chinese_subtitle'},{'n': '动漫', 'v': '/home_list/jOSxa-4E27U%3D'},{'n': '经典3级', 'v': '/home_list/uZg0vDL8P8A%3D'},{'n': '欧美性爱', 'v': '/home_list/LblejiEnM6s%3D'},{'n': 'av解说', 'v': '/home_list/vJq_GzRiesQ%3D'}]}],
|
||
}
|
||
|
||
const MOBILE_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) {
|
||
let res = await req(reqUrl, {
|
||
method: 'get',
|
||
headers: {
|
||
'User-Agent': MOBILE_UA,
|
||
'Cookie': 'language=zh',
|
||
}
|
||
});
|
||
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) {
|
||
return JSON.stringify({
|
||
class: classes,
|
||
filters: filterObj
|
||
});
|
||
}
|
||
|
||
async function homeVod() {
|
||
return '{}';
|
||
}
|
||
|
||
async function category(tid, pg, filter, ext) {
|
||
if (pg <= 0) pg = 1;
|
||
let type = filterObj[tid][0]['value'][0]['v'];
|
||
if (ext['type']) type = ext['type'];
|
||
let url = siteUrl + tid + type;
|
||
const curKey = tid + type + pg;
|
||
if (pg > 1 && nextPgKey == curKey){
|
||
url = siteUrl + nextUrl;
|
||
}
|
||
const html = await request(url);
|
||
const $ = load(html);
|
||
let pgCount = pg;
|
||
if (pg == 1 && html.indexOf('let url=') > 0) {
|
||
pgCount = pg +1;
|
||
nextPgKey = tid + type + (pg+1);
|
||
nextUrl = html.split('let url="')[1].split('"')[0];
|
||
} else if (pg > 1 && html.indexOf('script name="cc"') > 0) {
|
||
pgCount = pg +1;
|
||
nextPgKey = tid + type + (pg+1);
|
||
nextUrl = $("script[name='cc']").text();
|
||
}
|
||
|
||
let videos = [];
|
||
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||
//女优
|
||
if(type == '/home_actor_list') {
|
||
videos = _.map($('a.actor_part'), (n) => {
|
||
let id = $(n).attr('href');
|
||
let name = $(n).attr('title');
|
||
let pic = $(n).find('img').attr('data-cover');
|
||
return {
|
||
vod_id: id,
|
||
vod_name: name,
|
||
vod_pic: js2Base + base64Encode(pic),
|
||
vod_remarks: ''
|
||
};
|
||
});
|
||
} else {
|
||
videos = _.map($('div.module-item-pic'), (n) => {
|
||
let id = $(n).find('a').attr('href');
|
||
let name = $(n).find('a').attr('title');
|
||
let pic = $(n).find('img').attr('data-cover');
|
||
return {
|
||
vod_id: id,
|
||
vod_name: name,
|
||
vod_pic: js2Base + base64Encode(pic),
|
||
vod_remarks: ''
|
||
};
|
||
});
|
||
}
|
||
return JSON.stringify({
|
||
list: videos,
|
||
page: pg,
|
||
pagecount: pgCount,
|
||
});
|
||
}
|
||
|
||
async function detail(id) {
|
||
try {
|
||
let video = {
|
||
vod_id: id,
|
||
vod_actor: 'Leospring',
|
||
vod_play_from: 'Leospring',
|
||
vod_director: 'Leospring',
|
||
vod_content: '该影视由leospring采集分享,公众号【蚂蚁科技杂谈】,请勿传播分享,仅供技术学习使用,请在学习后24小时内删除;由此产生的任何法律风险自行承担,与本作者无关!',
|
||
};
|
||
if (id.includes('actor_detail')) {
|
||
let playNameUrls = [];
|
||
video.vod_play_url = (await getAVPlayList(id, playNameUrls)).join('#');
|
||
} else {
|
||
video.vod_play_url = '播放$' + id;
|
||
}
|
||
const list = [video];
|
||
const result = { list };
|
||
return JSON.stringify(result);
|
||
} catch (e) {
|
||
console.log(e);
|
||
}
|
||
return null;
|
||
}
|
||
|
||
async function play(flag, id, flags) {
|
||
let playUrl = siteUrl + id;
|
||
try {
|
||
const html = await request(playUrl);
|
||
if (html.indexOf('url=') > 0) {
|
||
playUrl = html.split('url=')[1].split('"')[0];
|
||
return JSON.stringify({
|
||
parse: 0,
|
||
url: playUrl,
|
||
header: {
|
||
'Origin': 'https://ha.lilongfei.cn',
|
||
'Referer': 'https://ha.lilongfei.cn/',
|
||
'User-Agent': MOBILE_UA
|
||
}
|
||
});
|
||
}
|
||
} catch (error) {
|
||
console.log(error);
|
||
}
|
||
return JSON.stringify({
|
||
parse: 1,
|
||
url: playUrl,
|
||
});
|
||
|
||
}
|
||
|
||
async function search(wd, quick, pg) {
|
||
let url = siteUrl + '/search?wd=' + wd;
|
||
const html = await request(url);
|
||
const $ = load(html);
|
||
const js2Base = await js2Proxy(true, siteType, siteKey, 'img/', {});
|
||
let videos = _.map($('div.module-item-pic'), (n) => {
|
||
let id = $(n).find('a').attr('href');
|
||
let name = $(n).find('a').attr('title');
|
||
let pic = $(n).find('img').attr('data-cover');
|
||
return {
|
||
vod_id: id,
|
||
vod_name: name,
|
||
vod_pic: js2Base + base64Encode(pic),
|
||
vod_remarks: ''
|
||
};
|
||
});
|
||
return JSON.stringify({
|
||
list: videos,
|
||
});
|
||
}
|
||
|
||
async function getAVPlayList(id, playNameUrls) {
|
||
let url = siteUrl + id;
|
||
const html = await request(url);
|
||
const $ = load(html);
|
||
_.each($('div.module-item-pic > a'), (n) => {
|
||
playNameUrls.push($(n).attr('title') + '$' + $(n).attr('href'));
|
||
});
|
||
//是否包含下一页
|
||
let nextUrl = '';
|
||
if(html.indexOf('let url="') > 0) {
|
||
nextUrl = html.split('let url="')[1].split('"')[0];
|
||
} else if (html.indexOf('script name="cc"') > 0) {
|
||
nextUrl = $("script[name='cc']").text();
|
||
}
|
||
if (nextUrl.length > 0 && nextUrl.indexOf('cursor=0') == -1) {
|
||
return await getAVPlayList(nextUrl, playNameUrls);
|
||
} else {
|
||
return playNameUrls;
|
||
}
|
||
|
||
}
|
||
|
||
function picdecrypt(encryptStr) {
|
||
let key = Crypto.enc.Utf8.parse('Jui7X#cdleN^3eZb');
|
||
let decrypt = Crypto.AES.decrypt(encryptStr, key, {
|
||
mode: Crypto.mode.ECB,
|
||
padding: Crypto.pad.NoPadding
|
||
});
|
||
return Crypto.enc.Base64.stringify(decrypt).toString();
|
||
}
|
||
|
||
async function proxy(segments, headers) {
|
||
let what = segments[0];
|
||
let url = base64Decode(segments[1]);
|
||
if (what == 'img') {
|
||
var resp = await req(url, {
|
||
buffer: 2,
|
||
headers: {
|
||
Referer: 'https://api.douban.com/',
|
||
'User-Agent': MOBILE_UA,
|
||
},
|
||
});
|
||
return JSON.stringify({
|
||
code: resp.code,
|
||
buffer: 2,
|
||
content: picdecrypt(resp.content),
|
||
headers: resp.headers,
|
||
});
|
||
}
|
||
return JSON.stringify({
|
||
code: 500,
|
||
content: '',
|
||
});
|
||
}
|
||
|
||
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,
|
||
proxy: proxy,
|
||
};
|
||
}
|
||
|