s
This commit is contained in:
@@ -1,223 +1,22 @@
|
||||
var rule = {
|
||||
title: '八号影视',
|
||||
host: 'https://www.bahaotv.com',
|
||||
url: '/vodshow/fyclass--------fypage---.html',
|
||||
searchUrl: '/so.html?wd=**',
|
||||
title: '影视规则',
|
||||
编码: 'utf-8',
|
||||
homeUrl: '/',
|
||||
url: '/fyclass/fypage.html',
|
||||
detailUrl: '/voddetail/fyid.html',
|
||||
class_name: '电影&电视剧&动漫&综艺',
|
||||
class_url: '1&2&3&4',
|
||||
class_parse: '#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
|
||||
推荐: '.video-list .item;a&&Text;img&&src;.actor&&Text;a&&href',
|
||||
一级: '.video-list .item;a&&Text;img&&src;.actor&&Text;a&&href',
|
||||
二级: '*',
|
||||
searchUrl: '/search.php?searchword=**&page=fypage',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
filterable: 0,
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA'
|
||||
},
|
||||
quickSearch: 1,
|
||||
headers: {"User-Agent":"MOBILE_UA","Cookie":"searchneed=ok"},
|
||||
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[^>]*>.*?<\/ins>/gs, '');
|
||||
html = html.replace(/<script[^>]*>.*?<\/script>/gs, '');
|
||||
html = html.replace(/<div class="google-auto-placed[^>]*>.*?<\/div>/gs, '');
|
||||
html = html.replace(/onclick="[^"]*"/g, '');
|
||||
html = html.replace(/onerror="[^"]*"/g, '');
|
||||
return html;
|
||||
}
|
||||
play_json: [{"re":"*","json":{"jx":1,"parse":1}}],
|
||||
double: true,
|
||||
limit: 6,
|
||||
};
|
||||
Reference in New Issue
Block a user