Compare commits
76
Commits
c195616f7c
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c273a3f945 | ||
|
|
c34d7b7d17 | ||
|
|
ec7e84b4a2 | ||
|
|
5fcd62e7c7 | ||
|
|
2b02edc3e5 | ||
|
|
f5ff5ce247 | ||
|
|
0ffed98d9a | ||
|
|
bf80c18534 | ||
|
|
5d88027065 | ||
|
|
c055072c9e | ||
|
|
9fcd5bb858 | ||
|
|
f0ac2ed06c | ||
|
|
30cd12499b | ||
|
|
d949b0d05c | ||
|
|
ab76bb68e1 | ||
|
|
432c09d2a5 | ||
|
|
408e403440 | ||
|
|
4e636a08d3 | ||
|
|
45d1a42317 | ||
|
|
ca31a4f3df | ||
|
|
d98dd20f99 | ||
|
|
a2deb8df87 | ||
|
|
38ce8cdb2f | ||
|
|
2a04952857 | ||
|
|
f3440317d1 | ||
|
|
7f5a08fd3f | ||
|
|
d16efaf930 | ||
|
|
de799ebc8a | ||
|
|
b08c7949b7 | ||
|
|
0714f5906f | ||
|
|
bbd4df8389 | ||
|
|
f8ffa4fa81 | ||
|
|
937f6081c0 | ||
|
|
1ac988bbcb | ||
|
|
adbd802edb | ||
|
|
458fe74ea1 | ||
|
|
bfcbca657b | ||
|
|
79d9efff91 | ||
|
|
73b257710f | ||
|
|
2029890f5e | ||
|
|
77ffeb3409 | ||
|
|
3c4080f5b2 | ||
|
|
dda5f19130 | ||
|
|
4a25bc2f8d | ||
|
|
7507037979 | ||
|
|
5b6d8358fe | ||
|
|
a3146845ba | ||
|
|
f2f818b03a | ||
|
|
38f53bb2b1 | ||
|
|
57843c55ba | ||
|
|
3a534e7256 | ||
|
|
5ffff12204 | ||
|
|
ccccf09018 | ||
|
|
7378c3045c | ||
|
|
0422eb08e2 | ||
|
|
3a5225d5d6 | ||
|
|
1af4999e63 | ||
|
|
9de12d6085 | ||
|
|
41290fc748 | ||
|
|
b4e4f3ddc2 | ||
|
|
b453cc6e60 | ||
|
|
17eefab826 | ||
|
|
48139fe0dc | ||
|
|
d10c88cf2b | ||
|
|
24759be25e | ||
|
|
124f55c5e7 | ||
|
|
d67f8d5db5 | ||
|
|
d302a50309 | ||
|
|
4d86e1b65f | ||
|
|
33d0c9ba0f | ||
|
|
a35a1ec98f | ||
|
|
4d24b4a67e | ||
|
|
4fef894ec9 | ||
|
|
14444c8a55 | ||
|
|
9a1334324d | ||
|
|
2e2fa50fbc |
No files matched your search
@@ -1,148 +0,0 @@
|
|||||||
# IPTV 直播源自动更新库
|
|
||||||
|
|
||||||
> **程序特点**: 境外服务器每日自动抓取 → 逐级甄选 → 国内真实测速 → 原子发布。全流程零常驻 Web 服务依赖,天然适配 2GB 小内存机器。
|
|
||||||
|
|
||||||
## 使用地址(直接填入播放器)
|
|
||||||
|
|
||||||
| 用途 | 地址 |
|
|
||||||
|---|---|
|
|
||||||
| 通用 M3U(TiviMate / Kodi / VLC / IPTV播放器) | <code>https://gitea.zzjp.help/zjp/ip/raw/branch/main/all.m3u</code> |
|
|
||||||
| TVBox 壳/影视类应用 | <code>https://gitea.zzjp.help/zjp/ip/raw/branch/main/tvbox.json</code> |
|
|
||||||
| EPG 节目单(XMLTV) | <code>https://gitea.zzjp.help/zjp/ip/raw/branch/main/epg.xml</code> |
|
|
||||||
| 台标目录 | <code>https://gitea.zzjp.help/zjp/ip/raw/branch/main/logo/</code> |
|
|
||||||
| 运行状态页 | <code>https://zz.zzjp.help/iptv-status/</code> |
|
|
||||||
|
|
||||||
单一 M3U 内按“央视频道 / 卫视频道 / 港澳台频道 / 江苏地方频道 / 网络直播”分组;地方频道仅保留江苏省内行政区市县电视台。
|
|
||||||
|
|
||||||
## 实现结果(最近一次运行)
|
|
||||||
|
|
||||||
- 央视频道: 20 台 / 89 线 · 卫视频道: 41 台 / 135 线
|
|
||||||
- 港澳台: 67 台 / 91 线 · 江苏地方: 6 台 / 8 线 · 网络直播: 235 台 / 235 线
|
|
||||||
- 全库有效线路: 558 线;严格稳定: 26 台 / 31 线
|
|
||||||
(近 5 次国内测速≥3 次、P30≥4000kbps、最低≥2500kbps;仅用于排序与淘汰,单入口发布不拆分)
|
|
||||||
|
|
||||||
## 运作逻辑(每 24h 一轮)
|
|
||||||
|
|
||||||
1. **关键词引擎**:AI(智谱/硅基) 依据历史命中扩写关键词,写入 `keywords` 表。
|
|
||||||
2. **多渠道抓取**:主流社区仓库(TXT/M3U)、tvbox 接口(递归展开)、Gitee/GitHub 代码搜索、Telegram 公开频道/大群白名单增量(仅读已登记实体,防 FloodWait)。
|
|
||||||
3. **解析入库**:m3u/txt/tvbox json 统一解析,按频道字典+AI 兜底归一化后写入 SQLite;外省地方台丢弃;点播/静态文件(.mp4 等)拒收。
|
|
||||||
4. **淘汰机制**:数据源 10 天无产出降权再淘汰;播放源“死亡”改由**国内测速**驱动(境外连不上/HTTP 失败不再累计失败次数,防误杀国内源);连续失败≥3 次并冷却 3 天进复活池;10 天无存活删除;假源隔离删除。
|
|
||||||
5. **校验甄选**:HTTP 存活 + ffprobe 深度(编码/分辨率/码率)。深检与 AI 抽帧甄别优先作用于“国内测速已 playable”的源;CCTV/卫视/港澳台每日限量抽帧辨台标/录像/错台。
|
|
||||||
6. **国内真实测速**:码云 Gitee Go 多账号(zhoupeng8324/cs、fazhiyuan/css、zhou-jiepeng/csss)并行分片执行;单在途批次状态机、v2 协议(批次摘要+URL 哈希)防旧结果/错批污染;结果以“国内可播”为准恢复 active 与严格状态。
|
|
||||||
7. **稳定排序**:速度采用稳定度(变异系数)优先 → 国内测速通过 → active 的分层排序;严格稳定基于历史窗口(P30+最低值+样本数),连续低质才降级。
|
|
||||||
8. **生成产物**:`out.next` 快照原子切换;单入口 all.m3u + tvbox.json + epg.xml + 台标;CCTV 自然序;防盗链 UA/Referer 按来源透传。
|
|
||||||
9. **同步发布**:推送到本仓库(Gitea zjp/ip);Telegram 推送更新明细与推荐地址。
|
|
||||||
10. **更新日志**:每次自动运行与每次代码优化都会在下方“更新记录”追加一条,形成可回溯的软件更新说明。
|
|
||||||
|
|
||||||
## 播放与回放
|
|
||||||
|
|
||||||
- 通用 M3U 兼容 TiviMate、Kodi、VLC 与常见 IPTV 播放器;TVBox 使用独立 JSON。两者均按频道分组,央视以 1、2、3…10、11 自然顺序排列。
|
|
||||||
- 节目单由 EPG XMLTV 提供,**不等同于回放**。仅当源数据明确带有 <code>catchup="append"</code> 与 <code>catchup-source</code> 时,导出条目才会保留时移参数;支持该规范的播放器可按自身设置尝试回放。
|
|
||||||
- 本项目不会猜测、伪造或绕过运营商时移/订阅/地区限制;没有显式回放参数的频道只提供直播与节目单。
|
|
||||||
|
|
||||||
## 更新记录(自动, 最新在上)
|
|
||||||
|
|
||||||
- **2026-09-21 02:24:01 · 自动运行更新 #20260921022043**
|
|
||||||
自动运行 #20260921022043(2026-09-21 02:24:01):
|
|
||||||
央视 20台/89线 · 卫视 41台/135线 · 港澳台 67台/91线 · 江苏地方 6台/8线 · 网络直播 235台/235线
|
|
||||||
全库有效 558 线;严格稳定 26台/31线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-21 00:05:24 · 自动运行更新 #20260921000512**
|
|
||||||
自动运行 #20260921000512(2026-09-21 00:05:24):
|
|
||||||
央视 20台/90线 · 卫视 41台/133线 · 港澳台 65台/89线 · 江苏地方 6台/8线 · 网络直播 235台/235线
|
|
||||||
全库有效 555 线;严格稳定 26台/31线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-20 16:03:39 · 自动运行更新 #20260920160312**
|
|
||||||
自动运行 #20260920160312(2026-09-20 16:03:39):
|
|
||||||
央视 20台/90线 · 卫视 41台/133线 · 港澳台 65台/89线 · 江苏地方 6台/8线 · 网络直播 235台/235线
|
|
||||||
全库有效 555 线;严格稳定 26台/31线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-20 08:10:15 · 自动运行更新 #20260920080943**
|
|
||||||
自动运行 #20260920080943(2026-09-20 08:10:15):
|
|
||||||
央视 21台/138线 · 卫视 60台/190线 · 港澳台 66台/93线 · 江苏地方 6台/8线 · 网络直播 235台/235线
|
|
||||||
全库有效 664 线;严格稳定 56台/87线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-20 02:17:30 · 自动运行更新 #20260920021342**
|
|
||||||
自动运行 #20260920021342(2026-09-20 02:17:30):
|
|
||||||
央视 21台/138线 · 卫视 60台/190线 · 港澳台 66台/93线 · 江苏地方 6台/8线 · 网络直播 235台/235线
|
|
||||||
全库有效 664 线;严格稳定 56台/87线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-20 00:18:31 · 自动运行更新 #20260920001813**
|
|
||||||
自动运行 #20260920001813(2026-09-20 00:18:31):
|
|
||||||
央视 21台/138线 · 卫视 60台/190线 · 港澳台 63台/88线 · 江苏地方 6台/8线 · 网络直播 232台/232线
|
|
||||||
全库有效 656 线;严格稳定 56台/87线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-19 16:09:38 · 自动运行更新 #20260919160914**
|
|
||||||
自动运行 #20260919160914(2026-09-19 16:09:38):
|
|
||||||
央视 21台/138线 · 卫视 60台/190线 · 港澳台 63台/88线 · 江苏地方 6台/8线 · 网络直播 232台/232线
|
|
||||||
全库有效 656 线;严格稳定 56台/87线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-19 08:06:33 · 自动运行更新 #20260919080613**
|
|
||||||
自动运行 #20260919080613(2026-09-19 08:06:33):
|
|
||||||
央视 21台/138线 · 卫视 60台/190线 · 港澳台 63台/89线 · 江苏地方 6台/8线 · 网络直播 232台/232线
|
|
||||||
全库有效 657 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-19 02:16:48 · 自动运行更新 #20260919021342**
|
|
||||||
自动运行 #20260919021342(2026-09-19 02:16:48):
|
|
||||||
央视 21台/138线 · 卫视 60台/190线 · 港澳台 63台/89线 · 江苏地方 6台/8线 · 网络直播 232台/232线
|
|
||||||
全库有效 657 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-19 00:06:46 · 自动运行更新 #20260919000616**
|
|
||||||
自动运行 #20260919000616(2026-09-19 00:06:46):
|
|
||||||
央视 21台/149线 · 卫视 60台/256线 · 港澳台 56台/79线 · 江苏地方 6台/8线 · 网络直播 282台/282线
|
|
||||||
全库有效 774 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-18 16:09:59 · 自动运行更新 #20260918160942**
|
|
||||||
自动运行 #20260918160942(2026-09-18 16:09:59):
|
|
||||||
央视 21台/149线 · 卫视 60台/256线 · 港澳台 56台/79线 · 江苏地方 6台/8线 · 网络直播 282台/282线
|
|
||||||
全库有效 774 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-18 08:02:12 · 自动运行更新 #20260918080145**
|
|
||||||
自动运行 #20260918080145(2026-09-18 08:02:12):
|
|
||||||
央视 21台/149线 · 卫视 60台/256线 · 港澳台 56台/79线 · 江苏地方 6台/8线 · 网络直播 282台/282线
|
|
||||||
全库有效 774 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-18 02:18:57 · 自动运行更新 #20260918021404**
|
|
||||||
自动运行 #20260918021404(2026-09-18 02:18:57):
|
|
||||||
央视 21台/149线 · 卫视 60台/256线 · 港澳台 56台/79线 · 江苏地方 6台/8线 · 网络直播 282台/282线
|
|
||||||
全库有效 774 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-18 00:01:00 · 自动运行更新 #20260918000042**
|
|
||||||
自动运行 #20260918000042(2026-09-18 00:01:00):
|
|
||||||
央视 21台/149线 · 卫视 60台/261线 · 港澳台 57台/82线 · 江苏地方 6台/8线 · 网络直播 626台/1450线
|
|
||||||
全库有效 1950 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-17 16:11:20 · 自动运行更新 #20260917161102**
|
|
||||||
自动运行 #20260917161102(2026-09-17 16:11:20):
|
|
||||||
央视 21台/149线 · 卫视 60台/261线 · 港澳台 57台/82线 · 江苏地方 6台/8线 · 网络直播 626台/1450线
|
|
||||||
全库有效 1950 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-17 08:13:10 · 自动运行更新 #20260917081243**
|
|
||||||
自动运行 #20260917081243(2026-09-17 08:13:10):
|
|
||||||
央视 21台/247线 · 卫视 64台/404线 · 港澳台 71台/106线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
|
||||||
全库有效 2437 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-17 02:16:23 · 自动运行更新 #20260917021242**
|
|
||||||
自动运行 #20260917021242(2026-09-17 02:16:23):
|
|
||||||
央视 21台/247线 · 卫视 64台/404线 · 港澳台 71台/106线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
|
||||||
全库有效 2437 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-17 00:18:45 · 自动运行更新 #20260917001722**
|
|
||||||
自动运行 #20260917001722(2026-09-17 00:18:45):
|
|
||||||
央视 21台/247线 · 卫视 64台/402线 · 港澳台 71台/104线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
|
||||||
全库有效 2433 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-16 16:05:31 · 自动运行更新 #20260916160512**
|
|
||||||
自动运行 #20260916160512(2026-09-16 16:05:31):
|
|
||||||
央视 21台/247线 · 卫视 64台/402线 · 港澳台 71台/104线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
|
||||||
全库有效 2433 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
- **2026-09-16 08:12:43 · 自动运行更新 #20260916081222**
|
|
||||||
自动运行 #20260916081222(2026-09-16 08:12:43):
|
|
||||||
央视 21台/247线 · 卫视 64台/402线 · 港澳台 71台/104线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
|
||||||
全库有效 2433 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
|
||||||
|
|
||||||
## 说明与免责
|
|
||||||
|
|
||||||
- 内容仅收集自公开互联网,仅供个人学习测试,请于 24h 内删除;版权归各电视台/平台所有。
|
|
||||||
- 播放源具有时效性,若失效通常次轮自动剔除并补充新线路。
|
|
||||||
@@ -1,2 +1,2 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<tv><channel id="unk_web_CHC高清电影"><display-name>CHC高清电影</display-name></channel><programme start="20260908060000 +0800" stop="20260908074700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">追捕</title></programme><programme start="20260908074700 +0800" stop="20260908094000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">孤儿橄榄球队</title></programme><programme start="20260908094000 +0800" stop="20260908110500 +0800" channel="unk_web_CHC高清电影"><title lang="zh">零度极限</title></programme><programme start="20260908110500 +0800" stop="20260908125400 +0800" channel="unk_web_CHC高清电影"><title lang="zh">望道</title></programme><programme start="20260908125400 +0800" stop="20260908144700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">爱情神话</title></programme><programme start="20260908144700 +0800" stop="20260908163100 +0800" channel="unk_web_CHC高清电影"><title lang="zh">深井</title></programme><programme start="20260908163100 +0800" stop="20260908180300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">激情跳水梦</title></programme><programme start="20260908180300 +0800" stop="20260908202500 +0800" channel="unk_web_CHC高清电影"><title lang="zh">捕风追影</title></programme><programme start="20260908202500 +0800" stop="20260908220000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">又是一年三月三</title></programme><programme start="20260908220000 +0800" stop="20260908233300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">戴帽绅士</title></programme><programme start="20260909060000 +0800" stop="20260909075300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">龙之战</title></programme><programme start="20260909075300 +0800" stop="20260909092300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">那都不是事</title></programme><programme start="20260909092300 +0800" stop="20260909112100 +0800" channel="unk_web_CHC高清电影"><title lang="zh">戏台</title></programme><programme start="20260909112100 +0800" stop="20260909125200 +0800" channel="unk_web_CHC高清电影"><title lang="zh">冰雪大围捕</title></programme><programme start="20260909125200 +0800" stop="20260909144300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">交换人生</title></programme><programme start="20260909144300 +0800" stop="20260909162900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">天上的菊美</title></programme><programme start="20260909162900 +0800" stop="20260909182700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">年会不能停!</title></programme><programme start="20260909182700 +0800" stop="20260909202900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">大路朝天</title></programme><programme start="20260909202900 +0800" stop="20260909220000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">救心行动</title></programme><programme start="20260909220000 +0800" stop="20260909234000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">打工老板</title></programme><programme start="20260911060000 +0800" stop="20260911071800 +0800" channel="unk_web_CHC高清电影"><title lang="zh">图鲁·莱卡</title></programme><programme start="20260911071800 +0800" stop="20260911110900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">正义联盟:扎克·施奈德版</title></programme><programme start="20260911110900 +0800" stop="20260911125700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">好梦一日游</title></programme><programme start="20260911125700 +0800" stop="20260911153200 +0800" channel="unk_web_CHC高清电影"><title lang="zh">霍比特人 史矛革之战</title></programme><programme start="20260911153200 +0800" stop="20260911171000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">我的特工爷爷</title></programme><programme start="20260911171000 +0800" stop="20260911183900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">寻找刘三姐</title></programme><programme start="20260911183900 +0800" stop="20260911202700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">我愿意</title></programme><programme start="20260911202700 +0800" stop="20260911220000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">野人之雨林诀</title></programme><programme start="20260911220000 +0800" stop="20260911234000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">爸,我一定行的</title></programme><programme start="20260912060000 +0800" stop="20260912074000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">回廊亭</title></programme><programme start="20260912074000 +0800" stop="20260912090300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">0.5的爱情</title></programme><programme start="20260912090300 +0800" stop="20260912103500 +0800" channel="unk_web_CHC高清电影"><title lang="zh">武状元苏乞儿</title></programLine truncated
|
<tv><channel id="unk_web_CHC高清电影"><display-name>CHC高清电影</display-name></channel><programme start="20260908060000 +0800" stop="20260908074700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">追捕</title></programme><programme start="20260908074700 +0800" stop="20260908094000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">孤儿橄榄球队</title></programme><programme start="20260908094000 +0800" stop="20260908110500 +0800" channel="unk_web_CHC高清电影"><title lang="zh">零度极限</title></programme><programme start="20260908110500 +0800" stop="20260908125400 +0800" channel="unk_web_CHC高清电影"><title lang="zh">望道</title></programme><programme start="20260908125400 +0800" stop="20260908144700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">爱情神话</title></programme><programme start="20260908144700 +0800" stop="20260908163100 +0800" channel="unk_web_CHC高清电影"><title lang="zh">深井</title></programme><programme start="20260908163100 +0800" stop="20260908180300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">激情跳水梦</title></programme><programme start="20260908180300 +0800" stop="20260908202500 +0800" channel="unk_web_CHC高清电影"><title lang="zh">捕风追影</title></programme><programme start="20260908202500 +0800" stop="20260908220000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">又是一年三月三</title></programme><programme start="20260908220000 +0800" stop="20260908233300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">戴帽绅士</title></programme><programme start="20260909060000 +0800" stop="20260909075300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">龙之战</title></programme><programme start="20260909075300 +0800" stop="20260909092300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">那都不是事</title></programme><programme start="20260909092300 +0800" stop="20260909112100 +0800" channel="unk_web_CHC高清电影"><title lang="zh">戏台</title></programme><programme start="20260909112100 +0800" stop="20260909125200 +0800" channel="unk_web_CHC高清电影"><title lang="zh">冰雪大围捕</title></programme><programme start="20260909125200 +0800" stop="20260909144300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">交换人生</title></programme><programme start="20260909144300 +0800" stop="20260909162900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">天上的菊美</title></programme><programme start="20260909162900 +0800" stop="20260909182700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">年会不能停!</title></programme><programme start="20260909182700 +0800" stop="20260909202900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">大路朝天</title></programme><programme start="20260909202900 +0800" stop="20260909220000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">救心行动</title></programme><programme start="20260909220000 +0800" stop="20260909234000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">打工老板</title></programme><programme start="20260911060000 +0800" stop="20260911071800 +0800" channel="unk_web_CHC高清电影"><title lang="zh">图鲁·莱卡</title></programme><programme start="20260911071800 +0800" stop="20260911110900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">正义联盟:扎克·施奈德版</title></programme><programme start="20260911110900 +0800" stop="20260911125700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">好梦一日游</title></programme><programme start="20260911125700 +0800" stop="20260911153200 +0800" channel="unk_web_CHC高清电影"><title lang="zh">霍比特人 史矛革之战</title></programme><programme start="20260911153200 +0800" stop="20260911171000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">我的特工爷爷</title></programme><programme start="20260911171000 +0800" stop="20260911183900 +0800" channel="unk_web_CHC高清电影"><title lang="zh">寻找刘三姐</title></programme><programme start="20260911183900 +0800" stop="20260911202700 +0800" channel="unk_web_CHC高清电影"><title lang="zh">我愿意</title></programme><programme start="20260911202700 +0800" stop="20260911220000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">野人之雨林诀</title></programme><programme start="20260911220000 +0800" stop="20260911234000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">爸,我一定行的</title></programme><programme start="20260912060000 +0800" stop="20260912074000 +0800" channel="unk_web_CHC高清电影"><title lang="zh">回廊亭</title></programme><programme start="20260912074000 +0800" stop="20260912090300 +0800" channel="unk_web_CHC高清电影"><title lang="zh">0.5的爱情</title></programme><programme start="20260912090300 +0800" stop="20260912103500 +0800" channel="unk_web_CHC高清电影"><title lang="zh">武状元苏乞儿</title></programLine truncated
|
||||||
+73
-20
@@ -83,7 +83,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<h2>GitHub / 码云探针</h2>
|
<h2>GitHub / 阿里云探针</h2>
|
||||||
<div id="probe-list" class="probe-grid"></div>
|
<div id="probe-list" class="probe-grid"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -165,32 +165,47 @@
|
|||||||
return items.join('');
|
return items.join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function batchTag(state) {
|
||||||
|
if (state === 'consumed') return '<span class="tag ok">已消费</span>';
|
||||||
|
if (state === 'submitted') return '<span class="tag running">已提交</span>';
|
||||||
|
if (state === 'rejected') return '<span class="tag err">已拒绝</span>';
|
||||||
|
if (state === 'expired') return '<span class="tag err">已过期</span>';
|
||||||
|
return '<span class="tag wait">待处理</span>';
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderBatchRows(batches) {
|
||||||
|
if (!batches || !batches.length) return '<div class="muted" style="margin-top:6px">暂无批次记录</div>';
|
||||||
|
return batches.map(b => `
|
||||||
|
<div class="muted" style="margin-top:6px">
|
||||||
|
${batchTag(b.state)} ${(b.batch_id || '-').slice(-12)} · 提交于 ${b.created_at || '-'}${b.consumed_at ? ' · 回传于 ' + b.consumed_at : ''}${b.last_state_reason ? ' · ' + b.last_state_reason : ''}
|
||||||
|
</div>
|
||||||
|
`).join('');
|
||||||
|
}
|
||||||
|
|
||||||
function renderProbe(data) {
|
function renderProbe(data) {
|
||||||
const summary = data.probe_summary || {};
|
const summary = data.probe_summary || {};
|
||||||
|
const details = data.probe_details || {};
|
||||||
|
const as = details.aliyun_speed || {};
|
||||||
const items = [];
|
const items = [];
|
||||||
items.push({
|
items.push({
|
||||||
name: '码云探针',
|
name: '阿里云国内测速',
|
||||||
value: data.pending_probe ? (data.pending_probe.batch_id || '已提交') : '无待处理',
|
value: data.pending_probe ? (data.pending_probe.batch_id || '已提交') : '无待处理批次',
|
||||||
extra: data.pending_probe ? '过期: ' + (data.pending_probe.expires_at || '-') : '等待新批次',
|
extra: data.pending_probe ? '过期: ' + (data.pending_probe.expires_at || '-') : '等待下一批次',
|
||||||
state: data.pending_probe ? 'running' : 'wait',
|
state: data.pending_probe ? 'running' : 'wait',
|
||||||
meta: `累计 ${summary.gitee_total || 0} 批 · 已提交 ${summary.gitee_submitted || 0} · 已消费 ${summary.gitee_consumed || 0}`
|
meta: `累计 ${summary.aliyun_total || 0} 批 · 已消费 ${summary.aliyun_consumed || 0} · 国内测速成功 ${as.ok || 0}/${as.total || 0}`
|
||||||
});
|
});
|
||||||
items.push({
|
items.push({
|
||||||
name: 'GitHub 探针',
|
name: 'GitHub deep 探针',
|
||||||
value: data.pending_github ? (data.pending_github.batch_id || '已提交') : '无待处理',
|
value: data.pending_github ? (data.pending_github.batch_id || '已提交') : '无待处理批次',
|
||||||
extra: data.pending_github ? '过期: ' + (data.pending_github.expires_at || '-') : '等待新批次',
|
extra: data.pending_github ? '过期: ' + (data.pending_github.expires_at || '-') : '等待下一批次',
|
||||||
state: data.pending_github ? 'running' : 'wait',
|
state: data.pending_github ? 'running' : 'wait',
|
||||||
meta: `累计 ${summary.github_total || 0} 批 · 已提交 ${summary.github_submitted || 0} · 已消费 ${summary.github_consumed || 0}`
|
meta: `累计 ${summary.github_total || 0} 批 · 已消费 ${summary.github_consumed || 0}`
|
||||||
});
|
});
|
||||||
const details = (data.probe_details || []).map(item => {
|
const rows = [
|
||||||
const candidate = item.candidate || {};
|
'<div class="muted" style="margin-top:8px; font-weight:600">最近批次</div>' + renderBatchRows(details.aliyun_batches),
|
||||||
const result = item.result || {};
|
'<div class="muted" style="margin-top:10px; font-weight:600">最近批次</div>' + renderBatchRows(details.github_batches)
|
||||||
const resultText = result.count == null ? '暂无回传' : `${result.count} 条结果 · ${result.status || '未知'}`;
|
];
|
||||||
const progress = item.progress || {};
|
return items.map((item, i) => `
|
||||||
const progressText = progress.total ? `处理中 ${progress.processed}/${progress.total},剩余 ${progress.remaining},${progress.status}` : '暂无处理中进度';
|
|
||||||
return `<div class="muted" style="margin-top:6px">${item.label}: ${progressText}<br>候选 ${candidate.count || 0} 条 · ${resultText}<br>候选批次 ${candidate.batch_id || '-'} · 回传批次 ${result.batch_id || '-'}<br>结果更新时间 ${result.mtime || '暂无'} · 进度更新时间 ${progress.updated_at || '暂无'}</div>`;
|
|
||||||
}).join('');
|
|
||||||
return items.map(item => `
|
|
||||||
<div class="probe-item">
|
<div class="probe-item">
|
||||||
<div class="probe-head">
|
<div class="probe-head">
|
||||||
<div class="probe-name">${item.name}</div>
|
<div class="probe-name">${item.name}</div>
|
||||||
@@ -198,7 +213,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="muted" style="margin-top:8px">${item.value}</div>
|
<div class="muted" style="margin-top:8px">${item.value}</div>
|
||||||
<div class="muted">${item.extra}</div>
|
<div class="muted">${item.extra}</div>
|
||||||
<div class="muted" style="margin-top:6px; color:#2d6cdf; font-weight:600">${item.meta}</div>${details}
|
<div class="muted" style="margin-top:6px; color:#2d6cdf; font-weight:600">${item.meta}</div>${rows[i]}
|
||||||
</div>
|
</div>
|
||||||
`).join('');
|
`).join('');
|
||||||
}
|
}
|
||||||
@@ -228,7 +243,7 @@
|
|||||||
document.getElementById('current-stage').textContent = rt.current_stage || '-';
|
document.getElementById('current-stage').textContent = rt.current_stage || '-';
|
||||||
renderSummary(job);
|
renderSummary(job);
|
||||||
|
|
||||||
const streamCards = Object.entries(d.streams || {}).map(([k, v]) => `
|
let streamCards = Object.entries(d.streams || {}).map(([k, v]) => `
|
||||||
<div class="card stat">
|
<div class="card stat">
|
||||||
<small>${k}</small>
|
<small>${k}</small>
|
||||||
<div class="n">${v}</div>
|
<div class="n">${v}</div>
|
||||||
@@ -236,6 +251,44 @@
|
|||||||
`).join('') + `
|
`).join('') + `
|
||||||
<div class="card stat"><small>严格稳定</small><div class="n">${d.strict_streams || 0}</div></div>`;
|
<div class="card stat"><small>严格稳定</small><div class="n">${d.strict_streams || 0}</div></div>`;
|
||||||
streamCards += `<div class="card stat"><small>时间性观察</small><div class="n">${d.intermittent_streams || 0}</div></div>`;
|
streamCards += `<div class="card stat"><small>时间性观察</small><div class="n">${d.intermittent_streams || 0}</div></div>`;
|
||||||
|
const gaps = d.channel_gaps || {};
|
||||||
|
streamCards += `<div class="card stat"><small>频道缺口</small><div class="n">${gaps.count || 0}</div><div class="muted">${gaps.message || ''}</div></div>`;
|
||||||
|
const survival = d.survival || {};
|
||||||
|
const queue = d.queue_stats || {};
|
||||||
|
const daily = d.daily || {};
|
||||||
|
streamCards += `
|
||||||
|
<div class="card stat"><small>正式节目单线路</small><div class="n">${d.formal_count || 0}</div></div>
|
||||||
|
<div class="card stat"><small>24h / 48h 存活率</small><div class="n">${(survival['24'] || {}).rate || 0}% / ${(survival['48'] || {}).rate || 0}%</div></div>
|
||||||
|
<div class="card stat"><small>待检队列</small><div class="n">${queue.pending_new || 0} / ${queue.pending_domestic || 0} / ${queue.pending_retest || 0} / ${queue.pending_unstable || 0}</div><div class="muted">新源 / 国内测速 / 复测 / 复活</div></div>
|
||||||
|
<div class="card stat"><small>最老待检源</small><div class="n">${Number(queue.queue_age_max_hours || 0).toFixed(1)}h</div><div class="muted">24h 新增 ${queue.new_sources_last_24h || 0}</div></div>
|
||||||
|
<div class="card stat"><small>今日新增 / 完成</small><div class="n">${daily.new || 0} / ${daily.completed || 0}</div></div>
|
||||||
|
<div class="card stat"><small>今日失败 / 淘汰</small><div class="n">${daily.failed || 0} / ${daily.discarded || 0}</div></div>`;
|
||||||
|
const dq = d.domain_quality || {};
|
||||||
|
const cr = dq.circuit_states || {};
|
||||||
|
const saved = dq.saved_unique_candidates_today || {};
|
||||||
|
const pr = dq.probe_ratios || {};
|
||||||
|
const sr = dq.source_effectiveness_7d || {};
|
||||||
|
const pub = dq.discovery_to_publication_7d || {};
|
||||||
|
const ns = dq.new_source_survival_24h || {};
|
||||||
|
streamCards += `<div class="card stat"><small>来源有效率(7天)</small><div class="n">${sr.rate == null ? '-' : sr.rate + '%'}</div><div class="muted">${sr.effective_sources || 0} / ${sr.fetched_sources || 0} 去重来源</div></div>
|
||||||
|
<div class="card stat"><small>发现到首次正式发布(7天)</small><div class="n">${pub.avg_hours == null ? '-' : pub.avg_hours + 'h'}</div><div class="muted">${pub.published || 0} 条有记录线路</div></div>
|
||||||
|
<div class="card stat"><small>新源24h存活率</small><div class="n">${ns.rate == null ? '-' : ns.rate + '%'}</div><div class="muted">${ns.alive || 0} / ${ns.eligible || 0} 完整窗口</div></div>`;
|
||||||
|
streamCards += `<div class="card stat"><small>强 / 软 / 抽样熔断</small><div class="n">${cr.hard || 0} / ${cr.soft || 0} / ${cr.half_open || 0}</div></div>
|
||||||
|
<div class="card stat"><small>今日暂停候选(去重)</small><div class="n">${saved.fast || 0} / ${saved.domestic || 0}</div><div class="muted">快速 / 国内;非实际请求节省数</div></div>
|
||||||
|
<div class="card stat"><small>回传 / 执行完整率</small><div class="n">${pr.return_rate || 0}% / ${pr.execution_rate || 0}%</div><div class="muted">迁移后有回执批次</div></div>`;
|
||||||
|
const dq = d.domain_quality || {};
|
||||||
|
const cr = dq.circuit_states || {};
|
||||||
|
const saved = dq.saved_unique_candidates_today || {};
|
||||||
|
const pr = dq.probe_ratios || {};
|
||||||
|
const sr = dq.source_effectiveness_7d || {};
|
||||||
|
const pub = dq.discovery_to_publication_7d || {};
|
||||||
|
const ns = dq.new_source_survival_24h || {};
|
||||||
|
streamCards += `<div class="card stat"><small>来源有效率(7天)</small><div class="n">${sr.rate == null ? '-' : sr.rate + '%'}</div><div class="muted">${sr.effective_sources || 0} / ${sr.fetched_sources || 0} 去重来源</div></div>
|
||||||
|
<div class="card stat"><small>发现到首次正式发布(7天)</small><div class="n">${pub.avg_hours == null ? '-' : pub.avg_hours + 'h'}</div><div class="muted">${pub.published || 0} 条有记录线路</div></div>
|
||||||
|
<div class="card stat"><small>新源24h存活率</small><div class="n">${ns.rate == null ? '-' : ns.rate + '%'}</div><div class="muted">${ns.alive || 0} / ${ns.eligible || 0} 完整窗口</div></div>`;
|
||||||
|
streamCards += `<div class="card stat"><small>强 / 软 / 抽样熔断</small><div class="n">${cr.hard || 0} / ${cr.soft || 0} / ${cr.half_open || 0}</div></div>
|
||||||
|
<div class="card stat"><small>今日暂停候选(去重)</small><div class="n">${saved.fast || 0} / ${saved.domestic || 0}</div><div class="muted">快速 / 国内;非实际请求节省数</div></div>
|
||||||
|
<div class="card stat"><small>回传 / 执行完整率</small><div class="n">${pr.return_rate || 0}% / ${pr.execution_rate || 0}%</div><div class="muted">迁移后有回执批次</div></div>`;
|
||||||
document.getElementById('stream-cards').innerHTML = streamCards;
|
document.getElementById('stream-cards').innerHTML = streamCards;
|
||||||
document.getElementById('stage-list').innerHTML = renderStageList(rt.stages || {});
|
document.getElementById('stage-list').innerHTML = renderStageList(rt.stages || {});
|
||||||
document.getElementById('probe-list').innerHTML = renderProbe(d);
|
document.getElementById('probe-list').innerHTML = renderProbe(d);
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
+1
-1
@@ -1 +1 @@
|
|||||||
{"generated_at":"2026-09-21 02:24:01","categories":{"cctv":{"channels":11,"streams":13},"hk_mo_tw":{"channels":9,"streams":9},"local":{"channels":6,"streams":7},"satellite":{"channels":10,"streams":14},"webcast":{"channels":71,"streams":71}},"strict_streams":29,"intermittent_streams":2,"streams":{"published":114,"active":253,"new":587,"unstable":42},"pending_probe":{"batch_id":"cn-cs-20260921T040518Z-3b76dd1e","expires_at":"2026-09-22T10:05:18Z"},"pending_github":{"batch_id":"gh-auth-20260912T061849Z-a89bee17","expires_at":"2026-09-13T06:18:49Z"},"probe_summary":{"gitee_total":141,"gitee_submitted":3,"gitee_consumed":55,"gitee_rejected":1,"gitee_expired":82,"github_total":15,"github_submitted":2,"github_consumed":10,"github_rejected":1,"github_expired":2},"probe_details":[{"name":"gitee-cs","label":"Gitee 主账号","candidate":{"batch_id":"cn-cs-20260921T040518Z-3b76dd1e","count":185,"status":"submitted","mtime":"2026-09-21 00:05:19"},"result":{"batch_id":"cn-cs-20260913T061501Z-2b8cde74","count":600,"status":"complete","mtime":"2026-09-20 16:03:18"},"progress":null},{"name":"gitee-css","label":"Gitee 账号2","candidate":{"batch_id":"cn-css-20260921T040519Z-1ff988e9","count":185,"status":"submitted","mtime":"2026-09-21 00:05:20"},"result":{"batch_id":"cn-css-20260915T040326Z-23e0ee46","count":600,"status":"complete","mtime":"2026-09-20 16:03:25"},"progress":null},{"name":"gitee-csss","label":"Gitee 账号3","candidate":{"batch_id":"cn-csss-20260921T040520Z-5f85bdb0","count":185,"status":"submitted","mtime":"2026-09-21 00:05:21"},"result":{"batch_id":"cn-csss-20260914T201355Z-4e919087","count":600,"status":"complete","mtime":"2026-09-20 16:03:28"},"progress":null},{"name":"github-deep","label":"GitHub","candidate":{"batch_id":"gh-deep-20260911T050152Z-1d418c63","count":82,"status":"submitted","mtime":"2026-09-11 01:01:52"},"result":null,"progress":null}],"quality":{"github_video_ok":273,"github_risk_events":691,"github_total":851,"top_sources":[{"source_id":13,"name":"kstore-aiwex","score":76.56,"source_count":61,"domestic_success_count":61},{"source_id":11,"name":"zhoujie IPv4","score":60.77,"source_count":104,"domestic_success_count":76},{"source_id":47,"name":"Collect-IPTV 精选排序","score":36.48,"source_count":213,"domestic_success_count":93},{"source_id":65,"name":"telegram收集","score":0.86,"source_count":1875,"domestic_success_count":6},{"source_id":1,"name":"fanmingming IPv4","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":2,"name":"fanmingming IPv6","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":3,"name":"YanG-1989 Gather","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":4,"name":"Kimentanm iptv","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":5,"name":"BurningC4 V4","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":6,"name":"Tvlist CCTV","score":0.0,"source_count":0,"domestic_success_count":0}]},"job_summary":{"state":"running","current_stage":"generate","progress_pct":60.0,"last_error":"未发现异常","stage_health":{"ok":6,"running":0,"waiting":2,"err":2}},"runtime":{"state":"running","current_stage":"generate","progress_pct":60.0,"completed_stage_count":6,"total_stage_count":10,"elapsed_seconds":198.05,"started_at":"2026-09-21 02:20:43","finished_at":"","stages":{"init":{"state":"ok","label":"init","current":0,"total":0,"elapsed_seconds":3.86,"started_at":"2026-09-21 02:20:43","finished_at":"2026-09-21 02:20:46"},"keywords":{"state":"ok","label":"keywords","current":0,"total":0,"elapsed_seconds":17.6,"started_at":"2026-09-21 02:20:46","finished_at":"2026-09-21 02:21:03"},"collect":{"state":"ok","label":"collect","current":41,"total":41,"elapsed_seconds":54.67,"started_at":"2026-09-21 02:21:03","finished_at":"2026-09-21 02:21:57"},"github_auth":{"state":"err","label":"github_auth","current":1,"total":5,"elapsed_seconds":6.31,"started_at":"2026-09-21 02:21:57","finished_at":"2026-09-21 02:22:03"},"speedtest":{"state":"ok","label":"speedtest","current":5,"total":5,"elapsed_seconds":7.15,"started_at":"2026-09-21 02:22:03","finished_at":"2026-09-21 02:22:10"},"github_deep":{"state":"err","label":"github_deep","current":1,"total":5,"elapsed_seconds":1.31,"started_at":"2026-09-21 02:22:10","finished_at":"2026-09-21 02:22:11"},"epg":{"state":"ok","label":"epg","current":803,"total":803,"elapsed_seconds":7.31,"started_at":"2026-09-21 02:22:11","finished_at":"2026-09-21 02:22:18"},"generate":{"state":"ok","label":"generate","current":3,"total":3,"elapsed_seconds":103.06,"started_at":"2026-09-21 02:22:18","finished_at":"2026-09-21 02:24:01"}}},"recent_runs":[{"run_id":"20260921022043","stage":"epg","status":"ok","end_at":"2026-09-21 02:22:18","stats_json":"{\"detail\": \"{\\\"refreshed\\\": 179}\"}"},{"run_id":"20260921022043","stage":"github_deep","status":"err","end_at":"2026-09-21 02:22:11","stats_json":"{\"detail\": \"{\\\"err\\\": \\\"Expecting property name enclosed in double quotes:Line truncated
|
{"generated_at":"2026-10-13 23:40:42","categories":{"cctv":{"channels":20,"streams":103},"satellite":{"channels":33,"streams":128},"local":{"channels":5,"streams":6},"hk_mo_tw":{"channels":15,"streams":37}},"strict_streams":0,"intermittent_streams":13,"formal_count":274,"survival":{"24":{"alive":12,"total":274,"rate":4.38},"48":{"alive":14,"total":274,"rate":5.11}},"queue_stats":{"pending_new":3,"pending_domestic":25,"pending_retest":11,"pending_unstable":17,"queue_age_max_hours":21.27,"queue_oldest_at":"2026-10-13 02:24:38","new_sources_last_24h":2},"daily":{"new":2,"completed":5,"failed":5,"discarded":1926},"streams":{"published":274,"active":10,"new":2,"unstable":390},"pending_probe":{"batch_id":"cn-aliyun-2026-10-14T032639Z-9a5236f9","expires_at":"2026-10-15T09:26:39Z"},"pending_github":{"batch_id":"gh-auth-20261013T062347Z-122352bd","expires_at":"2026-10-14T06:23:47Z"},"probe_summary":{"aliyun_total":8423,"aliyun_submitted":1,"aliyun_consumed":8235,"aliyun_rejected":1,"aliyun_expired":186,"github_total":50,"github_submitted":2,"github_consumed":30,"github_rejected":11,"github_expired":7,"ratios":{"batches":4750,"expected":286733,"returned":286733,"executed":282592,"accepted":40774,"return_rate":100.0,"execution_rate":98.56,"completion_rate":97.77,"scope":"item ratios: post-migration receipts; completion: all recorded issued batches"}},"probe_details":{"aliyun_batches":[{"batch_id":"cn-aliyun-2026-10-14T034022Z-d44abce9","created_at":"2026-10-14T03:40:22Z","expires_at":"2026-10-15T09:40:22Z","state":"consumed","consumed_at":"2026-10-13 23:40:24","last_state_reason":"payload-consumed"},{"batch_id":"cn-aliyun-2026-10-14T033947Z-b034b0c9","created_at":"2026-10-14T03:39:47Z","expires_at":"2026-10-15T09:39:47Z","state":"consumed","consumed_at":"2026-10-13 23:39:48","last_state_reason":"payload-consumed"},{"batch_id":"cn-aliyun-2026-10-14T033912Z-9b68c491","created_at":"2026-10-14T03:39:12Z","expires_at":"2026-10-15T09:39:12Z","state":"consumed","consumed_at":"2026-10-13 23:39:14","last_state_reason":"payload-consumed"},{"batch_id":"cn-aliyun-2026-10-14T033836Z-e35350a2","created_at":"2026-10-14T03:38:36Z","expires_at":"2026-10-15T09:38:36Z","state":"consumed","consumed_at":"2026-10-13 23:38:39","last_state_reason":"payload-consumed"},{"batch_id":"cn-aliyun-2026-10-14T033759Z-18e976c7","created_at":"2026-10-14T03:37:59Z","expires_at":"2026-10-15T09:37:59Z","state":"consumed","consumed_at":"2026-10-13 23:38:02","last_state_reason":"payload-consumed"},{"batch_id":"cn-aliyun-2026-10-14T033722Z-e34a6486","created_at":"2026-10-14T03:37:22Z","expires_at":"2026-10-15T09:37:22Z","state":"consumed","consumed_at":"2026-10-13 23:37:25","last_state_reason":"payload-consumed"}],"github_batches":[{"batch_id":"gh-deep-20261013T062449Z-10777e59","created_at":"2026-10-13 02:24:49","expires_at":"2026-10-14T06:24:49Z","state":"submitted","consumed_at":null,"last_state_reason":"submit"},{"batch_id":"gh-auth-20261013T062347Z-122352bd","created_at":"2026-10-13 02:23:47","expires_at":"2026-10-14T06:23:47Z","state":"submitted","consumed_at":null,"last_state_reason":"submit"},{"batch_id":"gh-deep-20261012T064203Z-c6b1c8bf","created_at":"2026-10-12 02:42:03","expires_at":"2026-10-13T06:42:03Z","state":"expired","consumed_at":null,"last_state_reason":"push-failed"},{"batch_id":"gh-auth-20261012T064055Z-56a56483","created_at":"2026-10-12 02:40:55","expires_at":"2026-10-13T06:40:55Z","state":"consumed","consumed_at":"2026-10-13 02:23:47","last_state_reason":"payload-consumed"},{"batch_id":"gh-deep-20261011T062640Z-d4b80411","created_at":"2026-10-11 02:26:40","expires_at":"2026-10-12T06:26:40Z","state":"rejected","consumed_at":null,"last_state_reason":"payload-mismatch"},{"batch_id":"gh-auth-20261011T062538Z-7110db8a","created_at":"2026-10-11 02:25:38","expires_at":"2026-10-12T06:25:38Z","state":"rejected","consumed_at":null,"last_state_reason":"payload-mismatch"}],"aliyun_speed":{"total":381172,"ok":42572}},"quality":{"github_video_ok":287,"github_risk_events":720,"github_total":894,"top_sources":[{"source_id":13,"name":"kstore-aiwex","score":76.56,"source_count":61,"domestic_success_count":61},{"source_id":11,"name":"zhoujie IPv4","score":35.15,"source_count":65,"domestic_success_count":49},{"source_id":109,"name":"search:www.abroadradio.net","score":35.0,"source_count":1,"domestic_success_count":1},{"source_id":7,"name":"iptv-org CN","score":25.42,"source_count":12,"domestic_success_count":6},{"source_id":47,"name":"Collect-IPTV 精选排序","score":17.68,"source_count":185,"domestic_success_count":63},{"source_id":75,"name":"github:ANOKO1122/iptv-zb-zy","score":14.22,"source_count":51,"domestic_success_count":13},{"source_id":9,"name":"iptv-org TW","score":1.67,"source_count":3,"domestic_success_count":1},{"source_id":1,"name":"fanmingming IPv4","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":2,"name":"fanmingming IPv6","score":0.0,"source_count":0,"domestic_success_count":0},{"source_id":3,"name":"YanG-1989 GaLine truncated
|
||||||
+66
-1511
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user