Compare commits

...
79 Commits
Author SHA1 Message Date
iptv-bot c273a3f945 update 2026-10-13 23:40 2026-10-13 23:40:44 -04:00
iptv-bot c34d7b7d17 update 2026-10-13 02:28 2026-10-13 02:28:41 -04:00
iptv-bot ec7e84b4a2 update 2026-10-12 02:43 2026-10-12 02:43:57 -04:00
iptv-bot 5fcd62e7c7 update 2026-10-11 02:28 2026-10-11 02:28:46 -04:00
iptv-bot 2b02edc3e5 update 2026-10-10 02:31 2026-10-10 02:31:23 -04:00
iptv-bot f5ff5ce247 update 2026-10-09 02:36 2026-10-09 02:36:41 -04:00
iptv-bot 0ffed98d9a update 2026-10-08 02:31 2026-10-08 02:31:10 -04:00
iptv-bot bf80c18534 update 2026-10-07 02:26 2026-10-07 02:26:30 -04:00
iptv-bot 5d88027065 update 2026-10-06 02:39 2026-10-06 02:39:41 -04:00
iptv-bot c055072c9e update 2026-10-05 11:31 2026-10-05 11:31:20 -04:00
iptv-bot 9fcd5bb858 update 2026-10-05 10:36 2026-10-05 10:36:30 -04:00
iptv-bot f0ac2ed06c update 2026-10-05 10:03 2026-10-05 10:03:38 -04:00
iptv-bot 30cd12499b update 2026-10-05 09:43 2026-10-05 09:43:36 -04:00
iptv-bot d949b0d05c update 2026-10-05 08:36 2026-10-05 08:36:07 -04:00
iptv-bot ab76bb68e1 update 2026-10-05 08:12 2026-10-05 08:12:41 -04:00
iptv-bot 432c09d2a5 update 2026-10-05 07:01 2026-10-05 07:01:17 -04:00
iptv-bot 408e403440 update 2026-10-05 06:35 2026-10-05 06:35:06 -04:00
iptv-bot 4e636a08d3 update 2026-10-05 05:27 2026-10-05 05:27:03 -04:00
iptv-bot 45d1a42317 update 2026-10-05 03:34 2026-10-05 03:34:56 -04:00
iptv-bot ca31a4f3df update 2026-10-04 02:26 2026-10-04 02:26:36 -04:00
iptv-bot d98dd20f99 update 2026-10-03 02:24 2026-10-03 02:24:49 -04:00
iptv-bot a2deb8df87 update 2026-10-02 11:02 2026-10-02 11:02:58 -04:00
iptv-bot 38ce8cdb2f update 2026-10-02 02:34 2026-10-02 02:34:30 -04:00
iptv-bot 2a04952857 update 2026-10-01 14:34 2026-10-01 14:34:09 -04:00
iptv-bot f3440317d1 update 2026-10-01 12:56 2026-10-01 12:56:36 -04:00
iptv-bot 7f5a08fd3f update 2026-10-01 12:54 2026-10-01 12:54:46 -04:00
iptv-bot d16efaf930 update 2026-10-01 12:52 2026-10-01 12:52:55 -04:00
iptv-bot de799ebc8a update 2026-10-01 12:50 2026-10-01 12:50:52 -04:00
iptv-bot b08c7949b7 update 2026-10-01 12:48 2026-10-01 12:48:31 -04:00
iptv-bot 0714f5906f update 2026-10-01 12:40 2026-10-01 12:40:28 -04:00
iptv-bot bbd4df8389 update 2026-10-01 12:38 2026-10-01 12:38:34 -04:00
iptv-bot f8ffa4fa81 update 2026-10-01 12:36 2026-10-01 12:36:28 -04:00
iptv-bot 937f6081c0 update 2026-10-01 12:32 2026-10-01 12:32:46 -04:00
iptv-bot 1ac988bbcb update 2026-10-01 12:29 2026-10-01 12:29:52 -04:00
iptv-bot adbd802edb update 2026-10-01 12:27 2026-10-01 12:27:05 -04:00
iptv-bot 458fe74ea1 update 2026-10-01 12:23 2026-10-01 12:23:41 -04:00
iptv-bot bfcbca657b update 2026-10-01 12:21 2026-10-01 12:21:23 -04:00
iptv-bot 79d9efff91 update 2026-10-01 12:18 2026-10-01 12:18:37 -04:00
iptv-bot 73b257710f update 2026-10-01 11:58 2026-10-01 11:58:13 -04:00
iptv-bot 2029890f5e update 2026-10-01 11:56 2026-10-01 11:56:15 -04:00
iptv-bot 77ffeb3409 update 2026-10-01 11:54 2026-10-01 11:54:28 -04:00
iptv-bot 3c4080f5b2 update 2026-10-01 11:52 2026-10-01 11:52:09 -04:00
iptv-bot dda5f19130 update 2026-10-01 11:50 2026-10-01 11:50:21 -04:00
iptv-bot 4a25bc2f8d update 2026-10-01 11:48 2026-10-01 11:48:40 -04:00
iptv-bot 7507037979 update 2026-10-01 11:46 2026-10-01 11:46:50 -04:00
iptv-bot 5b6d8358fe update 2026-10-01 11:44 2026-10-01 11:44:30 -04:00
iptv-bot a3146845ba update 2026-10-01 11:42 2026-10-01 11:42:10 -04:00
iptv-bot f2f818b03a update 2026-10-01 02:16 2026-10-01 02:16:40 -04:00
iptv-bot 38f53bb2b1 epg refresh 2026-09-30 03:01:08 -04:00
iptv-bot 57843c55ba update 2026-09-30 02:15 2026-09-30 02:15:57 -04:00
iptv-bot 3a534e7256 epg refresh 2026-09-29 15:03:25 -04:00
iptv-bot 5ffff12204 epg refresh 2026-09-29 03:04:06 -04:00
iptv-bot ccccf09018 update 2026-09-29 02:25 2026-09-29 02:25:33 -04:00
iptv-bot 7378c3045c epg refresh 2026-09-28 15:03:52 -04:00
iptv-bot 0422eb08e2 epg refresh 2026-09-28 03:02:32 -04:00
iptv-bot 3a5225d5d6 update 2026-09-28 02:14 2026-09-28 02:14:10 -04:00
iptv-bot 1af4999e63 epg refresh 2026-09-27 15:01:45 -04:00
iptv-bot 9de12d6085 epg refresh 2026-09-27 03:05:18 -04:00
iptv-bot 41290fc748 update 2026-09-27 02:27 2026-09-27 02:27:31 -04:00
iptv-bot b4e4f3ddc2 epg refresh 2026-09-26 15:02:37 -04:00
iptv-bot b453cc6e60 epg refresh 2026-09-26 03:05:59 -04:00
iptv-bot 17eefab826 update 2026-09-26 02:26 2026-09-26 02:26:38 -04:00
iptv-bot 48139fe0dc epg refresh 2026-09-25 15:02:26 -04:00
iptv-bot d10c88cf2b epg refresh 2026-09-25 03:02:54 -04:00
iptv-bot 24759be25e update 2026-09-25 02:17 2026-09-25 02:17:50 -04:00
iptv-bot 124f55c5e7 epg refresh 2026-09-24 15:01:54 -04:00
iptv-bot d67f8d5db5 epg refresh 2026-09-24 03:01:27 -04:00
iptv-bot d302a50309 update 2026-09-24 02:30 2026-09-24 02:30:22 -04:00
iptv-bot 4d86e1b65f epg refresh 2026-09-23 15:03:58 -04:00
iptv-bot 33d0c9ba0f epg refresh 2026-09-23 03:03:05 -04:00
iptv-bot a35a1ec98f update 2026-09-23 02:20 2026-09-23 02:20:31 -04:00
iptv-bot 4d24b4a67e epg refresh 2026-09-22 15:04:00 -04:00
iptv-bot 4fef894ec9 epg refresh 2026-09-22 03:01:59 -04:00
iptv-bot 14444c8a55 update 2026-09-22 02:13 2026-09-22 02:13:30 -04:00
iptv-bot 9a1334324d epg refresh 2026-09-21 15:03:05 -04:00
iptv-bot 2e2fa50fbc epg refresh 2026-09-21 03:02:08 -04:00
iptv-bot c195616f7c update 2026-09-21 02:24 2026-09-21 02:24:16 -04:00
iptv-bot fcfd56837f epg refresh 2026-09-20 15:01:59 -04:00
iptv-bot bad5110c4f epg refresh 2026-09-20 03:03:44 -04:00
8 changed files with 337 additions and 2585 deletions

