var rule = { title: '八号影视', host: 'https://www.bahaotv.com', url: '/vodshow/fyclass--------fypage---.html', searchUrl: '/so.html?wd=**', searchable: 2, quickSearch: 0, filterable: 0, headers: { 'User-Agent': 'MOBILE_UA' }, timeout: 5000, // 分类配置 class_name: '电影&电视剧&动漫', class_url: 'movie&tvseries&anime', // 推荐内容 - 首页和详情页猜你喜欢 推荐: `js: let html = request(input); let data = []; let items = pdfa(html, '.card-box&&.content-card'); items.forEach(item => { data.push({ title: pdfh(item, '.title&&Text'), img: pdfh(item, '.cover-img&&img&&data-original'), desc: pdfh(item, '.role&&Text'), url: pdfh(item, 'a&&href') }); }); setResult(data); `, // 一级内容 - 分类列表页 一级: `js: let html = request(input); let data = []; let items = pdfa(html, '.card-box&&.content-card'); items.forEach(item => { data.push({ title: pdfh(item, '.title&&Text'), img: pdfh(item, '.cover-img&&img&&data-original'), desc: pdfh(item, '.role&&Text'), url: pdfh(item, 'a&&href') }); }); setResult(data); `, // 二级内容 - 详情页 二级: { title: `js: pdfh(html, 'h1.title&&Text') || pdfh(html, '.title-box&&h1&&Text') `, img: `js: pdfh(html, '.img-box&&img&&data-original') || pdfh(html, '.vod-detailll&&img&&data-original') `, desc: `js: let director = pdfh(html, '.director:contains("导演")&&Text').replace('导演:', '').trim(); let actors = pdfh(html, '.director:contains("主演")&&Text').replace('主演:', '').trim(); let alias = pdfh(html, '.roles:contains("别名")&&Text').replace('别名:', '').trim(); let score = pdfh(html, '.score&&Text'); let hits = pdfh(html, '.hot-num&&Text'); // 格式化描述信息 let desc = ''; if (director) desc += '导演: ' + director + ';;'; if (actors) desc += '主演: ' + actors + ';;'; if (alias) desc += '别名: ' + alias + ';;'; if (score) desc += '评分: ' + score + ';;'; if (hits) desc += '热度: ' + hits; desc; `, content: `js: pdfh(html, '.intro&&Text') || pdfh(html, '.vod-content&&.intro&&Text') `, tabs: `js: let tabs = []; let tabElements = pdfa(html, '.player_name'); tabElements.forEach(tab => { tabs.push(pdfh(tab, 'a&&Text')); }); tabs; `, lists: `js: let playList = []; let tabPanes = pdfa(html, '.tab-pane'); tabPanes.forEach((pane, index) => { let episodes = []; let episodeElements = pdfa(pane, '.listitem'); episodeElements.forEach(ep => { episodes.push({ name: pdfh(ep, 'a&&Text'), url: pdfh(ep, 'a&&href') }); }); if (episodes.length > 0) { playList.push(episodes); } }); JSON.stringify(playList); ` }, // 搜索功能 搜索: `js: let html = request(input); let data = []; let items = pdfa(html, '.vod-list&&li'); items.forEach(item => { data.push({ title: pdfh(item, '.title&&Text'), img: pdfh(item, '.pic&&img&&data-original'), desc: pdfh(item, '.desc&&Text'), url: pdfh(item, 'a&&href') }); }); setResult(data); `, // 播放地址解析 play_parse: true, lazy: `js: let html = request(input); let playUrl = ''; // 尝试多种方式提取播放地址 let patterns = [ /player_aaaa.*?url.*?['"]([^'"]+)['"]/, /video_url.*?['"]([^'"]+)['"]/, /src.*?['"]([^'"]+\.m3u8[^'"]*)['"]/, /file.*?['"]([^'"]+\.m3u8[^'"]*)['"]/ ]; for (let pattern of patterns) { let match = html.match(pattern); if (match && match[1]) { playUrl = match[1]; break; } } // 如果没有找到播放地址,返回原始输入 playUrl || input; `, // 详情页预处理 详情: `js: let html = request(input); // 移除广告和干扰元素 const removeSelectors = [ 'ins', 'script', '.google-auto-placed', '.adsbygoogle', '.ad-container', '#theme-switcher', '.side-top' ]; removeSelectors.forEach(selector => { let elements = pdfa(html, selector); elements.forEach(el => { html = html.replace(pdfh(el, '&&outerHtml'), ''); }); }); html; `, // 分类解析 class_parse: `js: let html = request(HOST); let classes = []; // 解析导航菜单中的分类 let navItems = pdfa(html, '.menu&&a.nav'); navItems.forEach(item => { let text = pdfh(item, '&&Text'); let href = pdfh(item, '&&href'); if (text && href && !text.includes('首页')) { let match = href.match(/\/vodshow\/([^\/]+)/); if (match) { classes.push({ type_name: text, type_id: match[1] }); } } }); // 确保有默认分类 if (classes.length === 0) { classes = [ {type_name: '电影', type_id: 'movie'}, {type_name: '电视剧', type_id: 'tvseries'}, {type_name: '动漫', type_id: 'anime'} ]; } JSON.stringify(classes); `, // 预处理函数 before: function(html) { // 基础清理 html = html.replace(/]*>.*?<\/ins>/gs, ''); html = html.replace(/]*>.*?<\/script>/gs, ''); html = html.replace(/