Add files via upload

This commit is contained in:
dlgt7
2025-09-14 12:30:50 +08:00
committed by GitHub
parent 8e3549f999
commit 7d0f6aa4b2
3 changed files with 325 additions and 0 deletions
Binary file not shown.
+30
View File
@@ -0,0 +1,30 @@
首先,xbpq是用最少的参数实现网站配置,所以拿到一个网站,不要盲目的想着把所有参数都提取出来,要根据实际情况,添加需要的参数。
下边就陆续开始根据日常写源的情况,汇总一下。慢慢加强对教程的理解。
https://www.hongguodj1.cc 今天拿红果短剧来练练手。
首先,写最基本的,这个不管是简写还是全写都需要写的,写完看看情况,jar里是有一些内置模板的,如果网站结构和内置模板一样,则能正常显示,不能正常显示,则根据情况,添加相应的参数:
{
"主页url": "https://www.hongguodj1.cc/",
"分类url": "https://www.hongguodj1.cc/vod/type/id/{cateId}/page/{catePg}.html",
"分类": "短剧大全$duanjudaquan#闪婚离婚$shanhunlihun#女频恋爱$nvpinlianai#反转爽剧$fanzhuanshuangju#脑洞悬疑$naodongxuanyi#年代穿越$niandaichuanyue#现代都市$xiandaidushi",
}
这个网站还是比较简单的,写了三个参数就能看了,没有海报图片,下边我们来添加以下这个参数,再看看效果。
![ec1b72d3f025044a24b0f6610ecd1369](https://github.com/user-attachments/assets/f4086243-36c5-4899-ab48-d33390cdb5d2) ![8feb9110449a9183c80a99158e5ab1a0](https://github.com/user-attachments/assets/a6e2d855-875e-4d26-b5e9-75b56171c34f)
{
"主页url": "https://www.hongguodj1.cc/",
"分类url": "https://www.hongguodj1.cc/vod/type/id/{cateId}/page/{catePg}.html",
"分类": "短剧大全$duanjudaquan#闪婚离婚$shanhunlihun#女频恋爱$nvpinlianai#反转爽剧$fanzhuanshuangju#脑洞悬疑$naodongxuanyi#年代穿越$niandaichuanyue#现代都市$xiandaidushi",
"图片": "data-src=\"&&\"",
"图片前缀": "https://www.hongguodj1.cc"
}
现在已经能正常显示图片了,愉快的观影吧。后续会陆续汇总其它参数的添加,今天这几个参数都比较简单,就不贴网站源码了,照着教程就能实战。
![0a82e26cd0342dccc5fb66b97b6ddcd3](https://github.com/user-attachments/assets/f15e6c77-f805-45f2-81b2-0ea8e93161cf)
+295
View File
@@ -0,0 +1,295 @@
1. XBPQ 是什么
①、属于 TVBox 家族里的「csp_XBPQ」引擎,纯字符串规则写法,无需 Python/JS 基础。
②、同一条规则既能让点播 App(TVBox、影视仓、Pluto)直接刮削网页,也能让直播源自动分组、嗅探。
③、与 drpy、py 相比:学习成本最低,调试最快;与 JSON 直连相比:可逆向无接口站点。
2. 核心语法一张图
① 截取 起点&&终点
② 二次截取 起点&&终点||新起点&&新终点
③ 拼接 '+' 前后可混写字符串 / 变量
④ 分类指定 默认–a&&b||电影–c&&d||电视剧–e&&f
⑤ JSON data.list[1].name 下标从 1 开始
⑥ 转义 保留字 $ # & * [ ] 前加 \\
⑦ 变量 {cateId} {catePg} {area} {year} {class} {by} {act} {wd}
⑧ 筛选 : 类型$类型值#剧情$剧情值 …
⑨ 嗅探词 : 多个用 # 分隔,如 m3u8#mp4#flv
⑩ 链接前缀/后缀: 自动补全相对路径
3. 字段清单(ext 内全部)
| 字段 | 说明 | 示例 | | |
| ------------- | -------- | -------------------------------------------------------------------------- | - | ----------------- |
| 主页url | 入口 | `https://www.xxx.com` | | |
| 分类url | 列表页 | `https://www.xxx.com/vodshow/{cateId}--{area}------{catePg}---{year}.html` | | |
| 分类 | 自建频道 | `电影$1#电视剧$2#综艺$3#动漫$4` | | |
| 筛选 | 可留空,自动识别 | `外部json 或 直接写{}` | | |
| 数组 | 列表循环体 | `<div class="stui-vodlist__box">&&</div>` | | |
| 标题 | 片名 | `title="&&"` | | |
| 图片 | 封面 | `data-original="&&"` | | |
| 链接 | 详情页 | `href="&&"` | | |
| 副标题 | 更新集数 | `<span class="pic-text text-right">&&</span>` | | |
| 嗅探词 | 正片格式 | `m3u8#mp4#flv#akamaized.net` | | |
| 播放数组 | 播放线路块 | `class="stui-content__playlist clearfix">&&</ul>` | | |
| 播放列表 | 单集 | `<a&&/a>` | | |
| 播放标题 | 线路名 | `h3&&/h3` | | |
| 播放链接 | 真实地址 | `href="&&"` | | |
| 直接播放 | 直播开关 | `1` 开启,`0` 关闭 | | |
| 链接前缀/后缀 | 补全 | `http://cdn.xxx.com` / `.m3u8` | | |
| 搜索url | 搜索入口 | `https://www.xxx.com/search.php?wd={wd}` | | |
| 搜索数组/标题/图片/链接 | 同上逻辑 | … | | |
| 二次截取 | 不同页面不同规则 | \`电影–<ul>&&</ul> | | 电视剧–<ol>&&</ol>\` |
4. 极速模板(直接改 3 处即可上线)
{
"key": "极速演示",
"name": "极速┃BPQ",
"type": 3,
"api": "csp_XBPQ",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": {
"主页url": "https://www.你的目标站.com",
"分类url": "https://www.你的目标站.com/vodshow/{cateId}--------{catePg}---.html",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4",
"数组": "<div class=\"stui-vodlist__box\">&&</div>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"链接": "href=\"&&\"",
"副标题": "<span class=\"pic-text text-right\">&&</span>",
"播放数组": "class=\"stui-content__playlist clearfix\">&&</ul>",
"播放列表": "<a&&/a>",
"播放链接": "href=\"&&\"",
"嗅探词": "m3u8#mp4#flv"
}
}
分类url 就是:
“告诉 TVBox,点左边哪个频道,就去加载哪一页列表”的那串网址模板。
写法只有 3 步 5 个符号,真的傻子也能会。
一、先背模板(一共 5 个符号)
https://域名/目录/{cateId}--------{catePg}---.html
符号解释(按出现顺序):
| 符号 | 叫法 | 作用 |
| ---------- | --- | --------------------------- |
| `{}` | 大括号 | **占位符**,TVBox 会自动把里面文字换成真实值 |
| `cateId` | 频道号 | 对应你写的“分类”里 `$` 后面的数字 |
| `catePg` | 页码号 | 翻页时 TVBox 自动 +1 |
| `-` 或 `--` | 分隔线 | 照抄网站格式,几个横线就写几个 |
| `.html` | 后缀 | 网站是啥就写啥,也有 `.asp` 或 `/` |
二、3 步填空白(拿真实站点练手)
1、打开网站列表页,随便点“电影”→ 第 2 页,地址栏得到:
https://www.80kv.com/vodshow/1--------2---.html
2、把会变动的数字换成占位符:
原:/vodshow/1--------2---.html
模板:/vodshow/{cateId}--------{catePg}---.html
类型{cateid},剧情{calss},地区{area},年份{year},排序{by}{letter}字母,语言{lang},翻页{catepg}
3、把域名补全,放进规则:
"分类url": "https://www.80kv.com/vodshow/{cateId}--------{catePg}---.html"
三、对应“分类”写法(必须配对)
"分类": "电影$1#电视剧$2#综艺$3#动漫$4"
用英文 # 分隔,千万别用中文“#”,写死法(基础)
一、先搞懂“数组”到底截什么
1、打开列表页源码,找到“每一部影片”的最外层盒子。
目标:让 XBPQ 知道“从哪开始循环”。
<div class="stui-vodlist__box">
<a class="stui-vodlist__thumb" href="/v/123.html" title="长风渡" data-original="/upload/pic.jpg">
<span class="pic-text text-right">更新至20集</span>
</a>
</div>
<div class="stui-vodlist__box">
<a class="stui-vodlist__thumb" href="/v/124.html" title="玉骨遥" data-original="/upload/pic2.jpg">
<span class="pic-text text-right">更新至36集</span>
</a>
</div>
2、写“数组”字段
原则:把“循环头”和“循环尾”分别粘进去,中间内容任意,XBPQ 会自动把两段之间的所有片段当成一条记录。
"数组": "<div class=\"stui-vodlist__box\">&&</div>"
二、再截“播放数据”——两大步
播放数据 = 播放数组(线路块) + 播放列表(单集) + 播放链接(真实地址)
下面用“详情页”真实源码演示:
<!-- 线路块 1 -->
<h3>线路①</h3>
<ul class="stui-content__playlist clearfix">
<li><a href="/play/123-1-1.html">第01集</a></li>
<li><a href="/play/123-1-2.html">第02集</a></li>
</ul>
<!-- 线路块 2 -->
<h3>线路②</h3>
<ul class="stui-content__playlist clearfix">
<li><a href="/play/123-2-1.html">第01集</a></li>
<li><a href="/play/123-2-2.html">第02集</a></li>
</ul>
1、先框住“线路块”——播放数组
特征:每个线路最外层相同的 <ul> 尾巴。
"播放数组": "class=\"stui-content__playlist clearfix\">&&</ul>"
2、再框住“单集”——播放列表
特征:每集都是 <a>集名</a>,用 <a&&/a> 最稳。
"播放列表": "<a&&/a>"
3、最后拿“真实地址”——播放链接
特征:href="地址",把引号里的内容截出来。
"播放链接": "href=\"&&\""
4、(如果地址是相对路径,别忘了加前缀)
"链接前缀": "https://www.demo.com"
记住口诀:
“先圈大盒子(数组),再圈小盒子(播放数组),最后拿链接(播放链接)”
下面把「写错一个字段」对应「TVBox 会怎么崩」全部列出来
| # | 写错字段 | 典型错误写法举例 | TVBox 表现 / 报错特征 | 快速验证方法 | | |
| -- | ------- | --------------------------------- | --------------------------- | ----------------------------------- | - | ------- |
| 1 | 主页url | 漏写 `https://` 或末尾多一个 `/` | 首次加载就提示“获取主页失败” | 电脑直接访问该地址看是否 200 | | |
| 2 | 分类url | 占位符写错,如 `{catePg}` 写成 `{page}` | 点分类一直显示第 1 页,翻页不动 | 把 `{catePg}` 换成 2,手动拼 URL 看能否出第 2 页 | | |
| 3 | 分类 | 用了中文符号 `电影$1;电视剧$2` | 左侧频道列表直接空白 | 确认用英文 `#` 分隔 | | |
| 4 | 数组 | 前后特征串写反 / 中间缺 `&&` | 列表整页空白,日志提示“0 条数据” | 把源码粘到 Notepad++ 搜索特征串是否存在 | | |
| 5 | 标题 | 把 `title="&&"` 写成 `title=&&`(漏引号) | 所有片名显示 `undefined` 或整条 HTML | 看源码里引号到底包不包 | | |
| 6 | 图片 | 截到相对路径却忘记 `图片前缀` | 封面全部裂图 | 浏览器 F12 看图片地址是否完整 | | |
| 7 | 链接 | 详情页相对路径没加 `链接前缀` | 点片名直接 404 | 复制 TVBox 日志里的详情地址到浏览器 | | |
| 8 | 副标题 | 特征串换行符不同(Win vs Unix) | 更新集数那一行全空白 | 打开源码显示换行符,统一复制 | | |
| 9 | 搜索url | 用了 `{wd}` 却大小写写错 `{WD}` | 搜索任何关键词都“无结果” | 手动 `search.php?wd=长风渡` 看能否出结果 | | |
| 10 | 搜索数组 | 与主列表数组特征不同却直接复用 | 搜索页空白,日志显示“0 条” | 单独抓 `/search.php` 的 HTML 再写一套搜索特征 | | |
| 11 | 播放数组 | 把 `<h3>` 一起圈进来当尾点 | 详情页只出现 1 条线路(实际多线路) | 看源码只数 `<ul>` 尾巴,别用 `</h3>` | | |
| 12 | 播放列表 | 用 `<a&&/a>` 结果把 `</a>` 也截入 | 每集标题出现两次“第01集第01集” | 改成 `<a>&&</a>` 或 `>&&<` | | |
| 13 | 播放链接 | 继续用相对路径却忘 `链接前缀` | 点击播放 404,日志地址缺域名 | 复制播放页源码里的 `href` 看是否完整 | | |
| 14 | 嗅探词 | 漏写 `m3u8` 只写 `mp4` | 能嗅到地址但无法播放(被 302 广告) | 在电脑抓包看实际返回是不是 `.m3u8` | | |
| 15 | 链接前缀 | 末尾多写 `/` 导致 `//play` | 播放 404,地址出现双斜杠 | 统一让前缀 **无末尾斜杠**,后缀自己补 `/` | | |
| 16 | 直接播放 | 直播源写成 `0` | 直播频道点进去却跳 WebView 解析 | 直播源必须 `1` | | |
| 17 | 筛选 | 把 `类型$动作片` 写成 `类型=动作片` | 筛选面板空白或无法勾选 | 确认用 `$` 分隔键值,用 `#` 分隔多选项 | | |
| 18 | JSON 数组 | 下标从 0 开始写 `data.list[0].name` | 片名全错位或 undefined | XBPQ 规定下标从 **1** 开始 | | |
| 19 | 二次截取 | 漏写“默认–”直接写 `电影–xxx` | 非电影分类全部空白 | 第一段必须写 \`默认–规则 | | 电影–规则\` |
| 20 | 转义 | 源码里已有 `"` 却忘了前加 `\` | JSON 校验直接失败,TVBox 无法导入 | 用在线 JSON 校验器先过一遍格式 | | |
嗅探词:
10 秒「浏览器抓包」自己扩
电脑 Chrome 打开影片播放页 → F12 → Network → 筛选框输入 m3u8
点播放,抓到第一条 Name 列出现 xxxx.m3u8(或 .mp4/.ts
把 网址最后一段 复制出来,例如
https://cdn.xxx.com/202502/3f6e9.m3u8?authkey=1200
只要域名后面 第一个“?”前的后缀 → .m3u8
继续换不同站点抓 3-5 次,把新后缀累加进嗅探词,用 # 隔开即可。
实测 90% 站点 5 个词以内就能命中。实测 ≤10 个几乎无感;超过 20 个才可能在低端盒子出现 1-2 秒延迟
自己抓“当天”广告域名
电脑 Chrome 打开影片页 → F12 → Network → 点播放。
筛选框输入 m3u8 前先输入 ad(或 doubleclick、googlesyndication 等广告关键字)。
找到返回 302/200 且最前面带广告关键词的域名,例如
https://ad.mgdmt.com/xxxx
把 ad.mgdmt.com 复制下来。
直接扔进 ads 数组最前面,立即生效,不用重启盒子。
一、什么场景“必须”二次截取?
同一页里,不同分类的 HTML 结构完全不同
例:电影模块每部片在 <div class="m-box">
 电视剧模块却用 <div class="tv-item">
如果只写一条“数组”,必定有一类空白 → 要用二次截取给每类单独指定特征串。
同一页里,置顶/推荐位结构跟普通列表不同
例:前面 6 条是“大图”,后面是普通小图;大图多一层 <div class="highlight">
一次截取会把两种盒子混到一起 → 标题/图片字段错位 → 二次截取先砍掉“大图”区,再截普通区。
详情页多线路区域结构不同
例:线路①用 <ul class="play-list">
 线路②用 <div class="online-list">
播放数组一次只能圈一种尾巴 → 必须二次截取按线路名分别给规则。
二、语法格式(死记 5 秒)
"字段名": "默认–起点&&终点||分类A–起点&&终点||分类B–起点&&终点"
每一段用 两个减号 -- 把“分类名”和“规则”分开
段与段之间用 两个竖线 || 分隔
第一段必须写 默认–(否则“其他”情况会空白)
三、完整实战:列表页“电影 vs 电视剧”结构不同
源码简化示意:
<!-- 电影区 -->
<div id="m-area">
<div class="m-box"><a href="/v/123.html" title="电影A">…</a></div>
<div class="m-box"><a href="/v/124.html" title="电影B">…</a></div>
</div>
<!-- 电视剧区 -->
<div id="tv-area">
<div class="tv-item"><a href="/v/234.html" title="剧集A">…</a></div>
<div class="tv-item"><a href="/v/235.html" title="剧集B">…</a></div>
</div>
1、分类字段(先给 ID 对应关系)
"分类": "电影$1#电视剧$2"
2、数组字段 —— 一次截取肯定不行,必须二次截取
"数组": "默认–<div class=\"m-box\">&&</div>||电视剧–<div class=\"tv-item\">&&</div>"
解释:
当 TVBox 请求 cateId=1(电影)时,用第一段 <div class="m-box">&&</div>
当 cateId=2(电视剧)时,自动切换到第二段 <div class="tv-item\">&&</div>
如果以后新增“综艺”区,只要继续在后面 ||综艺–新起点&&新终点 即可
四、播放页实战:多线路结构不同
<h3>线路①</h3>
<ul class="play-list">
<li><a href="/play/123-1-1.html">第01集</a></li>
</ul>
<h3>线路②</h3>
<div class="online-list">
<a href="/play/123-2-1.html">第01集</a>
</div>
二次截取写法:
"播放数组": "默认–<ul class=\"play-list\">&&</ul>||线路②–<div class=\"online-list\">&&</div>"
标题同样可二次截取:
"播放列表": "默认–<li>&&</li>||线路②–<a>&&</a>"
记住核心:搜索数组 = “先圈每一块结果,再拿标题/图片/链接” 的圈地运动。
一、搜索数组到底截什么?
打开站点搜索页,随便搜“成龙”,F12 看见的结构一定是:
<!-- 每一块结果 -->
<div class="search-item">
<a href="/v/123.html" title="成龙传奇" data-original="/pic.jpg">
<span>HD</span>
</a>
</div>
<div class="search-item">
<a href="/v/124.html" title="警察故事" data-original="/pic2.jpg">
<span>蓝光</span>
</a>
</div>
搜索数组就是告诉 TVBox
“把每一块 <div class="search-item"> 到 </div> 先整体切下来,再逐条解析”
二、写搜索数组的 3 步(照抄即可)
1、圈整块(搜索数组)
"搜索数组": "<div class=\"search-item\">&&</div>"
2、再圈 4 个常用字段(都在同一块里)
"搜索标题": "title=\"&&\"",
"搜索图片": "data-original=\"&&\"",
"搜索链接": "href=\"&&\"",
"搜索副标题": "<span>&&</span>"
3、补前缀(相对路径时)
"搜索链接前缀": "https://www.demo.com"
一句话背下来
“先圈块(搜索数组),再圈字(标题/图片/链接),相对路径加前缀。”
“免嗅探”= TVBox 不再自己去找真实播放地址,而是直接拿你“划红线”那段当最终地址。
只有网页源码里一眼就能看见 .m3u8 / .mp4 绝对路径时才用;如果地址被 JS 加密、跳转、拼接,就绝对不能开,否则播放 404。
正常嗅探(不开免嗅探)
播放链接截到:
/play.php?url=aHR0cHM6Ly9jZG4uY29tL2EubTN1OA==
TVBox 会继续访问 /play.php... → 再 302 跳转 → 才拿到真实 .m3u8
(需要耗时 1-3 秒,可能跳到广告)
免嗅探(开免嗅探,且写 ;;m
播放链接截到:
https://cdn.xxx.com/2025/06/a.m3u8;;m
TVBox 看见 ;;m 立刻停止,直接把前面当最终地址播放
0 秒启动,无广告)
三、什么时候可以写 ;;m(划红线为明文)
✅ 能用的场景
网页源码里直接出现:
<a href="https://cdn.xxx.com/2025/06/a.m3u8">播放</a>
或者视频标签里:
<video src="https://cdn.xxx.com/a.mp4"></video>
❌ 不能用的场景
截出来是 相对路径 /play/123-1-1.html → 还要后端 302 跳转
截出来是 加密串 aHR0cHM6Ly9jZG4uY29tL2EubTN1OA== → 还要 base64 解码
截出来是 参数 /play.php?sign=xxx → 还要后端验签
截出来是 只有一段 token var url = '/2025/a.m3u8'; → 还要 JS 拼接
四、XBPQ 里具体怎么写
先确认是明文
浏览器 F12 → Elements 搜 .m3u8 或 .mp4,如果看见完整 https://... 就继续。
写播放链接,尾巴加 ;;m
"播放链接": "href=\"&&\";;m"
打开 TVBox 全局开关
设置 → 播放器 → 免嗅探 打勾
(不开勾,写 ;;m 也无效)
"播放链接": "<video src=\"&&\";;m"
六、一句话背下来
“截出来直接能下载 → 加 ;;m 开免嗅探;还要跳转/解密 → 千万别加!”