Some checks failed
continuous-integration/drone/push Build is failing
主要改进: - 改进TBD比赛ID生成:TBD vs TBD使用时间戳生成唯一ID,避免重复 - 自动删除被取代的TBD事件:当队伍确定后删除对应占位符 - 重复比赛清理:优先保留已完成的比赛,删除未完成的重复 - 增强重复检测:按30分钟时间窗口分组,自动清理同时间重复 修复的问题: - 修复了XG vs TBD等重复占位符事件问题 - 修复了NGX vs Liquid等比赛的重复记录问题 - 改进了过期TBD事件的清理逻辑 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
6.1 KiB
6.1 KiB
Changelog
v3.7 - 2025-09-08 - 增强重复事件处理和TBD管理
- 改进TBD比赛ID生成:
- TBD vs TBD比赛现在使用时间戳生成唯一ID,避免重复创建
- 普通比赛继续使用队伍+锦标赛组合生成ID
- 自动删除被取代的TBD事件:
- 当同一时间段存在确定的比赛时,自动删除对应的TBD占位符
- 例如:XG vs Tundra确定后,自动删除XG vs TBD事件
- 使用30分钟时间窗口匹配相近时间的事件
- 重复比赛清理功能:
- 自动检测同一天同队伍的重复比赛
- 优先保留已完成的比赛,删除未完成的重复事件
- 修复了NGX vs Liquid等比赛的重复问题
- 增强的重复事件检测:
- 按30分钟时间窗口分组事件
- 自动删除同时间的重复TBD事件
- 改进了过期TBD事件的清理逻辑
- 改进TBD事件更新逻辑:
- 只在队伍确定时才尝试更新TBD事件(避免TBD vs TBD互相匹配)
- 保持1小时的时间窗口用于TBD事件匹配
v3.6 - 改进TBD比赛处理机制
- 放宽TBD比赛时间匹配条件:
- 将TBD事件匹配的时间窗口从5分钟扩大到1小时
- 更好地处理比赛时间调整的情况
- 添加时间差异显示,方便调试
- 自动删除过期TBD事件:
- 新增
delete_calendar_event()方法 - 自动检测并删除超过2小时的过期TBD事件
- 避免日历中积累无效的占位事件
- 新增
- 增强的TBD事件管理:
- 跟踪已更新的TBD事件,避免误删
- 在同步摘要中显示删除的TBD事件数量
v3.5 - 修复TBD比赛标记问题
- 修复TBD比赛错误标记为完成:
- 修改比分解析逻辑,只匹配破折号而不匹配冒号
- 避免将时间(19:00)误识别为比分
- 添加日期格式检查,防止误识别
- TBD比赛保护机制:
- 确保TBD vs TBD的比赛永远不会被标记为有比分或已完成
- 如果错误解析了TBD比赛的比分,会自动删除
- 增强比分验证逻辑
v3.4 - 修复重复事件问题
- 修复进行中比赛更新创建重复的问题:
- 改进事件匹配逻辑,增强基于队伍名称的查找
- 即使比分变化也能正确识别同一场比赛
- 避免在比分更新时(如从 1-0 到 1-1)创建新事件
- 新增重复事件清理工具:
- 添加
cleanup_duplicates.py用于查找和删除重复事件 - 添加
delete_duplicates.py用于手动清理特定重复
- 添加
- 增强的事件查找机制:
- 不仅通过 ID 查找,还通过 team+tournament 组合查找
- 支持忽略比分差异的模糊匹配
- 改进对时间变更和 TBD 更新的处理
v3.3 - 支持进行中比赛的实时比分
- 使用 BeautifulSoup 解析 HTML 结构:
- 重写了
_parse_match方法,使用 DOM 结构而非正则表达式 - 准确提取队名、比分、赛制和锦标赛信息
- 解决了 "Aurora1:0(Bo3)YkBros" 格式的解析问题
- 重写了
- 区分系列赛进行中和已完成状态:
- 新增
has_score标记,表示比赛是否有比分 - Bo3 需要 2 胜才标记为完成,Bo5 需要 3 胜
- 进行中的比赛显示当前比分(如 1-0),但不显示✓标记
- 新增
- 新增进行中比分更新功能:
- 添加
update_event_with_score方法处理进行中比赛 - 在日历标题显示实时比分(如 "1-0 Team1 vs Team2")
- 在描述中添加 "📊 CURRENT SCORE" 标记
- 添加
- 扩展处理时间范围:
- 处理最近 12 小时内的比赛,捕获正在进行的比赛
- 确保进行中的比赛比分能及时同步
v3.2.1 - 修复比分识别问题
- 修复错误的比分解析:
- 修复了将日期时间误识别为比分的问题(如 "19-00")
- 改进比分识别逻辑,只在包含 "vs" 的上下文中查找比分
- 添加比分范围验证(0-5),排除不合理的数值
- 增强时间模式识别,避免将时间戳识别为比分
v3.2 - TBD 比赛优化
- 智能去重机制:
- 相同时间、相同轮次的多个 TBD 比赛只保留一个代表
- 避免日历中出现大量重复的 TBD 条目
- TBD 比赛自动更新:
- 当 TBD 比赛的队伍确定后,自动更新对应的日历事件
- 通过时间和锦标赛信息智能匹配 TBD 事件
- 新增
update_event_with_teams方法专门处理队伍更新
- 改进的事件匹配逻辑:
- 三层匹配机制:ID 匹配 → 队伍+锦标赛匹配 → 时间+锦标赛匹配
- 确保 TBD 比赛更新后仍能正确跟踪
v3.1 - 格式优化更新
- 新的标题格式:
- 之前:
Dota 2 - The International 2025: Team1 vs Team2 - 现在:
Team1 vs Team2 [The International 2025]
- 之前:
- 简化的完成标记:
- 之前:
[COMPLETED] Dota 2 - Tournament: Team1 vs Team2 - 现在:
✓ 2-0 Team1 vs Team2 [Tournament]
- 之前:
- 移除了 "Dota 2" 字样,让日历更简洁
- 比分紧跟在✓后面,更加紧凑
v3.0 - 时间变更检测
- 新增比赛时间变更自动检测
- 当赛程调整时自动更新日历
- 支持
--no-time-updates参数跳过时间更新
v2.0 - 比赛结果更新
- 自动获取已完成比赛的结果
- 更新日历事件显示比分和获胜队伍
- 支持
--no-results参数跳过结果更新
v1.0 - 基础同步
- 从 Liquipedia 获取 Tier 1 比赛
- 同步到 Google Calendar
- 避免重复添加
- 支持 dry-run 模式
功能对比
| 版本 | 同步比赛 | 更新结果 | 时间变更 | 新格式 | TBD优化 | 实时比分 |
|---|---|---|---|---|---|---|
| v1.0 | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| v2.0 | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| v3.0 | ✓ | ✓ | ✓ | ✗ | ✗ | ✗ |
| v3.1 | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
| v3.2 | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ |
| v3.3 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| v3.4 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| v3.5 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| v3.6 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| v3.7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
使用建议
推荐使用最新的 v3 版本,它包含所有功能:
./run_sync.sh
或手动运行:
python sync_dota2_matches_v3.py --calendar-id "YOUR_CALENDAR_ID"