297 lines
16 KiB
JavaScript
297 lines
16 KiB
JavaScript
/**
|
|
title: "灯泡网盘菠菜",
|
|
author: "",
|
|
logo: "https://www.dp88.net/wp-content/themes/dp/cx-func/image/logo.png",
|
|
more: {
|
|
sourceTag: "网盘"
|
|
}
|
|
*/
|
|
|
|
import { cheerio, load, _ } from 'assets://js/lib/cat.js';
|
|
let HOST = 'https://www.dp88.net';
|
|
let siteKey = "", siteType = "", sourceKey = "", ext = "";
|
|
let parseMap = {};
|
|
const UA = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36';
|
|
function init(cfg) {
|
|
siteKey = cfg.skey;
|
|
siteType = cfg.stype;
|
|
sourceKey = cfg.sourceKey;
|
|
ext = cfg.ext;
|
|
if (ext && ext.indexOf('http') === 0) HOST = ext;
|
|
}
|
|
async function request(url) {
|
|
try {
|
|
const resp = await req(url, {
|
|
method: 'GET',
|
|
headers: {
|
|
'user-agent': 'Mozilla/5.0 (Linux; Android 12; ALN-AL00 Build/HUAWEIALN-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.196 Mobile Safari/537.36',
|
|
'referer': HOST
|
|
}
|
|
});
|
|
return resp.content;
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
async function home() {
|
|
const classes = [
|
|
{ type_id: "3", type_name: "电影"},
|
|
{ type_id: "2", type_name: "电视剧" },
|
|
{ type_id: "4", type_name: "动漫" }
|
|
];
|
|
|
|
const filterObj={
|
|
|
|
"3":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"0"},{"n":"传记","v":"26"},{"n":"冒险","v":"16"},{"n":"剧情","v":"18"},{"n":"动作","v":"9"},{"n":"动画","v":"30"},{"n":"历史","v":"25"},{"n":"古装","v":"20"},{"n":"同性","v":"27"},{"n":"喜剧","v":"7"},{"n":"奇幻","v":"15"},{"n":"家庭","v":"29"},{"n":"恐怖","v":"13"},{"n":"悬疑","v":"11"},{"n":"情爱","v":"28"},{"n":"惊悚","v":"12"},{"n":"战争","v":"19"},{"n":"歌舞","v":"23"},{"n":"武侠","v":"21"},{"n":"灾难","v":"14"},{"n":"爱情","v":"8"},{"n":"犯罪","v":"17"},{"n":"科幻","v":"10"},{"n":"纪录片","v":"31"},{"n":"西部","v":"22"},{"n":"运动","v":"32"},{"n":"音乐","v":"24"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2025","v":"187"},{"n":"2024","v":"185"},{"n":"2023","v":"62"},{"n":"2022","v":"66"},{"n":"2021","v":"67"},{"n":"2020","v":"68"},{"n":"2019","v":"65"},{"n":"2018","v":"56"},{"n":"2017","v":"69"},{"n":"2016","v":"70"},{"n":"2015","v":"71"},{"n":"2014","v":"72"},{"n":"2013","v":"73"},{"n":"2012","v":"64"},{"n":"2011","v":"74"},{"n":"2010","v":"184"},{"n":"2009","v":"75"},{"n":"2008","v":"76"},{"n":"2007","v":"77"},{"n":"2006","v":"58"},{"n":"2005","v":"78"},{"n":"2004","v":"79"},{"n":"2003","v":"80"},{"n":"2002","v":"81"},{"n":"2001","v":"82"},{"n":"2000","v":"83"},{"n":"1999","v":"84"},{"n":"1998","v":"85"},{"n":"1997","v":"86"},{"n":"1996","v":"87"},{"n":"1995","v":"88"},{"n":"1994","v":"89"},{"n":"1993","v":"90"},{"n":"1992","v":"91"},{"n":"1991","v":"92"},{"n":"1990","v":"93"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"33"},{"n":"美国","v":"34"},{"n":"韩国","v":"35"},{"n":"日本","v":"36"},{"n":"香港","v":"37"},{"n":"台湾","v":"38"},{"n":"英国","v":"39"},{"n":"法国","v":"40"},{"n":"德国","v":"41"},{"n":"意大利","v":"42"},{"n":"西班牙","v":"43"},{"n":"印度","v":"44"},{"n":"泰国","v":"45"},{"n":"俄罗斯","v":"46"},{"n":"加拿大","v":"47"},{"n":"爱尔兰","v":"48"},{"n":"瑞典","v":"49"},{"n":"巴西","v":"50"},{"n":"丹麦","v":"51"},{"n":"伊朗","v":"52"},{"n":"波兰","v":"53"},{"n":"澳大利亚","v":"54"},{"n":"其他地区","v":"55"}]},{"key":"sort","name":"排序","value":[{"n":"时间","v":"0"},{"n":"评分","v":"1"}]}],
|
|
|
|
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"0"},{"n":"传记","v":"26"},{"n":"冒险","v":"16"},{"n":"剧情","v":"18"},{"n":"动作","v":"9"},{"n":"动画","v":"30"},{"n":"历史","v":"25"},{"n":"古装","v":"20"},{"n":"同性","v":"27"},{"n":"喜剧","v":"7"},{"n":"奇幻","v":"15"},{"n":"家庭","v":"29"},{"n":"恐怖","v":"13"},{"n":"悬疑","v":"11"},{"n":"情爱","v":"28"},{"n":"惊悚","v":"12"},{"n":"战争","v":"19"},{"n":"歌舞","v":"23"},{"n":"武侠","v":"21"},{"n":"灾难","v":"14"},{"n":"爱情","v":"8"},{"n":"犯罪","v":"17"},{"n":"科幻","v":"10"},{"n":"纪录片","v":"31"},{"n":"西部","v":"22"},{"n":"运动","v":"32"},{"n":"音乐","v":"24"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2025","v":"187"},{"n":"2024","v":"185"},{"n":"2023","v":"62"},{"n":"2022","v":"66"},{"n":"2021","v":"67"},{"n":"2020","v":"68"},{"n":"2019","v":"65"},{"n":"2018","v":"56"},{"n":"2017","v":"69"},{"n":"2016","v":"70"},{"n":"2015","v":"71"},{"n":"2014","v":"72"},{"n":"2013","v":"73"},{"n":"2012","v":"64"},{"n":"2011","v":"74"},{"n":"2010","v":"184"},{"n":"2009","v":"75"},{"n":"2008","v":"76"},{"n":"2007","v":"77"},{"n":"2006","v":"58"},{"n":"2005","v":"78"},{"n":"2004","v":"79"},{"n":"2003","v":"80"},{"n":"2002","v":"81"},{"n":"2001","v":"82"},{"n":"2000","v":"83"},{"n":"1999","v":"84"},{"n":"1998","v":"85"},{"n":"1997","v":"86"},{"n":"1996","v":"87"},{"n":"1995","v":"88"},{"n":"1994","v":"89"},{"n":"1993","v":"90"},{"n":"1992","v":"91"},{"n":"1991","v":"92"},{"n":"1990","v":"93"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"33"},{"n":"美国","v":"34"},{"n":"韩国","v":"35"},{"n":"日本","v":"36"},{"n":"香港","v":"37"},{"n":"台湾","v":"38"},{"n":"英国","v":"39"},{"n":"法国","v":"40"},{"n":"德国","v":"41"},{"n":"意大利","v":"42"},{"n":"西班牙","v":"43"},{"n":"印度","v":"44"},{"n":"泰国","v":"45"},{"n":"俄罗斯","v":"46"},{"n":"加拿大","v":"47"},{"n":"爱尔兰","v":"48"},{"n":"瑞典","v":"49"},{"n":"巴西","v":"50"},{"n":"丹麦","v":"51"},{"n":"伊朗","v":"52"},{"n":"波兰","v":"53"},{"n":"澳大利亚","v":"54"},{"n":"其他地区","v":"55"}]},{"key":"sort","name":"排序","value":[{"n":"时间","v":"0"},{"n":"评分","v":"1"}]}],
|
|
|
|
"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"0"},{"n":"传记","v":"26"},{"n":"冒险","v":"16"},{"n":"剧情","v":"18"},{"n":"动作","v":"9"},{"n":"动画","v":"30"},{"n":"历史","v":"25"},{"n":"古装","v":"20"},{"n":"同性","v":"27"},{"n":"喜剧","v":"7"},{"n":"奇幻","v":"15"},{"n":"家庭","v":"29"},{"n":"恐怖","v":"13"},{"n":"悬疑","v":"11"},{"n":"情爱","v":"28"},{"n":"惊悚","v":"12"},{"n":"战争","v":"19"},{"n":"歌舞","v":"23"},{"n":"武侠","v":"21"},{"n":"灾难","v":"14"},{"n":"爱情","v":"8"},{"n":"犯罪","v":"17"},{"n":"科幻","v":"10"},{"n":"纪录片","v":"31"},{"n":"西部","v":"22"},{"n":"运动","v":"32"},{"n":"音乐","v":"24"}]},{"key":"year","name":"年代","value":[{"n":"全部","v":"0"},{"n":"2025","v":"187"},{"n":"2024","v":"185"},{"n":"2023","v":"62"},{"n":"2022","v":"66"},{"n":"2021","v":"67"},{"n":"2020","v":"68"},{"n":"2019","v":"65"},{"n":"2018","v":"56"},{"n":"2017","v":"69"},{"n":"2016","v":"70"},{"n":"2015","v":"71"},{"n":"2014","v":"72"},{"n":"2013","v":"73"},{"n":"2012","v":"64"},{"n":"2011","v":"74"},{"n":"2010","v":"184"},{"n":"2009","v":"75"},{"n":"2008","v":"76"},{"n":"2007","v":"77"},{"n":"2006","v":"58"},{"n":"2005","v":"78"},{"n":"2004","v":"79"},{"n":"2003","v":"80"},{"n":"2002","v":"81"},{"n":"2001","v":"82"},{"n":"2000","v":"83"},{"n":"1999","v":"84"},{"n":"1998","v":"85"},{"n":"1997","v":"86"},{"n":"1996","v":"87"},{"n":"1995","v":"88"},{"n":"1994","v":"89"},{"n":"1993","v":"90"},{"n":"1992","v":"91"},{"n":"1991","v":"92"},{"n":"1990","v":"93"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":"0"},{"n":"大陆","v":"33"},{"n":"美国","v":"34"},{"n":"韩国","v":"35"},{"n":"日本","v":"36"},{"n":"香港","v":"37"},{"n":"台湾","v":"38"},{"n":"英国","v":"39"},{"n":"法国","v":"40"},{"n":"德国","v":"41"},{"n":"意大利","v":"42"},{"n":"西班牙","v":"43"},{"n":"印度","v":"44"},{"n":"泰国","v":"45"},{"n":"俄罗斯","v":"46"},{"n":"加拿大","v":"47"},{"n":"爱尔兰","v":"48"},{"n":"瑞典","v":"49"},{"n":"巴西","v":"50"},{"n":"丹麦","v":"51"},{"n":"伊朗","v":"52"},{"n":"波兰","v":"53"},{"n":"澳大利亚","v":"54"},{"n":"其他地区","v":"55"}]},{"key":"sort","name":"排序","value":[{"n":"时间","v":"0"},{"n":"评分","v":"1"}]}]};
|
|
|
|
return JSON.stringify({
|
|
class: classes,
|
|
filters: filterObj
|
|
});
|
|
}
|
|
|
|
async function homeVod() {
|
|
const link = `${HOST}/`;
|
|
const html = await request(link);
|
|
const $ = load(html);
|
|
const items = $('.pic-list li');
|
|
const videos = [];
|
|
|
|
_.map(items, (item) => {
|
|
const $item = $(item);
|
|
const a = $item.find('a');
|
|
const vod_id = a.attr('href') || '';
|
|
const vod_name = $item.find('h3 b').text().trim() || '未知标题';
|
|
const img = $item.find('img');
|
|
const vod_pic_url = img.attr('data-original') || img.attr('src') || '';
|
|
const vod_remarks = $item.find('.s1').text().trim() || "暂无分类";
|
|
const vod_score = $item.find('.s2').text().trim() || "暂无评分";
|
|
|
|
videos.push({
|
|
'vod_id': JSON.stringify({ id: vod_id, title: vod_name }),
|
|
'vod_name': vod_name,
|
|
'vod_pic': vod_pic_url,
|
|
'vod_remarks': vod_remarks + (vod_score !== 'N/A' ? ` ${vod_score}分` : '')
|
|
});
|
|
});
|
|
|
|
return JSON.stringify({ list: videos });
|
|
}
|
|
|
|
async function category(tid, pg, filter, extend) {
|
|
if (pg <= 0) pg = 1;
|
|
const homeResult = JSON.parse(await home());
|
|
const filterObj = homeResult.filters;
|
|
if (!filterObj) return null;
|
|
const filterGroup = filterObj[tid];
|
|
if (!filterGroup) return null;
|
|
const area = getFilterValue(filterGroup, 'area', extend);
|
|
const by = getFilterValue(filterGroup,'sort', extend);
|
|
const classValue = getFilterValue(filterGroup, 'class', extend);
|
|
const year = getFilterValue(filterGroup, 'year', extend);
|
|
const cateId = getFilterValue(filterGroup, 'cateId', extend);
|
|
|
|
const link = `${HOST}/list/${by}_${area}_${year}_${cateId}_${tid}/${pg}/`;
|
|
const html = await request(link);
|
|
const $ = load(html);
|
|
const items = $('.pic-list li');
|
|
const videos = [];
|
|
_.map(items, (item) => {
|
|
const $item = $(item);
|
|
const a = $item.find('a');
|
|
const vod_id = a.attr('href');
|
|
const vod_name = $item.find('h3 b').text().trim() || '未知标题';
|
|
const img = $item.find('img');
|
|
const vod_pic_url = img.attr('data-original') || img.attr('src') || '';
|
|
const vod_remarks = $item.find('.s1').text().trim() || "暂无备注";
|
|
const vod_score = $item.find('.s2').text().trim() || "暂无评分";
|
|
|
|
videos.push({
|
|
'vod_id': JSON.stringify({ id: vod_id, title: vod_name }),
|
|
'vod_name': vod_name,
|
|
'vod_pic': vod_pic_url,
|
|
'vod_remarks': vod_remarks + (vod_score !== 'N/A' ? ` ${vod_score}分` : '')
|
|
});
|
|
});
|
|
|
|
return JSON.stringify({ list: videos });
|
|
}
|
|
|
|
function getFilterValue(filterGroup, key, extend) {
|
|
if (!Array.isArray(filterGroup) || filterGroup.length === 0) return '';
|
|
const filterItem = filterGroup.find(item => item.key === key);
|
|
if (!filterItem) return '';
|
|
if (!Array.isArray(filterItem.value) || filterItem.value.length === 0) return '';
|
|
const userValue = extend[key];
|
|
if (userValue) {
|
|
const option = filterItem.value.find(opt => opt.v === userValue);
|
|
return option? option.v : '';
|
|
}
|
|
return filterItem.value[0].v;
|
|
}
|
|
|
|
async function search(wd) {
|
|
const searchUrl = `${HOST}/?s=${encodeURIComponent(wd)}`;
|
|
|
|
try {
|
|
const html = await request(searchUrl);
|
|
const $ = load(html);
|
|
|
|
const items = $('.sr_lists li');
|
|
const videos = [];
|
|
|
|
Array.from(items).forEach((item) => {
|
|
const $item = $(item);
|
|
const a = $item.find('h3 a');
|
|
const img = $item.find('.sr_img img');
|
|
const vod_id = a.attr('href');
|
|
if (!vod_id) return;
|
|
const vod_name = a.text().trim() || '未知标题';
|
|
const vod_pic = img.attr('src');
|
|
if (vod_name.toLowerCase().includes(wd.toLowerCase())) {
|
|
videos.push({
|
|
'vod_id': JSON.stringify({ id: vod_id, title: vod_name }),
|
|
'vod_name': vod_name,
|
|
'vod_pic': vod_pic
|
|
});
|
|
}
|
|
});
|
|
|
|
return JSON.stringify({ list: videos });
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async function detail(id) {
|
|
const ids = JSON.parse(id);
|
|
|
|
try {
|
|
const html = await request(ids.id);
|
|
if (!html) return JSON.stringify({ list: [], error: 'HTML内容为空' });
|
|
const $ = load(html);
|
|
const vod = {
|
|
vod_id: ids.id,
|
|
vod_name: $('h1').text().trim(),
|
|
vod_type: $('.content-rt p:contains("类型:") a').map((_, el) => $(el).text().trim()).get().join('/'),
|
|
vod_year: $('.content-rt .year').text().replace(/[()]/g, '').trim(),
|
|
vod_area: $('.content-rt p:contains("地区:")').text().replace('地区:', '').trim(),
|
|
vod_actor: $('.content-rt p:contains("主演:")').text().replace('主演:', '').trim(),
|
|
vod_director: $('.content-rt p:contains("导演:")').text().replace('导演:', '').trim(),
|
|
vod_pic: $('.img img').attr('src'),
|
|
vod_content: $('.movie-introduce .zk_a').text().replace('展开', '').trim(),
|
|
vod_play_from: '',
|
|
vod_play_url: ''
|
|
};
|
|
const diskGroups = {};
|
|
$('.pd-row').each((_, row) => {
|
|
const sourceName = $(row).find('h2').text().trim();
|
|
$(row).find('.lip a').each((_, link) => {
|
|
const href = $(link).attr('href');
|
|
if (href && href.startsWith('magnet:?')) return;
|
|
const title = $(link).attr('title') || $(link).text();
|
|
if (!diskGroups[sourceName]) { diskGroups[sourceName] = [];
|
|
}
|
|
diskGroups[sourceName].push(`${title}$push://${href}`);
|
|
});
|
|
});
|
|
const diskPlayFrom = [];
|
|
const diskPlayUrl = [];
|
|
for (const [sourceName, items] of Object.entries(diskGroups)) {
|
|
if (items.length > 0) {
|
|
diskPlayFrom.push(sourceName);
|
|
diskPlayUrl.push(items.join('#'));
|
|
}
|
|
}
|
|
const onlinePlayFrom = [];
|
|
const onlinePlayUrl = [];
|
|
$('#playlist-js option').each((_, option) => {
|
|
const sourceName = $(option).text().trim();
|
|
const sourceId = $(option).val();
|
|
const episodes = [];
|
|
$(`#tabid-${sourceId} a`).each((_, link) => {
|
|
const href = $(link).attr('href');
|
|
if (href && href.startsWith('magnet:?')) return;
|
|
const epName = $(link).text().trim();
|
|
episodes.push(`${epName}$${href}`);
|
|
});
|
|
if (episodes.length) {
|
|
onlinePlayFrom.push(sourceName);
|
|
onlinePlayUrl.push(episodes.join('#'));
|
|
}
|
|
});
|
|
vod.vod_play_from = [
|
|
...diskPlayFrom,
|
|
...onlinePlayFrom
|
|
].join('$$$');
|
|
vod.vod_play_url = [
|
|
...diskPlayUrl,
|
|
...onlinePlayUrl
|
|
].join('$$$');
|
|
return JSON.stringify({ list: [vod] });
|
|
} catch (error) {
|
|
return JSON.stringify({
|
|
list: [],
|
|
error: `解析失败: ${error.message}`
|
|
});
|
|
}
|
|
}
|
|
|
|
async function play(flag, id, flags) {
|
|
try {
|
|
if (id.startsWith('push://')) {
|
|
return JSON.stringify({
|
|
parse: 0,
|
|
url: id,
|
|
header: {}
|
|
});
|
|
}
|
|
const html = await request(id);
|
|
const $ = load(html);
|
|
const iframeSrc = $('iframe').attr('src');
|
|
let m3u8Url;
|
|
if (iframeSrc.includes('?url=')) {
|
|
const parts = iframeSrc.split('?url=');
|
|
m3u8Url = parts[1];
|
|
} else {
|
|
m3u8Url = iframeSrc;
|
|
}
|
|
if (!m3u8Url.match(/https?:\/\/[^\s]+\.m3u8/)) {
|
|
throw new Error('未找到有效的 m3u8 链接');
|
|
}
|
|
return JSON.stringify({
|
|
parse: 0,
|
|
url: m3u8Url,
|
|
header: {
|
|
'User-Agent': UA,
|
|
'Referer': id
|
|
}
|
|
});
|
|
} catch (error) {
|
|
return JSON.stringify({
|
|
parse: 1,
|
|
error: error.message
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
export function __jsEvalReturn() {
|
|
return {
|
|
init: init,
|
|
home: home,
|
|
homeVod: homeVod,
|
|
detail: detail,
|
|
category: category,
|
|
play: play,
|
|
proxy: null,
|
|
search: search,
|
|
extResult: null
|
|
};
|
|
} |