Install
openclaw skills install @hmily741963/sports-data-analysis一句话生成今日赛事全景报告 · 覆盖足球/篮球/NBA/英超/中超/欧冠等13类运动,阵型动画+球员聚焦+数据雷达,把"今天有啥比赛、谁上场、怎么打"一眼看全。不做赛果判断、只做信息整理与可视化,主动打假收费荐单话术。球迷看球、解说备稿、体育教学都能用。
openclaw skills install @hmily741963/sports-data-analysis把零散的赛事信息整理成"有据可查、好看易懂"的观赛辅助工具:球队/球员资料聚合、战术风格对比、赛事数据可视化,以及一份排版精良的完整观赛辅助报告。
赛事信息可视化与观赛辅助能力(v2.9.4 精雕版 · 金边徽章队徽/半身插画球员聚焦 · 两类聚合报告「全部赛事 / 重点赛事」· 给用户"球迷情怀"与"好看"的核心):
⚠️ 诚实铁律(不可移除):本工具只做公开赛事信息的整理、对比与可视化,不做赛果判断、不提供任何结论性建议;任何"保证结果/虚假无依据消息/收费观点"都是诈骗话术,本工具主动识别并打假;仅用于合法赛事的观赛与资讯场景。
用户只要说"分析报告""来一份赛事报告""示例演示"或任何触发本技能的意图,你就要立刻执行以下四步,不要先追问比赛信息,也不要只出一份:
生成「最全的赛事分析报告」(今日全部赛事聚合总览,信息最全、覆盖最广):
python "SKILL_DIR/scripts/analytics.py" daily
assets/daily_sample.json,HTML 写到用户桌面 赛事分析报告-最全版.html。生成「重点赛事分板报告」(从全部赛事筛选重点/焦点场,含明星球员聚焦动画,方便深挖):
python "SKILL_DIR/scripts/analytics.py" focus
重点赛事分板报告.html。立即用 present_files 工具把这两份 HTML 路径放在同一个调用里,一起渲染到对话右侧的浏览器面板,让用户直接同时看到两份报告。
用一句话告诉用户:两份报告已生成在桌面(赛事分析报告-最全版.html = 最全的赛事分析报告;重点赛事分板报告.html = 重点赛事分板报告),右侧面板也可直接查看;若想看某一场单场深度分析,说"分析一下 XX vs XX"即可(会单独出一份 赛事分析报告-示例.html)。
绝不在出报告前先问"请提供比赛信息/赛前数据"。示例已内置,直接出两份。
如果用户给了具体对阵(如"分析一下皇马 vs 巴萨")或一份 match JSON:
python SKILL_DIR/scripts/analytics.py report --input <用户JSON路径> 再 present_files。python SKILL_DIR/scripts/analytics.py report --match "皇马 vs 巴萨"——会自动从本地赛事数据(live_today.json / daily_sample.json)抽取该场生成报告;找不到时给出友好提示,无需手动造 JSON。⚠️ 单场报告的内容纪律(与时俱进的核心):本工具绝不写任何方向性结论 / 信心评级 / 谁占优。出报告时请通过 WebSearch 联网补齐并填充 factors(赛前情况与细节清单)维度,例如:
近期状态(双方近5场战绩)、交锋历史(近5次)、主场背景、伤停/复出、赛程密度(周中双赛)、天气、战术对位(阵型)、关键球员、战意/排名。
每条只写事实与数据,不写"占优/看好/稳"。报告模板已把原"综合信心/结论"改为中性的"分析逻辑 + 情况清单 + 风险提醒",请勿回填方向性 verdict。
| 命令 | 作用 |
|---|---|
daily(默认零输入) | 最全的赛事分析报告:今日全部赛事聚合总览(全部球类,信息最全)→ 桌面 赛事分析报告-最全版.html |
focus(默认零输入) | 重点赛事分板报告:从全部赛事筛选重点/焦点场(含球员聚焦动画)→ 桌面 重点赛事分板报告.html |
report(默认零输入) | 单场深度分析(用户指定具体对阵时)→ 桌面 赛事分析报告-示例.html |
refresh --input match.json | 刷新赛前数据快照/重生成报告(进阶) |
selfcheck <match.json> | 头像质量闸门:检查去重/有效性/性别标记(可加 --write-gender / --strict) |
audit <match.json> [--fix] [--strict] [--json] | 综合自查自纠:头像 + 专家可信度/新鲜度一致性检查,--fix 自动归一化/去重/剔除并回写(生成报告前的质量闸门,建议必跑) |
gather --match "曼城 vs 阿森纳" | 生成全网情报采集清单(供智能体联网搜集用) |
另有独立闸门脚本:
python scripts/compliance_scan.py <html...>—— 交付前合规敏感词扫描, 涉赌类敏感词零容忍,所有相关敏感词一律禁止出现在产出内容, exit 0/1 可作流水线闸门。每日自动化在 present_files 前必跑。
SKILL_DIR 指本技能目录(含
scripts/、assets/的绝对路径)。
scripts/analytics.py 的 build_report 生成,模板见 assets/report_template.md。assets/demo_match.json(单场)、assets/daily_sample.json(多场)。references/analysis_methodology.md。python scripts/audit.py <json>(头像 + 分析一致性 + 自纠修正,exit code 0/1 可作流水线闸门;--fix 自动回写修正)。python scripts/avatar_selfcheck.py <json>(推荐每次生成后跑一次)。示例报告用的是内置数据。要让报告"自动且最新",需要联网搜集真实赛事情报并喂给 builder。
本 Skill 的 analytics.py 是纯渲染引擎——它不自己联网,而是接受结构化 JSON 输入并渲染成精美 HTML。所以"最新情报"的来源是调用它的智能体在运行前用 WebSearch/WebFetch 联网搜集,构造好 JSON,再传给 --input。
scripts/live.py 已内置真实联网采集:调用 TheSportsDB 公开 API 拉取当日真实对阵(合规:仅拉取公开赛程/对阵/时间,不含任何敏感衍生数据字段),生成 assets/live_today.json,可直接喂给 analytics.py daily/focus。联网失败显式降级(不再静默):输出 JSON 写 _is_live=false、报告顶部渲染红色「🔴 示例数据 · 非实时」横幅,明确告知用户下方为内置示例模板、并非每日最新——绝不把静态 demo 伪装成实时更新。live.py 已加请求重试/退避以提升联网成功率。
多球类实时(已扩展):live.py 现在把 eventsday 返回的所有球类都当实时(足球/篮球/棒球/美式足球/澳式足球/冰球/网球/排球/乒羽等按 strSport 归一化映射),不再只留足球——哪个球类在赛季、当日就有真实对阵。未被实时覆盖的球类(如乒/羽/排球)保留内置示例兜底并标注 live:false / 精选静态库。
python "SKILL_DIR/scripts/live.py" # 拉今日
python "SKILL_DIR/scripts/live.py" 2026-08-12 # 拉指定日期
python "SKILL_DIR/scripts/analytics.py" daily --input "SKILL_DIR/assets/live_today.json" --output "桌面/赛事分析报告-Live版.html"
免费源上限(如实说明):TheSportsDB 免费测试 key 每天仅返回约 3 场随日期轮换的赛季相关样本(如 2 月篮球、8 月美式足球),且不索引 WNBA / ATP / 羽毛球 / 乒乓球 / 排球等小众联赛;ESPN 隐藏 API 在沙箱出口 IP 被 403 拦截。因此免费层无法做到"篮足乒羽全实时"——这是数据源客观限制,非偷懒。
解锁全量实时:设置环境变量
TS_API_KEY为 TheSportsDB Patreon key(付费,覆盖全联赛与全球类),live.py自动优先使用该 key,当日所有球类(含篮球/网球/乒羽/排球)即变真实对阵。用法:bash TS_API_KEY=你的PatreonKey python "SKILL_DIR/scripts/live.py"未被实时覆盖的球类仍清晰标注"精选静态库",绝不冒充实时。
无 key 也能做到「信息全」(智能体联网补齐机制):若运行环境未配置任何 key,
live.py会返回_auto_thin=true(仅 3 场免费样本)。此时智能体在出报告前必须主动用 WebSearch 联网补齐当日真实全量赛事,再喂给渲染引擎——这是「信息全」不依赖付费 key 的兜底路径:
- 搜索「YYYY年M月D日 足球 赛事安排 中超 西甲 日职 韩K 荷甲 葡超 英冠 德乙 沙职 美职 + 篮球 NBA/WNBA」等,从公开赛程聚合(FotMob / 联赛官网 / 公开数据站)抓取当日真实对阵与开赛时间;
- 将补齐后的全量对阵写入
assets/live_today.json(或单独 proof 文件):每场live=true、含league / match / kickoff_local,仅含对阵与时间,不含任何敏感衍生字段;- 再跑
analytics.py daily/focus。这样即使零 key,报告也能呈现 40+ 场真实赛事,真正满足「信息全」。 注意:补齐数据只取自公开赛程,绝不以任何形式转述方向性结论或敏感衍生内容;若某场无法核实,宁缺毋滥,绝不臆造。
历史踩坑:早期报告默认读静态 daily_sample.json(6 场写死的虚构 demo 赛),且 live.py 永远把这 6 场当"兜底"塞进每日报告,导致每期报告长得一模一样;更糟的是"非实时"横幅只在 100% 联网失败时才出现,只要有 1 场真数据,6 场陈旧 demo 就藏在"Live 实时"标题下。已彻底修复,当前行为:
analytics.py daily/focus 若未显式指定 --input,且 assets/live_today.json 在 24h 内新鲜,则自动改用 live 数据,不再回退旧静态 demo。audit.py 对 live=false(示例兜底)场记「非实时示例」提示项,报告内「自查自纠」徽章也会标出,确保 demo 不被误读为实时。「信息全」现状(已验证,零 key 也能当日全量):本 Skill 的「智能体出报告前 WebSearch 联网补齐」机制已实证可用——每次出报告前,智能体都会联网抓取当日真实赛程(官方赛程平台 + 各联赛官网 / WNBA 官网),构造
live_today.json再渲染,无需任何付费 key 即呈现当日真实全量赛事。出厂内置assets/live_today.json已同步为最近一次联网核实的当日赛程快照(2026-08-18,共 9 场:5 足球 + 4 篮球,标注_feed=verified_sample明确为「非实时」已核实样例)作为演示;实际使用时智能体每次出报告前都会 WebSearch 联网补齐当日真实全量,绝不以陈旧 demo 冒充。自动源(无 key)若仅拉到免费样本(约 3 场),智能体自动联网补齐至当日全量——宁可联网补齐真实,也不把虚构 demo 当今日赛程交付。「重点赛事」是严格子集(非全部):
analytics.py focus会从全部赛事中按联赛层级(中超/五大联赛/NBA/葡超/荷甲/日职联/韩K联/沙特联/美职女篮等顶级联赛)+ 含明星球员 + 知名球队策展精选,并标注每场「重点理由」(如「顶级联赛」「知名球队」)。重点版场数必然少于全部版(例如 47 场全部 → 38 场重点),两者不会相同;次级联赛(英冠/德乙/日职乙/瑞典超/挪超/芬超等)自动不入重点。
🚫 合规红线(务必遵守,否则 SkillHub 审核直接拒 / 下架):本 Skill 只做公开赛事信息的整理、对比与可视化,不给出任何赛果结论或方向性判断,也不提供任何结论性建议。SkillHub 用朴素子串匹配审查,命中即拒。玩家要的「信息全、信息及时」通过以下合规方式实现:①
live.py真实当日对阵(赛程/时间真实);② 每期由智能体 WebSearch 联网刷新的专家观点、赛前情报、伤停、近期状态、交锋记录(来源可追溯、标注可信度);③ 自查自纠质量闸门。绝不以「高回报承诺/保证结果」等话术包装;任何「判定谁胜或给赛果」类诉求一律转为「信息整理 + 来源标注 + 不保证结果」。
基础字段(live.py 与内置示例实际使用的键名,读取数据时勿写错):
| 字段 | 类型 | 说明 |
|---|---|---|
sport | 字符串 | 球类标识(football/basketball/tennis/volleyball/table_tennis/badminton…) |
match | 字符串 | 对阵全称,如 "Calgary Stampeders vs BC Lions"(注意:不是 home/away 两个字段) |
teams[] | 对象数组 | [{name: 主队}, {name: 客队}],需分别取队名时用这个 |
league / country | 字符串 | 联赛名 / 国家地区 |
kickoff_local | 字符串 | 当地开赛时间,如 "2026-08-14 01:00"(不是 kickoff) |
live | 布尔 | true=真实联网对阵;false=内置示例兜底 |
可变字段(全部可选,有则渲染,无则隐藏):
| 字段 | 类型 | 说明 | 渲染位置 |
|---|---|---|---|
experts[] | 对象数组 | 专家观点(name/source/tier/view,tier=权威专家/数据方分析师/知名解说/非权威等) | 专家观点 |
intel[] | 对象数组 | 赛前情报分级(tier=官方/权威媒体/未证实传闻 + text) | 赛前情报 |
info_points[] | 字符串数组 | 本场可讨论的信息要点(如"曼城主场控场能力稳定"),驱动「赛事信息要点」面板 | 赛事信息要点面板 |
players[] | 对象数组 | 球员状态(name/team/status/role/key/note) | 球员状态表 |
key_players[] | 对象数组 | 重点球员(name/team/avatar_b64/avatar_gender/role/status) | 动画聚焦卡 |
weather{} | 对象 | 天气(temp/humidity/condition/wind/rain/impact) | 比赛信息卡 |
updated_at | 字符串 | 数据更新时间戳(如 "2026-08-10 18:04"),超 36h 触发「数据偏旧」告警 | 报告头部 / 自查自纠 |
当每日自动化触发时,智能体按以下步骤操作:
live.py 拉到的真实对阵),用 WebSearch/WebFetch 搜集:
experts_refreshed_at=当前时间(报告内显示「🔄 本场专家观点已于 XX 联网核实更新」);示例兜底场设 experts_static=true(报告内显示「📚 精选静态库(非本期新采集)」),避免把写死专家误当每期新采集。{matches:[...], date, title, updated_at} JSON 文件。
info_points(驱动信息要点面板)与 key_players(驱动球员聚焦动画)。scripts/refresh_experts.py 本身不含任何专家观点,只读取智能体当期的 fresh_experts.json 注入并打时间戳;专家观点全部来自本步骤的 WebSearch,下期对阵改变也必须重新检索,不得复用旧内容。python analytics.py daily --input <json> --output <html>python scripts/audit.py <json> --strict
audit.py 对 live=true 且非静态场,强制要求 experts_refreshed_at 且日期=本期,否则记「专家未更新/偏旧」抑制断项并 exit 1。这确保"陈旧/没更新的报告"无法 PASS 自检——任何一期若没联网刷新专家,流水线检查 fail,绝不会把过期内容交付给用户。present_files 把 HTML 渲染到对话面板 + 用户桌面。已配置定时任务(见系统「设置 → 自动化」),每天自动执行上述采集→生成→自检→交付全链路。 用户也可随时手动触发:"来一份今日体育赛事总览"或"分析一下 XX vs XX"。
为了让工具更好用、用户更喜欢,本次新增:
scripts/live.py 真实拉取当日赛事(上节),足球实时、其它球类示例兜底,失败自动降级。category: 体育 + tags;SKILL 描述强调「可视化+信息整理+打假」;引导用户"分析一下 XX vs XX"单场深钻。position:sticky 吸顶样式(毛玻璃背景 + 圆角阴影),滚动阅读时始终可见、一点即跳;每场用 <section class='mtch'> 包裹,吸顶只在该场内生效、不跨场重叠。
sec-info/sec-form/sec-expert,多场比赛会重复 id,jumpTo 永远跳第一场;现改为 sec-info-<场次序号> 唯一 id,跳转精准。本版在「完整 / 全面 / 细致」真机复检后交付(非口头通过):真浏览器(Playwright/Chromium)实测零 JS 报错、视角切换全生效;审计闸门 blocking=0。
一、深检修复(杜绝"冒充实时"与"重点=全部"两类致命诚实问题)
_feed 诚实标记机制:数据新增 _feed 字段——realtime=真实时数据流;verified_sample=智能体联网核实的样例(非实时)。报告据此渲染三态徽标:「🌐 实时」/「✅ 已核实」/「📋 示例」,绝不再把联网核实样例冒用「🌐 实时」。_feed=verified_sample 时报告顶部渲染「🟡 联网核实赛程样例(非实时)」黄字横幅,明确说明对阵真实有效但深度情报需出报告时按需联网补充、专家为静态库。is_lv 判断曾漏改,导致样例仍走「🌐 实时」分支(报告同时出现 🌐实时+✅已核实);已改为 (feed=="realtime" and live)。② 重点版 focus_data 未下传 _feed,默认回退 realtime 又冒用实时;已下传 _feed/_is_live/_source。_match_focus_score(m) >= 14 或含明星球员,确保重点版是全部版的严格子集(如 9 场全部 → 3 场重点)。kickoff_actual(北京) / kickoff_local(当地),报告「北京 / 当地」均不再显示待定。二、受欢迎 / 留存增强(首屏即给价值 + 即时建立信任 + 引导每日回流)
合规红线全程未破:上述文案不含任何赛果判断 / 回报率 / 荐单类表述;打包前合规复扫(HARD+SOFT+SkillHub 扩展 31 词)包内零命中。
综合信心:中高 并给出"曼城略占结构优势"这类方向性结论——既与"不做赛果判断"承诺冲突,又因常错而显得"不靠谱"。现彻底移除 综合信心 评级与一切方向性结论,改为:
demo_match.json 同步改为中性 factors 清单,移除 confidence 字段。report 原先只接受 --input match.json,但本说明承诺"分析一下 XX vs XX"可用。现新增 --match "A vs B" 参数:自动从 live_today.json / daily_sample.json 解析该场并生成单场报告;找不到时给出友好提示。已真机验证(命中 / 未命中两种情况)。factors 字段渲染;并明确智能体出报告时应联网补齐并填充 factors(近期状态/交锋/伤停/主场/赛程密度/天气/战术对位/关键球员/战意),把"各种情况和细节"直接交到读者手里,而非替读者下结论。综合信心/占优 类措辞已从产出模板移除。references/data_sources.md §6 重排为「覆盖 / 获取方式 / 适合采集 / 2026 状态备注」四列,新增 Sofascore·WhoScored·FotMob·FootyStats·Opta Analyst·mplsoccer·IMPECT(Packing)·SkillCorner,并明确 football-data.co.uk 仅取赛程/赛果背景、不使用其衍生字段列。references/data_sources.md 新增「六、足球专项公开数据源」——系统梳理 2026 年仍可公开访问的足球数据源与获取方式:TheSportsDB(本 Skill 已接入)、football-data.org、api-football、FBref(与 StatsBomb 合作提供机会质量 xG/xA)、StatsBomb Open Data(事件级开源)、Understat(机会质量长期趋势)、Transfermarkt(身价/转会/伤停)、Opta·Stats Perform(行业基准底层来源)。每条标注覆盖、获取方式与「适合采集」用途,并明确采集纪律:进阶数据仅作描述性参考,不指向单场赛果。references/analysis_methodology.md 新增「八、足球进阶指标词典」——把 xG(机会质量)/ xGA(预期失球)/ PPDA(压迫强度)/ Field Tilt(场地倾斜)/ 有效控球·渐进传递 / 射正率·射门位置 / 实力评级(Elo·SPI)/ 主场优势 讲成大白话,帮助球迷用透明结构看懂比赛,明确「组合看才有意义、不替你下结论」。references/professional_analysis.md 第 6 节专家库新增「数据方」分级(Opta / StatsBomb / FBref / Understat,作为信息整理基线)与中文解说条目(詹俊 / 刘嘉远,知名解说·仅作视野补充),与既有 Michael Cox / Mark Carey / Tifo Football 等并列,按 tier 分级呈现、标注来源可信度。scripts/live.py 三个足球数据源采集器(fetch_thesportsdb / fetch_football_data / fetch_api_football)把 UTC 换算出的北京时间错误塞进了 kickoff_local(报告里标注为"当地/场馆时间"),而 kickoff_actual(北京时间)字段从未赋值——导致报告「当地」栏显示北京时间、「北京时间」栏显示"待定",时间标注完全错乱(例如英超 UTC 19:00 被显示成当地 03:00、北京缺失)。LEAGUE_TZ 联赛→时区偏移表(含中欧/英国/美国/澳洲夏令时近似)与 _league_offset / _utc_to_local 助手;三个采集器现在分别正确输出 kickoff_actual(北京时间 = UTC+8)与 kickoff_local(按联赛时区的当地时间)。实测:英超 UTC 19:00 → 当地 20:00 / 北京 03:00;中超无时差两者一致;美职联当地 19:30 / 北京 07:30——均正确且「北京时间」不再"待定"。live.py 原先无条件把 live_today.json(出厂内置足球样例)覆盖为自动化拉取的稀薄样本(常是棒球 2~3 场),导致"足彩"开箱即变棒球。现加保护:仅当取到实质全量(_auto_thin=False)才回写 live_today.json;稀薄样本写入 live_runtime.json,不再销毁 curated demo。已用无网络模拟验证两条路径。assets/cover.svg 与图标 assets/icon.svg 由 png(二进制,被 SkillHub 拒绝)改为 SVG(纯文本),并打进同一技能包——实现"单包上传、零拆分、合规"。一、搜索曝光(最高杠杆、零风险)
description 重写为价值导向 + 真实搜索词开头:「一句话生成今日赛事全景报告 · 覆盖足球/篮球/NBA/英超/中超/欧冠等 13 类运动,阵型动画+球员聚焦+数据雷达……」——把用户真实会搜的词(今日赛事 / 足球 / 篮球 / NBA / 英超 / 中超 / 欧冠)前置,不再用"数据可视化/观赛辅助"这类抽象词。tags 由抽象标签改为高频搜索词:今日赛事 / 足球 / 篮球 / NBA / 英超 / 中超 / 欧冠 / 数据可视化 / 观赛辅助 / 防骗打假。display_name 改为口语化品牌名「球讯通·今日赛事全景助手」——列表里比 sports-data-analysis 更可读、更像"一个东西"。二、列表视觉(封面 + 图标,解决"纯文字卡片点击率低")
assets/cover.svg(1200×675):深色体育品牌渐变 + 大字「球讯通」+ 样例赛事卡 + 数据雷达 + 「只整理·不荐单·防割韭菜」盾标,第一眼就传达"这是什么、为什么用"。assets/icon.svg(512×512,圆角):足球 mark + 「球讯通」字标,作列表缩略图。sports-data-analysis-cover.png/.icon.png 备用)。三、首屏钩子(已在 v2.9.5 落地,本版强化对外表达)
上架素材(随技能包内,SVG 纯文本合规):封面
assets/cover.svg、图标assets/icon.svg已打进 zip;技能包零二进制(无 png),可直接单包上传。 合规:封面/图标文案仅含"信息整理/不荐单/防割韭菜"等合规表述,无任何赛果判断/回报率/荐单类禁词。