//当域名更换的话,修改下方网址即可 const webSite='https://hrrcjob.com'; async function 访问网页(url, method, postParams, cookie, headers, timeout = 15000, setCookieCallback) { // 定义请求方法 const methods = ['GET', 'POST', 'PUT']; const requestMethod = methods[method] || 'GET'; // 构建请求头 const requestHeaders = {}; if (cookie) { requestHeaders['Cookie'] = cookie; } if (headers) { headers.split('\n').forEach(header => { const index = header.indexOf(':'); if (index !== -1) { const key = header.substring(0, index).trim(); const value = header.substring(index + 1).trim(); if (key && value) { requestHeaders[key] = value; } } }); } // 构建请求体(仅在 POST 或 PUT 时需要) let body = null; if (requestMethod === 'POST' || requestMethod === 'PUT') { if (postParams) { body = postParams; } } // 构建请求配置 const requestOptions = { method: requestMethod, headers: requestHeaders, body: body, redirect: 'follow' }; // 创建一个 Promise 用于超时控制 const fetchPromise = newfetch(url, requestOptions); const timeoutPromise = new Promise((_, reject) => { setTimeout(() => reject(new Error('Request timed out')), timeout); }); try { // 发送请求并等待响应 const response = await Promise.race([fetchPromise, timeoutPromise]); // 获取响应内容 const responseText = await response.text(); // 提取响应头中的 set-cookie const responseHeaders = JSON.parse(response.headers); // 解析 set-cookie 字段 console.log('responseHeaders:',url, responseHeaders); let setCookie = responseHeaders['set-cookie']; console.log('setCookie:',url, setCookie); // 如果提供了 setCookieCallback,则调用它并传递 set-cookie if (setCookieCallback && setCookie) { setCookieCallback(setCookie); } // 返回结果 return responseText; } catch (error) { throw error; } } function newfetch(url, options) { options = options || {}; return new Promise(async (resolve, reject) => { let request = await sendMessage("fetch", JSON.stringify({"url": url, "options": options})) const response = () => ({ ok: ((request.status / 100) | 0) == 2, // 200-299 statusText: request.statusText, status: request.status, url: request.responseURL, text: () => Promise.resolve(request.responseText), json: () => Promise.resolve(request.responseText).then(JSON.parse), blob: () => Promise.resolve(new Blob([request.response])), clone: response, headers: request.headers, }) //console.log(request.headers); if (request.ok) resolve(response()); else reject(response()); }); } async function homeContent() { try { const response = await 访问网页(webSite); const items = 文本_取中间_批量(response, '"vodId', '}', true, true); const list = items.map((item) => { const vod_name = 文本_取中间(item, 'vodName\\\":\\\"', '\\\"') || ''; const vod_pic = 文本_取中间(item,'vodPic\\\":\\\"','\\\"') || ''; const vod_id = 文本_取中间(item,'vodId\\\":',',') || ''; const vod_remarks = 文本_取中间(item,'vodRemarks\\\":\\\"','\\\"') || ''; return { vod_id: vod_id, vod_name: vod_name, vod_remarks: vod_remarks, vod_pic: vod_pic }; }); //console.log(Crypto.SHA1(Crypto.MD5('signkey').toString()).toString()); // 定义分类数据 const classData = [ { "type_id": 1, "type_name": "电影" }, { "type_id": 2, "type_name": "电视剧" }, { "type_id": 4, "type_name": "动漫" }, { "type_id": 3, "type_name": "综艺" } ]; // 定义分类数据 const filterData = { "2": [ { "key": "type", "name": "类型", "value": [ { "n": "全部", "v": "" }, { "n": "国产剧", "v": "14" }, { "n": "欧美剧", "v": "15" }, { "n": "港台剧", "v": "16" }, { "n": "日韩剧", "v": "62" }, { "n": "其他剧", "v": "68" } ] },{ "key": "class", "name": "剧情", "value": [ { "n": "全部", "v": "" }, { "n": "古装", "v": "古装" }, { "n": "战争", "v": "战争" }, { "n": "喜剧", "v": "喜剧" }, { "n": "家庭", "v": "家庭" }, { "n": "犯罪", "v": "犯罪" }, { "n": "动作", "v": "动作" }, { "n": "奇幻", "v": "奇幻" }, { "n": "剧情", "v": "剧情" }, { "n": "历史", "v": "历史" }, { "n": "短片", "v": "短片" }, { "n": "其他", "v": "其他" }, ] }, { "key": "area", "name": "地区", "value": [ { "n": "全部", "v": "" }, { "n": "大陆", "v": "中国大陆" }, { "n": "香港", "v": "中国香港" }, { "n": "台湾", "v": "中国台湾" }, { "n": "美国", "v": "美国" }, { "n": "韩国", "v": "韩国" }, { "n": "日本", "v": "日本" }, { "n": "泰国", "v": "泰国" }, { "n": "其他", "v": "其他" } ] }, { "key": "year", "name": "年份", "value": [ { "n": "全部", "v": "" }, { "n": "2024", "v": "2024" }, { "n": "2023", "v": "2023" }, { "n": "2022", "v": "2022" }, { "n": "2021", "v": "2021" }, { "n": "2020", "v": "2020" }, { "n": "2019", "v": "2019" }, { "n": "2018", "v": "2018" }, { "n": "2017", "v": "2017" }, { "n": "2016", "v": "2016" }, { "n": "2015", "v": "2015" }, { "n": "2014", "v": "2014" }, { "n": "2013", "v": "2013" }, { "n": "2012", "v": "2012" }, { "n": "2011", "v": "2011" }, { "n": "2010", "v": "2010" } ] }, { "key": "sortType", "name": "排序", "value": [ { "n": "最近更新", "v": "" }, { "n": "添加时间", "v": "2" }, { "n": "人气", "v": "3" }, { "n": "评分", "v": "4" } ] } ], "1": [ { "key": "type", "name": "类型", "value": [ { "n": "全部", "v": "1" }, { "n": "动作", "v": "23" }, { "n": "喜剧", "v": "22" }, { "n": "爱情", "v": "26" }, { "n": "科幻", "v": "30" }, { "n": "恐怖", "v": "36" }, { "n": "剧情", "v": "37" }, { "n": "战争", "v": "25" }, { "n": "灾难", "v": "81" }, { "n": "奇幻", "v": "87" }, { "n": "犯罪", "v": "35" }, { "n": "冒险", "v": "31" }, { "n": "悬疑", "v": "27" }, { "n": "动画", "v": "33" }, { "n": "惊悚", "v": "34" }, { "n": "其他", "v": "43" } ] }, { "key": "area", "name": "地区", "value": [ { "n": "全部", "v": "" }, { "n": "大陆", "v": "中国大陆" }, { "n": "香港", "v": "中国香港" }, { "n": "台湾", "v": "中国台湾" }, { "n": "美国", "v": "美国" }, { "n": "韩国", "v": "韩国" }, { "n": "英国", "v": "英国" }, { "n": "日本", "v": "日本" }, { "n": "泰国", "v": "泰国" }, { "n": "印度", "v": "印度" }, { "n": "法国", "v": "法国" }, { "n": "其他", "v": "其他" } ] }, { "key": "year", "name": "年份", "value": [ { "n": "全部", "v": "" }, { "n": "2024", "v": "2024" }, { "n": "2023", "v": "2023" }, { "n": "2022", "v": "2022" }, { "n": "2021", "v": "2021" }, { "n": "2020", "v": "2020" }, { "n": "2019", "v": "2019" }, { "n": "2018", "v": "2018" }, { "n": "2017", "v": "2017" }, { "n": "2016", "v": "2016" }, { "n": "2015", "v": "2015" }, { "n": "2014", "v": "2014" }, { "n": "2013", "v": "2013" }, { "n": "2012", "v": "2012" }, { "n": "2011", "v": "2011" }, { "n": "2010", "v": "2010" }, { "n": "2009~2000", "v": "2009~2000" } ] }, { "key": "sortType", "name": "排序", "value": [ { "n": "时间", "v": "" }, { "n": "人气", "v": "3" }, { "n": "评分", "v": "4" } ] } ], "4": [ { "key": "type", "name": "类型", "value": [ { "n": "全部", "v": "" }, { "n": "国产动漫", "v": "75" }, { "n": "日韩动漫", "v": "76" }, { "n": "欧美动漫", "v": "77" } ] },{ "key": "class", "name": "剧情", "value": [ { "n": "全部", "v": "" }, { "n": "喜剧", "v": "喜剧" }, { "n": "科幻", "v": "科幻" }, { "n": "热血", "v": "热血" }, { "n": "冒险", "v": "冒险" }, { "n": "动作", "v": "动作" }, { "n": "运动", "v": "运动" }, { "n": "战争", "v": "战争" }, { "n": "儿童", "v": "儿童" }, { "n": "动画", "v": "动画" }, { "n": "其他", "v": "其他" } ] }, { "key": "area", "name": "地区", "value": [ { "n": "全部", "v": "" }, { "n": "大陆", "v": "中国大陆" }, { "n": "美国", "v": "美国" }, { "n": "日本", "v": "日本" }, { "n": "法国", "v": "法国" } ] }, { "key": "year", "name": "年份", "value": [ { "n": "全部", "v": "" }, { "n": "2024", "v": "2024" }, { "n": "2023", "v": "2023" }, { "n": "2022", "v": "2022" }, { "n": "2021", "v": "2021" }, { "n": "2020", "v": "2020" }, { "n": "2019", "v": "2019" }, { "n": "2018", "v": "2018" }, { "n": "2017", "v": "2017" }, { "n": "2016", "v": "2016" }, { "n": "2015", "v": "2015" }, { "n": "2014", "v": "2014" }, { "n": "2013", "v": "2013" }, { "n": "2012", "v": "2012" }, { "n": "2011", "v": "2011" }, { "n": "2010", "v": "2010" } ] }, { "key": "sortType", "name": "排序", "value": [ { "n": "最近更新", "v": "" }, { "n": "添加时间", "v": "2" }, { "n": "人气", "v": "3" }, { "n": "评分", "v": "4" } ] } ], "3": [ { "key": "type", "name": "类型", "value": [ { "n": "全部", "v": "" }, { "n": "国产综艺", "v": "69" }, { "n": "港台综艺", "v": "70" }, { "n": "日韩综艺", "v": "72" }, { "n": "欧美综艺", "v": "73" } ] },{ "key": "area", "name": "地区", "value": [ { "n": "全部", "v": "" }, { "n": "大陆", "v": "中国大陆" }, { "n": "香港", "v": "中国香港" }, { "n": "台湾", "v": "中国台湾" }, { "n": "美国", "v": "美国" }, { "n": "韩国", "v": "韩国" }, { "n": "日本", "v": "日本" }, { "n": "其他", "v": "其他" } ] }, { "key": "year", "name": "年份", "value": [ { "n": "全部", "v": "" }, { "n": "2024", "v": "2024" }, { "n": "2023", "v": "2023" }, { "n": "2022", "v": "2022" }, { "n": "2021", "v": "2021" }, { "n": "2020", "v": "2020" } ] }, { "key": "sortType", "name": "排序", "value": [ { "n": "最近更新", "v": "" }, { "n": "添加时间", "v": "2" }, { "n": "人气", "v": "3" }, { "n": "评分", "v": "4" } ] } ] }; return JSON.stringify({ code: 1, msg: "数据列表", page: "1", limit: "20", list: list, class: classData, filters: filterData }); } catch (error) { console.error('Error fetching the webpage:', error); return JSON.stringify({ code: -1, msg: "获取数据失败", page: "1", limit: "20", list: [] }); } } //获取影视分类列表 async function categoryContent(tid, pg = 1, extend) { try { // 解析 extend 参数 let extendObj = extend ? JSON.parse(extend) : null; let url = `${webSite}/vod/show/id/${tid}/type/{type}/class/{class}/area/{area}/year/{year}/sortType/{sortType}/page/${pg}`; // 替换 URL 中的占位符 if (extendObj) { for (const [key, value] of Object.entries(extendObj)) { if (value) { const placeholder = `{${key}}`; const encodedValue = encodeURIComponent(value || ''); // 对 value 进行 URL 编码 url = url.replace(new RegExp(placeholder, 'g'), encodedValue); } } } // 删除剩余的 {} 包围的占位符 url = url.replace(/\/[a-zA-Z]+\/\{[a-zA-Z]+\}/g, ''); console.log(url); const response = await 访问网页(url); // 使用正则表达式匹配所有的电影项 const items = 文本_取中间_批量(response, '"vodId', '}', true, true); const list = items.map((item) => { const vod_name = 文本_取中间(item, 'vodName\\\":\\\"', '\\\"') || ''; const vod_pic = 文本_取中间(item,'vodPic\\\":\\\"','\\\"') || ''; const vod_id = 文本_取中间(item,'vodId\\\":',',') || ''; const vod_remarks = 文本_取中间(item,'vodRemarks\\\":\\\"','\\\"') || ''; return { vod_id: vod_id, vod_name: vod_name, vod_remarks: vod_remarks, vod_pic: vod_pic }; }); return JSON.stringify({ code: 1, msg: "数据列表", page: pg, limit: "20", list: list }); } catch (error) { console.error('Error fetching the webpage:', error); return JSON.stringify({ code: -1, msg: "获取数据失败", page: "1", limit: "20", list: [] }); } } //获取影视详情信息 async function detailContent(ids) { const url = `${webSite}/detail/${ids}`; try { //console.log(url); const html = await 访问网页(url); // 使用正则表达式提取信息 const vod_id = ids; const vod_name = 文本_取中间(html,'vodName\\\":\\\"','\\\"') || '未知片名'; //console.log(vod_name); const vod_year = 文本_取中间(html,'vodPubdate\\\":\\\"','\\\"') || ''; //console.log(vod_year); const vod_director = 文本_取中间(html,'vodDirector\\\":\\\"','\\\"') || '未知'; //console.log(vod_director); const vod_actor = 文本_取中间(html,'vodActor\\\":\\\"','\\\"') || '未知'; //console.log(vod_actor); const vod_pic = 文本_取中间(html,'vodPic\\\":\\\"','\\\"') || ''; //console.log(vod_pic); let vod_remarks=文本_取中间(html,'vodRemarks\\\":\\\"','\\\"') || ''; //console.log(vod_remarks); const vod_content = 移除html代码(文本_取中间(html,'vodContent\\\":\\\"','\\\"')) || '暂无剧情'; //console.log(vod_content); // 初始化 vod_play_from 和 vod_play_url let vod_play_from = '播放列表'; let vod_play_url = []; const items = 文本_取中间_批量(html, '