Files
TVbox-interface/xbpq最新笔记.txt
T
2025-09-07 05:12:43 +08:00

296 lines
19 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 开免嗅探;还要跳转/解密 → 千万别加!”