No files matched your search

-148
View File
@@ -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 内按“央视频道 / 卫视频道 / 港澳台频道 / 江苏地方频道 / 网络直播”分组;地方频道仅保留江苏省内行政区市县电视台。
## 实现结果(最近一次运行)
- 央视频道: 21 台 / 138 线 · 卫视频道: 60 台 / 190 线
- 港澳台: 66 台 / 93 线 · 江苏地方: 6 台 / 8 线 · 网络直播: 235 台 / 235 线
- 全库有效线路: 664 线;严格稳定: 56 台 / 87 线
(近 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-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 已同步更新。
- **2026-09-16 02:23:39 · 自动运行更新 #20260916021944**
自动运行 #20260916021944(2026-09-16 02:23:39):
央视 21台/247线 · 卫视 64台/402线 · 港澳台 71台/104线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
全库有效 2433 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
- **2026-09-16 00:06:03 · 自动运行更新 #20260916000542**
自动运行 #20260916000542(2026-09-16 00:06:03):
央视 21台/246线 · 卫视 64台/401线 · 港澳台 71台/103线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
全库有效 2430 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
- **2026-09-15 16:03:25 · 自动运行更新 #20260915160252**
自动运行 #20260915160252(2026-09-15 16:03:25):
央视 21台/246线 · 卫视 64台/401线 · 港澳台 71台/103线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
全库有效 2430 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
- **2026-09-15 08:15:47 · 自动运行更新 #20260915081512**
自动运行 #20260915081512(2026-09-15 08:15:47):
央视 21台/246线 · 卫视 64台/401线 · 港澳台 71台/103线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
全库有效 2430 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
## 说明与免责
- 内容仅收集自公开互联网,仅供个人学习测试,请于 24h 内删除;版权归各电视台/平台所有。
- 播放源具有时效性,若失效通常次轮自动剔除并补充新线路。
+195 -887
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -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
View File
@@ -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);
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

