153 lines
6.9 KiB
JavaScript
153 lines
6.9 KiB
JavaScript
// 下面是发布代码
|
|
const webSite = 'https://m.douban.com';
|
|
const UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36';
|
|
//调试完毕后,屏蔽下方测试的代码
|
|
//homeContent();
|
|
//categoryContent("1", 1, JSON.stringify({类型: "喜剧",地区: "华语",年代: "2020年代", 排序: "近期热度"}));
|
|
|
|
//获取首页分类和推荐视频
|
|
async function homeContent() {
|
|
let backData = new RepVideo();
|
|
// 定义分类数据
|
|
const allClass = [
|
|
{ type_id: "1", type_name: "找电视剧" },
|
|
{ type_id: "2", type_name: "找电影" },
|
|
{ type_id: "3", type_name: "找综艺" }
|
|
];
|
|
const createLabelOptions = (labels) => labels.map(label => ({ n: label, v: label === "全部" || label === "近期热度" ? "" : label }));
|
|
const tvLabels = {
|
|
types: ["全部", "喜剧", "爱情", "悬疑", "动画", "武侠", "古装", "家庭", "犯罪", "科幻", "恐怖", "历史", "战争", "动作", "冒险", "传记", "剧情", "奇幻", "惊悚", "灾难", "歌舞", "音乐"],
|
|
areas: ["全部", "华语", "欧美", "国外", "韩国", "日本", "中国大陆", "中国香港", "美国", "英国", "泰国", "中国台湾", "意大利", "法国", "德国", "西班牙", "俄罗斯", "瑞典", "巴西", "丹麦", "印度", "加拿大", "爱尔兰", "澳大利亚"],
|
|
years: ["全部", "2020年代", "2024", "2023", "2022", "2021", "2020", "2019", "2010年代", "2000年代", "90年代", "80年代", "70年代", "60年代", "更早"],
|
|
platforms: ["全部", "腾讯视频", "爱奇艺", "优酷", "湖南卫视", "Netflix", "HBO", "BBC", "NHK", "CBS", "NBC", "tvN"],
|
|
sortOptions: [ "近期热度", "综合排序","首播时间", "高分优先"]
|
|
};
|
|
|
|
const movieLabels = {
|
|
types: ["全部", "喜剧", "爱情", "动作", "科幻", "动画", "悬疑", "犯罪", "惊悚", "冒险", "音乐", "历史", "奇幻", "恐怖", "战争", "传记", "歌舞", "武侠", "情色", "灾难", "西部", "纪录片", "短片"],
|
|
areas: ["全部", "华语", "欧美", "韩国", "日本", "中国大陆", "美国", "中国香港", "中国台湾", "英国", "法国", "德国", "意大利", "西班牙", "印度", "泰国", "俄罗斯", "加拿大", "澳大利亚", "爱尔兰", "瑞典", "巴西", "丹麦"],
|
|
years: ["全部", "2020年代", "2024", "2023", "2022", "2021", "2020", "2019", "2010年代", "2000年代", "90年代", "80年代", "70年代", "60年代", "更早"],
|
|
platforms: ["全部", "腾讯视频", "爱奇艺", "优酷", "湖南卫视", "Netflix", "HBO", "BBC", "NHK", "CBS", "NBC", "tvN"],
|
|
sortOptions: [ "近期热度", "综合排序","首播时间", "高分优先"]
|
|
};
|
|
|
|
const varietyLabels = {
|
|
types: ["全部", "真人秀", "脱口秀", "音乐", "歌舞"],
|
|
areas: ["全部", "华语", "欧美", "国外", "韩国", "日本", "中国大陆", "中国香港", "美国", "英国", "泰国", "中国台湾", "意大利", "法国", "德国", "西班牙", "俄罗斯", "瑞典", "巴西", "丹麦", "印度", "加拿大", "爱尔兰", "澳大利亚"],
|
|
years: ["全部", "2020年代", "2024", "2023", "2022", "2021", "2020", "2019", "2010年代", "2000年代", "90年代", "80年代", "70年代", "60年代", "更早"],
|
|
platforms: ["全部", "腾讯视频", "爱奇艺", "优酷", "湖南卫视", "Netflix", "HBO", "BBC", "NHK", "CBS", "NBC", "tvN"],
|
|
sortOptions: ["近期热度", "综合排序", "首播时间", "高分优先"]
|
|
};
|
|
|
|
// 生成过滤器数据
|
|
const generateFilterData = (labels) => [
|
|
{ key: "类型", name: "类型", value: createLabelOptions(labels.types) },
|
|
{ key: "地区", name: "地区", value: createLabelOptions(labels.areas) },
|
|
{ key: "年代", name: "年代", value: createLabelOptions(labels.years) },
|
|
{ key: "平台", name: "平台", value: createLabelOptions(labels.platforms) },
|
|
{ key: "排序", name: "排序", value: createLabelOptions(labels.sortOptions) }
|
|
];
|
|
const filterData = {
|
|
"1": generateFilterData(tvLabels),
|
|
"2": generateFilterData(movieLabels),
|
|
"3": generateFilterData(varietyLabels)
|
|
};
|
|
backData.filters = filterData;
|
|
backData.class = allClass;
|
|
|
|
console.log(JSON.stringify(backData));
|
|
return JSON.stringify(backData);
|
|
}
|
|
|
|
|
|
// 获取影视分类列表
|
|
async function categoryContent(tid, pg = 1, extend) {
|
|
let backData = new RepVideo();
|
|
try {
|
|
// 初始化参数
|
|
let param1 = tid === "1" ? '{"形式":"电视剧",' : tid === "2" ? '{"形式":"电影",' : tid === "3" ? '{"形式":"综艺",' : "{";
|
|
let extendObj = extend ? JSON.parse(extend) : null;
|
|
let start = (pg - 1) * 20;
|
|
let tags = tid === "3" ? '综艺,': '';
|
|
let sort = "U";
|
|
// 处理扩展参数
|
|
if (extendObj) {
|
|
for (const [key, value] of Object.entries(extendObj)) {
|
|
if (key === "排序") {
|
|
const sortMap = {
|
|
"综合排序": "",
|
|
"近期热度": "U",
|
|
"": "U",
|
|
"首播时间": "R",
|
|
"高分优先": "S",
|
|
};
|
|
sort = sortMap[value] || "";
|
|
} else if (value !== "全部") {
|
|
param1 += `"${key}":"${value}",`;
|
|
tags += `${value},`;
|
|
}
|
|
}
|
|
param1 = param1.endsWith(",") ? param1.slice(0, -1) + "}" : param1 + "}";
|
|
tags = tags.endsWith(",") ? tags.slice(0, -1) : tags;
|
|
}
|
|
|
|
// 构建请求URL
|
|
let webUrl = `${webSite}/rexxar/api/v2/${tid === "2" ? "movie" : "tv"}/recommend?refresh=0&start=${start}&count=20&selected_categories=${param1}&uncollect=false&tags=${tags}`;
|
|
// 如果 sort 有值,则添加到 URL 中
|
|
if (sort) {
|
|
webUrl += `&sort=${sort}`;
|
|
}
|
|
|
|
// 发送请求
|
|
let pro = await req(webUrl, {
|
|
headers: {
|
|
'User-Agent': UA,
|
|
'Referer': webSite
|
|
},
|
|
});
|
|
|
|
// 解析响应数据
|
|
let proData = await pro.json();
|
|
console.log("Response Data:", proData);
|
|
|
|
// 处理视频列表
|
|
let video = proData?.items?.map((item) => {
|
|
let videoDet = new VideoList();
|
|
videoDet.vod_id = item.id;
|
|
//videoDet.vod_pic = item.pic?.normal || item.pic?.large || "";
|
|
//图片加入缓存机制
|
|
videoDet.vod_pic = item.pic?.normal
|
|
? `https://images.weserv.nl/?url=${item.pic.normal}&w=300&h=300`
|
|
: item.pic?.large
|
|
? `https://images.weserv.nl/?url=${item.pic.large}&w=300&h=300`
|
|
: "";
|
|
|
|
videoDet.vod_name = item.title;
|
|
videoDet.vod_remarks = "豆瓣" + (item.rating?.value || "");
|
|
return videoDet;
|
|
}) || [];
|
|
|
|
backData.list = video;
|
|
} catch (error) {
|
|
console.error('Error fetching the webpage:', error);
|
|
backData.msg = error.message || error.statusText || 'Unknown error';
|
|
}
|
|
|
|
console.log(JSON.stringify(backData));
|
|
return JSON.stringify(backData);
|
|
}
|
|
|
|
|
|
//推荐源,无需下列三个函数。但是也需要在代码中定义
|
|
async function detailContent(ids) {
|
|
console.log('detailContent');
|
|
}
|
|
async function searchContent(keyword) {
|
|
console.log('searchContent');
|
|
}
|
|
|
|
async function playerContent(vod_id) {
|
|
console.log('playerContent');
|
|
}
|
|
|