Compare commits
94
Commits
0182f44173
...
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 | ||
|
|
c195616f7c | ||
|
|
fcfd56837f | ||
|
|
bad5110c4f | ||
|
|
8341e2b19f | ||
|
|
8cb3e1d15d | ||
|
|
8997dedc33 | ||
|
|
3650e11b64 | ||
|
|
ccf6e4de18 | ||
|
|
63a58599aa | ||
|
|
731cc909bc | ||
|
|
e31b88993c | ||
|
|
b17d56a8a0 | ||
|
|
cacf3ba4f9 | ||
|
|
79ac093900 | ||
|
|
fd00197321 | ||
|
|
54592176ed | ||
|
|
fd4665ddcf | ||
|
|
7d36d96c38 |
No files matched your search
@@ -1,138 +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 台 / 246 线 · 卫视频道: 64 台 / 401 线
|
||||
- 港澳台: 71 台 / 103 线 · 江苏地方: 6 台 / 8 线 · 网络直播: 835 台 / 1672 线
|
||||
- 全库有效线路: 2430 线;严格稳定: 148 台 / 181 线
|
||||
(近 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-15 02:24:44 · 自动运行更新 #20260915022042**
|
||||
自动运行 #20260915022042(2026-09-15 02:24:44):
|
||||
央视 21台/246线 · 卫视 64台/401线 · 港澳台 71台/103线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
||||
全库有效 2430 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-15 00:03:34 · 自动运行更新 #20260915000312**
|
||||
自动运行 #20260915000312(2026-09-15 00:03:34):
|
||||
央视 21台/245线 · 卫视 64台/401线 · 港澳台 68台/95线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
||||
全库有效 2421 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-14 16:14:03 · 自动运行更新 #20260914161342**
|
||||
自动运行 #20260914161342(2026-09-14 16:14:03):
|
||||
央视 21台/245线 · 卫视 64台/401线 · 港澳台 68台/95线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
||||
全库有效 2421 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-14 08:17:29 · 自动运行更新 #20260914081712**
|
||||
自动运行 #20260914081712(2026-09-14 08:17:29):
|
||||
央视 21台/245线 · 卫视 64台/401线 · 港澳台 68台/95线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
||||
全库有效 2421 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-14 02:16:56 · 自动运行更新 #20260914021242**
|
||||
自动运行 #20260914021242(2026-09-14 02:16:56):
|
||||
央视 21台/245线 · 卫视 64台/401线 · 港澳台 68台/95线 · 江苏地方 6台/8线 · 网络直播 835台/1672线
|
||||
全库有效 2421 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-14 00:06:28 · 自动运行更新 #20260914000612**
|
||||
自动运行 #20260914000612(2026-09-14 00:06:28):
|
||||
央视 21台/243线 · 卫视 64台/393线 · 港澳台 50台/64线 · 江苏地方 6台/7线 · 网络直播 835台/1672线
|
||||
全库有效 2379 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-13 16:06:05 · 自动运行更新 #20260913160542**
|
||||
自动运行 #20260913160542(2026-09-13 16:06:05):
|
||||
央视 21台/243线 · 卫视 64台/393线 · 港澳台 50台/64线 · 江苏地方 6台/7线 · 网络直播 835台/1672线
|
||||
全库有效 2379 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-13 08:15:31 · 自动运行更新 #20260913081513**
|
||||
自动运行 #20260913081513(2026-09-13 08:15:31):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 81台/118线 · 江苏地方 10台/12线 · 网络直播 842台/1679线
|
||||
全库有效 2620 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-13 02:16:51 · 自动运行更新 #20260913021242**
|
||||
自动运行 #20260913021242(2026-09-13 02:16:51):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 81台/118线 · 江苏地方 10台/12线 · 网络直播 842台/1679线
|
||||
全库有效 2620 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-13 00:17:30 · 自动运行更新 #20260913001712**
|
||||
自动运行 #20260913001712(2026-09-13 00:17:30):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 81台/118线 · 江苏地方 10台/12线 · 网络直播 819台/1631线
|
||||
全库有效 2572 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-12 16:13:56 · 自动运行更新 #20260912161342**
|
||||
自动运行 #20260912161342(2026-09-12 16:13:56):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 81台/118线 · 江苏地方 10台/12线 · 网络直播 819台/1631线
|
||||
全库有效 2572 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-12 08:16:30 · 自动运行更新 #20260912081612**
|
||||
自动运行 #20260912081612(2026-09-12 08:16:30):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 81台/118线 · 江苏地方 10台/12线 · 网络直播 819台/1631线
|
||||
全库有效 2572 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-12 02:20:54 · 自动运行更新 #20260912021503**
|
||||
自动运行 #20260912021503(2026-09-12 02:20:54):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 81台/118线 · 江苏地方 10台/12线 · 网络直播 819台/1631线
|
||||
全库有效 2572 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-12 00:15:01 · 自动运行更新 #20260912001438**
|
||||
自动运行 #20260912001438(2026-09-12 00:15:01):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 79台/116线 · 江苏地方 10台/12线 · 网络直播 771台/1548线
|
||||
全库有效 2487 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-12 00:10 · 代码备份到 Gitee 仓库**
|
||||
把 /opt/iptv-scraper 完整代码(含 iptv-ops 运维台 ops_console.py)备份到 Gitee cloudcone-data 私有仓 IPTV成熟版备份/iptv-scraper/;新增 cloudcone-data-code-sync.timer 每日自动同步。
|
||||
|
||||
- **2026-09-11 16:15:17 · 自动运行更新 #20260911161500**
|
||||
自动运行 #20260911161500(2026-09-11 16:15:17):
|
||||
央视 21台/326线 · 卫视 65台/485线 · 港澳台 79台/116线 · 江苏地方 10台/12线 · 网络直播 771台/1548线
|
||||
全库有效 2487 线;严格稳定 148台/181线。主要入口 all.m3u / tvbox.json / epg.xml 已同步更新。
|
||||
|
||||
- **2026-09-11 11:17 · 全流程防堵塞加固**
|
||||
新增 orchestrator 跨进程单实例锁(fcntl flock),定时完整流程/EPG独立任务/手动单阶段触发三者互斥,避免并发写库与远端导致冲突卡死;speedtest 推送失败即 reset 清理并标记批次过期,消除残留批次阻塞。健康检查:三端 token 全 200、无在途批次、最近完整流程各阶段全 ok。
|
||||
|
||||
- **2026-09-11 11:06 · 运维台实时进度细化+界面重写+运维能力**
|
||||
iptv-ops 智能运维台三项优化:①采集阶段预枚举源总数,进度条真实显示已处理/共/剩余;②界面重写为卡片化深色主题,新增数据库概览、单阶段触发、产物下载、运行日志面板;③后端新增 /api/logs、/api/download、stage 单阶段触发能力。
|
||||
|
||||
- **2026-09-11 10:34 · 状态页异步阶段进度细化**
|
||||
给 speedtest / github_auth / github_deep 三个异步阶段补中间进度(同步仓库→回收结果→生成候选→推送→完成),状态页各阶段进度条不再只显示起止,可实时看到当前正在执行哪一步。
|
||||
|
||||
- **2026-09-11 10:13 · 根治 GitHub 深检/基础认证卡死**
|
||||
auth 与 deep 两阶段原先共用 candidates.json 互相覆盖导致 auth 永远卡死。已改为分阶段独立文件(candidates_auth/deep.json)、STUCK_HOURS 强制过期清卡死批次、workflow cancel-in-progress + rebase 防 push 冲突、probe.py 回传补 phase 字段。闭环验证:auth 500 条(ok 113)、deep 107 条(ok 36)均已正常消费。
|
||||
|
||||
## 说明与免责
|
||||
|
||||
- 内容仅收集自公开互联网,仅供个人学习测试,请于 24h 内删除;版权归各电视台/平台所有。
|
||||
- 播放源具有时效性,若失效通常次轮自动剔除并补充新线路。
|
||||
@@ -1,2 +1,2 @@
|
||||
<?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 class="section">
|
||||
<h2>GitHub / 码云探针</h2>
|
||||
<h2>GitHub / 阿里云探针</h2>
|
||||
<div id="probe-list" class="probe-grid"></div>
|
||||
</div>
|
||||
|
||||
@@ -165,32 +165,47 @@
|
||||
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) {
|
||||
const summary = data.probe_summary || {};
|
||||
const details = data.probe_details || {};
|
||||
const as = details.aliyun_speed || {};
|
||||
const items = [];
|
||||
items.push({
|
||||
name: '码云探针',
|
||||
value: data.pending_probe ? (data.pending_probe.batch_id || '已提交') : '无待处理',
|
||||
extra: data.pending_probe ? '过期: ' + (data.pending_probe.expires_at || '-') : '等待新批次',
|
||||
name: '阿里云国内测速',
|
||||
value: data.pending_probe ? (data.pending_probe.batch_id || '已提交') : '无待处理批次',
|
||||
extra: data.pending_probe ? '过期: ' + (data.pending_probe.expires_at || '-') : '等待下一批次',
|
||||
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({
|
||||
name: 'GitHub 探针',
|
||||
value: data.pending_github ? (data.pending_github.batch_id || '已提交') : '无待处理',
|
||||
extra: data.pending_github ? '过期: ' + (data.pending_github.expires_at || '-') : '等待新批次',
|
||||
name: 'GitHub deep 探针',
|
||||
value: data.pending_github ? (data.pending_github.batch_id || '已提交') : '无待处理批次',
|
||||
extra: data.pending_github ? '过期: ' + (data.pending_github.expires_at || '-') : '等待下一批次',
|
||||
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 candidate = item.candidate || {};
|
||||
const result = item.result || {};
|
||||
const resultText = result.count == null ? '暂无回传' : `${result.count} 条结果 · ${result.status || '未知'}`;
|
||||
const progress = item.progress || {};
|
||||
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 => `
|
||||
const rows = [
|
||||
'<div class="muted" style="margin-top:8px; font-weight:600">最近批次</div>' + renderBatchRows(details.aliyun_batches),
|
||||
'<div class="muted" style="margin-top:10px; font-weight:600">最近批次</div>' + renderBatchRows(details.github_batches)
|
||||
];
|
||||
return items.map((item, i) => `
|
||||
<div class="probe-item">
|
||||
<div class="probe-head">
|
||||
<div class="probe-name">${item.name}</div>
|
||||
@@ -198,7 +213,7 @@
|
||||
</div>
|
||||
<div class="muted" style="margin-top:8px">${item.value}</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>
|
||||
`).join('');
|
||||
}
|
||||
@@ -228,7 +243,7 @@
|
||||
document.getElementById('current-stage').textContent = rt.current_stage || '-';
|
||||
renderSummary(job);
|
||||
|
||||
const streamCards = Object.entries(d.streams || {}).map(([k, v]) => `
|
||||
let streamCards = Object.entries(d.streams || {}).map(([k, v]) => `
|
||||
<div class="card stat">
|
||||
<small>${k}</small>
|
||||
<div class="n">${v}</div>
|
||||
@@ -236,6 +251,44 @@
|
||||
`).join('') + `
|
||||
<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>`;
|
||||
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('stage-list').innerHTML = renderStageList(rt.stages || {});
|
||||
document.getElementById('probe-list').innerHTML = renderProbe(d);
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
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-15 02:24:44","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":2212,"unstable":294},"pending_probe":{"batch_id":"cn-cs-20260915T040325Z-b2ce6ffa","expires_at":"2026-09-16T10:03:25Z"},"pending_github":{"batch_id":"gh-auth-20260912T061849Z-a89bee17","expires_at":"2026-09-13T06:18:49Z"},"probe_summary":{"gitee_total":87,"gitee_submitted":3,"gitee_consumed":55,"gitee_rejected":1,"gitee_expired":28,"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-20260915T040325Z-b2ce6ffa","count":600,"status":"submitted","mtime":"2026-09-15 00:03:26"},"result":{"batch_id":"cn-cs-20260913T061501Z-2b8cde74","count":600,"status":"complete","mtime":"2026-09-14 16:13:44"},"progress":null},{"name":"gitee-css","label":"Gitee 账号2","candidate":{"batch_id":"cn-css-20260915T062256Z-eaa57f0f","count":600,"status":"submitted","mtime":"2026-09-15 02:22:58"},"result":{"batch_id":"cn-css-20260915T040326Z-23e0ee46","count":600,"status":"complete","mtime":"2026-09-15 02:22:52"},"progress":null},{"name":"gitee-csss","label":"Gitee 账号3","candidate":{"batch_id":"cn-csss-20260915T040328Z-ae3903a4","count":600,"status":"submitted","mtime":"2026-09-15 00:03:31"},"result":{"batch_id":"cn-csss-20260914T201355Z-4e919087","count":600,"status":"complete","mtime":"2026-09-15 00:03:23"},"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":242.79,"started_at":"2026-09-15 02:20:42","finished_at":"","stages":{"init":{"state":"ok","label":"init","current":0,"total":0,"elapsed_seconds":0.85,"started_at":"2026-09-15 02:20:42","finished_at":"2026-09-15 02:20:42"},"keywords":{"state":"ok","label":"keywords","current":0,"total":0,"elapsed_seconds":0.87,"started_at":"2026-09-15 02:20:42","finished_at":"2026-09-15 02:20:42"},"collect":{"state":"ok","label":"collect","current":43,"total":43,"elapsed_seconds":125.69,"started_at":"2026-09-15 02:20:42","finished_at":"2026-09-15 02:22:47"},"github_auth":{"state":"err","label":"github_auth","current":1,"total":5,"elapsed_seconds":1.25,"started_at":"2026-09-15 02:22:47","finished_at":"2026-09-15 02:22:48"},"speedtest":{"state":"ok","label":"speedtest","current":5,"total":5,"elapsed_seconds":13.05,"started_at":"2026-09-15 02:22:48","finished_at":"2026-09-15 02:23:01"},"github_deep":{"state":"err","label":"github_deep","current":1,"total":5,"elapsed_seconds":0.59,"started_at":"2026-09-15 02:23:01","finished_at":"2026-09-15 02:23:01"},"epg":{"state":"ok","label":"epg","current":2184,"total":2184,"elapsed_seconds":10.15,"started_at":"2026-09-15 02:23:01","finished_at":"2026-09-15 02:23:11"},"generate":{"state":"ok","label":"generate","current":3,"total":3,"elapsed_seconds":93.8,"started_at":"2026-09-15 02:23:11","finished_at":"2026-09-15 02:24:44"}}},"recent_runs":[{"run_id":"20260915022042","stage":"epg","status":"ok","end_at":"2026-09-15 02:23:11","stats_json":"{\"detail\": \"{\\\"refreshed\\\": 401}\"}"},{"run_id":"20260915022042","stage":"github_deep","status":"err","end_at":"2026-09-15 02:23:01","stats_json":"{\"detail\": \"{\\\"err\\\": \\\"Expecting property name enclosed in double qLine 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
-4303
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user