+1 -1
View File
@@ -1 +1 @@
{"generated_at":"2026-09-20 02:17:30","categories":{"cctv":{"channels":20,"streams":48},"hk_mo_tw":{"channels":12,"streams":12},"local":{"channels":6,"streams":7},"satellite":{"channels":28,"streams":38},"webcast":{"channels":71,"streams":71}},"strict_streams":85,"intermittent_streams":3,"streams":{"published":176,"active":335,"new":582,"unstable":71},"pending_probe":{"batch_id":"cn-cs-20260920T041824Z-a515a184","expires_at":"2026-09-21T10:18:24Z"},"pending_github":{"batch_id":"gh-auth-20260912T061849Z-a89bee17","expires_at":"2026-09-13T06:18:49Z"},"probe_summary":{"gitee_total":132,"gitee_submitted":3,"gitee_consumed":55,"gitee_rejected":1,"gitee_expired":73,"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-20260920T041824Z-a515a184","count":219,"status":"submitted","mtime":"2026-09-20 00:18:25"},"result":{"batch_id":"cn-cs-20260913T061501Z-2b8cde74","count":600,"status":"complete","mtime":"2026-09-19 16:09:19"},"progress":null},{"name":"gitee-css","label":"Gitee 账号2","candidate":{"batch_id":"cn-css-20260920T041825Z-b7acb494","count":219,"status":"submitted","mtime":"2026-09-20 00:18:26"},"result":{"batch_id":"cn-css-20260915T040326Z-23e0ee46","count":600,"status":"complete","mtime":"2026-09-19 16:09:24"},"progress":null},{"name":"gitee-csss","label":"Gitee 账号3","candidate":{"batch_id":"cn-csss-20260920T041826Z-94cd8245","count":218,"status":"submitted","mtime":"2026-09-20 00:18:27"},"result":{"batch_id":"cn-csss-20260914T201355Z-4e919087","count":600,"status":"complete","mtime":"2026-09-19 16:09:27"},"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":228.07,"started_at":"2026-09-20 02:13:42","finished_at":"","stages":{"init":{"state":"ok","label":"init","current":0,"total":0,"elapsed_seconds":0.85,"started_at":"2026-09-20 02:13:42","finished_at":"2026-09-20 02:13:42"},"keywords":{"state":"ok","label":"keywords","current":0,"total":0,"elapsed_seconds":0.86,"started_at":"2026-09-20 02:13:42","finished_at":"2026-09-20 02:13:42"},"collect":{"state":"ok","label":"collect","current":40,"total":40,"elapsed_seconds":75.42,"started_at":"2026-09-20 02:13:42","finished_at":"2026-09-20 02:14:57"},"github_auth":{"state":"err","label":"github_auth","current":1,"total":5,"elapsed_seconds":1.44,"started_at":"2026-09-20 02:14:57","finished_at":"2026-09-20 02:14:58"},"speedtest":{"state":"ok","label":"speedtest","current":5,"total":5,"elapsed_seconds":11.13,"started_at":"2026-09-20 02:14:58","finished_at":"2026-09-20 02:15:09"},"github_deep":{"state":"err","label":"github_deep","current":1,"total":5,"elapsed_seconds":1.0,"started_at":"2026-09-20 02:15:09","finished_at":"2026-09-20 02:15:09"},"epg":{"state":"ok","label":"epg","current":1279,"total":1279,"elapsed_seconds":22.71,"started_at":"2026-09-20 02:15:10","finished_at":"2026-09-20 02:15:32"},"generate":{"state":"ok","label":"generate","current":3,"total":3,"elapsed_seconds":118.07,"started_at":"2026-09-20 02:15:32","finished_at":"2026-09-20 02:17:30"}}},"recent_runs":[{"run_id":"20260920021342","stage":"epg","status":"ok","end_at":"2026-09-20 02:15:32","stats_json":"{\"detail\": \"{\\\"refreshed\\\": 221}\"}"},{"run_id":"20260920021342","stage":"github_deep","status":"err","end_at":"2026-09-20 02:15:09","stats_json":"{\"detail\": \"{\\\"err\\\": \\\"Expecting property name enclosed in double quLine 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
+67 -1528
View File
File diff suppressed because it is too large. Load diff