let host = 'https://www.guipian360.com'; let headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Referer": host + "/" }; const extractVideos = html => { if (!html) return []; return pdfa(html, '.m-movies .u-movie').map(it => { const url = it.match(/href="([^"]+)"/)?.[1] || ""; const id = url.match(/\/(\d+)\.html/)?.[1]; let name = it.match(/title="([^"]+)"/)?.[1] || ""; name = name.split('/')[0].trim().replace(/.*《([^》]+)》.*/, "$1"); const pic = it.match(/src="([^"]+)"/)?.[1] || ""; const remarks = it.match(/class="zhuangtai"[^>]*>([^<]+)/)?.[1] || ""; return id && name ? { vod_id: id, vod_name: name, vod_pic: pic.startsWith('/') ? host + pic : pic, vod_remarks: remarks.trim() } : null; }).filter(Boolean); }; const home = async () => { const list = extractVideos((await req(host, { headers }))?.content || ''); return JSON.stringify({ class: [ {type_id:"1",type_name:"鬼片大全"},{type_id:"6",type_name:"大陆鬼片"},{type_id:"9",type_name:"港台鬼片"}, {type_id:"8",type_name:"林正英鬼片"},{type_id:"7",type_name:"日韩鬼片"},{type_id:"11",type_name:"欧美鬼片"}, {type_id:"10",type_name:"泰国鬼片"},{type_id:"3",type_name:"恐怖片"},{type_id:"2",type_name:"电视剧"}, {type_id:"12",type_name:"国产剧"},{type_id:"20",type_name:"港台剧"},{type_id:"13",type_name:"美剧"}, {type_id:"14",type_name:"韩剧"},{type_id:"15",type_name:"日剧"},{type_id:"16",type_name:"泰剧"}, {type_id:"22",type_name:"其它剧"},{type_id:"4",type_name:"动漫"} ], filters: {}, list }); }; const homeVod = async () => { const list = extractVideos((await req(host, { headers }))?.content || ''); return JSON.stringify({ list }); }; const category = async (tid, pg, _, extend) => { const url = pg > 1 ? `${host}/list/${tid}_${pg}.html` : `${host}/list/${tid}.html`; const html = (await req(url, { headers }))?.content || ''; const list = extractVideos(html); const m = html.match(/href="\/list\/\d+_(\d+)\.html"[^>]*>\.\.(\d+)<\/a>/); return JSON.stringify({ list, page: +pg, pagecount: m ? +m[1] : 999, limit: 20 }); }; const detail = async id => { const html = (await req(`${host}/nv/${id}.html`, { headers }))?.content || ''; if (!html) return JSON.stringify({ list: [] }); const tabs = pdfa(html, '#tv_tab li a').map(a => (a.match(/>([^<]+)/)?.[1] || "线路").trim()); const urls = pdfa(html, '#tv_tab .list').map(list => pdfa(list, 'ul.abc li a').map(a => { const name = (a.match(/>([^<]+)/)?.[1] || "播放").trim(); const vid = (a.match(/href="\/play\/(.*?)\.html"/)?.[1] || ""); return `${name}$${vid}`; }).join('#') ); if (!tabs.length || !urls.length) return JSON.stringify({ list: [] }); let vod_name = (html.match(/
]*>([\s\S]*?)<\/p>/)?.[1] || "").replace(/<.*?>/g, "").trim() || "暂无简介"; return JSON.stringify({ list: [{ vod_id: id, vod_name, vod_pic: vod_pic.startsWith('/') ? host + vod_pic : vod_pic, vod_content, vod_director: m(/