Compare commits
2 Commits
d01c6aab85
...
b049bdfda4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b049bdfda4 | ||
|
|
cf679b7107 |
51
CHANGELOG.md
51
CHANGELOG.md
@ -1,13 +1,38 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## v4.3 - 2025-09-13 - 修复标题多重比分问题
|
## v4.4 - 2025-09-14
|
||||||
|
### 修复未开始比赛被错误标记为完成
|
||||||
|
- 🐛 修复未开始比赛被错误标记为完成的问题
|
||||||
|
- ⏰ 添加时间检查:只有已开始的比赛才能被标记为完成
|
||||||
|
- 🔧 防止Liquipedia的预设比分导致未来比赛被误标为完成
|
||||||
|
- 📝 为未来带比分的比赛添加debug日志
|
||||||
|
|
||||||
|
**技术细节**:
|
||||||
|
- 在 `_parse_match()` 方法中添加时间检查逻辑
|
||||||
|
- 只有当 `match_datetime <= now` 时才会将比赛标记为完成
|
||||||
|
- 新增 `match_has_started` 检查,确保只处理已开始的比赛
|
||||||
|
- 例如:修复了 XG vs PV(16:00 UTC)被误标为 "✓ 0-2" 的问题
|
||||||
|
|
||||||
|
## v4.3 - 2025-09-13
|
||||||
|
### 修复标题多重比分问题
|
||||||
|
- 🐛 修复多重比分累积:解决了标题中出现多个比分的问题(如 "✓ 2-0 1-0")
|
||||||
|
- 🔧 改进比分清理逻辑:现在能正确清理所有位置的比分,不只是开头
|
||||||
|
- ✅ 修复了9个历史事件的标题格式
|
||||||
|
|
||||||
|
**技术细节**:
|
||||||
- **🐛 修复多重比分累积问题**:
|
- **🐛 修复多重比分累积问题**:
|
||||||
- 修复了 `update_event_with_score()` 和 `update_event_with_result()` 方法中的比分清理逻辑
|
- 修复了 `update_event_with_score()` 和 `update_event_with_result()` 方法中的比分清理逻辑
|
||||||
- 原问题:正则表达式 `^(\d+[-:]\d+\s+)+` 无法匹配带有 `✓` 标记的标题,导致比分不断累积
|
- 原问题:正则表达式 `^(\d+[-:]\d+\s+)+` 无法匹配带有 `✓` 标记的标题,导致比分不断累积
|
||||||
- 现在使用 `\d+-\d+\s+` 清理所有比分,不限于开头位置
|
- 现在使用 `\d+-\d+\s+` 清理所有比分,不限于开头位置
|
||||||
- 修复了9个历史事件的标题(如 "✓ 2-0 1-0" 改为 "✓ 2-0")
|
- 修复了9个历史事件的标题(如 "✓ 2-0 1-0" 改为 "✓ 2-0")
|
||||||
|
|
||||||
## v4.2 - 2025-09-13 - 智能合并重复比赛
|
## v4.2 - 2025-09-13
|
||||||
|
### 智能合并重复比赛
|
||||||
|
- 🔀 智能合并重复比赛:自动检测同时间具有共同队伍的比赛并合并(处理队伍名称变体)
|
||||||
|
- 📝 队伍名称标准化:当发现 "OG" 和 "OG Esports" 这样的变体时,保留更长的完整名称
|
||||||
|
- ⚡ 优化数据获取:在获取数据时即进行去重,减少后续处理的复杂度
|
||||||
|
|
||||||
|
**技术细节**:
|
||||||
- **🔀 智能合并重复比赛**:
|
- **🔀 智能合并重复比赛**:
|
||||||
- 新增 `_merge_duplicate_matches()` 方法
|
- 新增 `_merge_duplicate_matches()` 方法
|
||||||
- 自动检测同时间(30分钟窗口)具有共同队伍的比赛
|
- 自动检测同时间(30分钟窗口)具有共同队伍的比赛
|
||||||
@ -22,7 +47,13 @@
|
|||||||
- 减少后续同步过程中的重复检查
|
- 减少后续同步过程中的重复检查
|
||||||
- 提高整体同步效率
|
- 提高整体同步效率
|
||||||
|
|
||||||
## v4.1 - 2025-09-13 - 修复TBD事件重复问题
|
## v4.1 - 2025-09-13
|
||||||
|
### 修复TBD事件重复问题
|
||||||
|
- 🐛 修复TBD事件匹配逻辑:现在可以正确识别并更新部分TBD事件(如 "TBD vs Team" 或 "Team vs TBD")
|
||||||
|
- 🔧 增强TBD事件清理:删除所有与确认比赛同时间的TBD事件,不再限于 "TBD vs TBD" 格式
|
||||||
|
- 🎯 防止创建重复事件:改进事件匹配算法,确保TBD事件被更新而非创建新事件
|
||||||
|
|
||||||
|
**技术细节**:
|
||||||
- **🐛 修复TBD事件匹配逻辑**:
|
- **🐛 修复TBD事件匹配逻辑**:
|
||||||
- 修复了 `find_existing_event()` 方法中的TBD匹配逻辑
|
- 修复了 `find_existing_event()` 方法中的TBD匹配逻辑
|
||||||
- 原问题:只匹配 "TBD_TBD" 事件键,不匹配 "TBD_NGX" 或 "PV_TBD" 等部分TBD事件
|
- 原问题:只匹配 "TBD_TBD" 事件键,不匹配 "TBD_NGX" 或 "PV_TBD" 等部分TBD事件
|
||||||
@ -38,7 +69,15 @@
|
|||||||
- 根本原因:TBD事件没有被正确更新,而是创建了新的确认事件
|
- 根本原因:TBD事件没有被正确更新,而是创建了新的确认事件
|
||||||
- 解决方案:改进事件匹配算法,支持部分TBD匹配和时间窗口匹配
|
- 解决方案:改进事件匹配算法,支持部分TBD匹配和时间窗口匹配
|
||||||
|
|
||||||
## v4.0 - 2025-09-12 - 代码结构重构与错误处理优化
|
## v4.0 - 2025-09-05
|
||||||
|
### 代码结构重构与错误处理优化
|
||||||
|
- 🏗️ 代码结构重构:使用 dataclass 替代字典,提高类型安全性
|
||||||
|
- 🔄 增强错误处理:添加自动重试机制(指数退避)
|
||||||
|
- 📝 专业日志系统:使用 Python logging 模块,支持多级别日志
|
||||||
|
- 🛡️ 优雅降级:部分失败不影响整体同步流程
|
||||||
|
- ⚡ 代码模块化:拆分大函数,提高可维护性
|
||||||
|
|
||||||
|
**技术细节**:
|
||||||
- **🏗️ 代码结构重构**:
|
- **🏗️ 代码结构重构**:
|
||||||
- 使用 `@dataclass` 替代字典存储比赛数据,提高类型安全性
|
- 使用 `@dataclass` 替代字典存储比赛数据,提高类型安全性
|
||||||
- 拆分大函数 `sync_matches_to_calendar()` 为多个专门的方法
|
- 拆分大函数 `sync_matches_to_calendar()` 为多个专门的方法
|
||||||
@ -220,10 +259,12 @@
|
|||||||
| v4.0 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ |
|
| v4.0 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ |
|
||||||
| v4.1 | ✓ | ✓ | ✓ | ✓ | ✓++ | ✓ |
|
| v4.1 | ✓ | ✓ | ✓ | ✓ | ✓++ | ✓ |
|
||||||
| v4.2 | ✓ | ✓ | ✓ | ✓ | ✓++ | ✓ |
|
| v4.2 | ✓ | ✓ | ✓ | ✓ | ✓++ | ✓ |
|
||||||
|
| v4.3 | ✓ | ✓ | ✓ | ✓ | ✓++ | ✓ |
|
||||||
|
| v4.4 | ✓ | ✓ | ✓ | ✓ | ✓++ | ✓ |
|
||||||
|
|
||||||
## 使用建议
|
## 使用建议
|
||||||
|
|
||||||
推荐使用最新的 v4.2 版本,它包含智能合并重复比赛功能并提供更好的错误处理:
|
推荐使用最新的 v4.4 版本,它修复了未开始比赛被错误标记为完成的问题:
|
||||||
```bash
|
```bash
|
||||||
python sync_dota2_matches.py --calendar-id "YOUR_CALENDAR_ID"
|
python sync_dota2_matches.py --calendar-id "YOUR_CALENDAR_ID"
|
||||||
```
|
```
|
||||||
|
|||||||
26
README.md
26
README.md
@ -1,31 +1,7 @@
|
|||||||
# Dota 2 Calendar Sync v4.3
|
# Dota 2 Calendar Sync v4.4
|
||||||
|
|
||||||
自动从 Liquipedia 获取 Dota 2 Tier 1 比赛信息并同步到 Google Calendar,支持自动更新比赛结果、时间变更、智能管理TBD占位事件、自动清理过期和重复比赛。
|
自动从 Liquipedia 获取 Dota 2 Tier 1 比赛信息并同步到 Google Calendar,支持自动更新比赛结果、时间变更、智能管理TBD占位事件、自动清理过期和重复比赛。
|
||||||
|
|
||||||
## 更新日志
|
|
||||||
|
|
||||||
### v4.3 (2025-09-13)
|
|
||||||
- 🐛 修复多重比分累积:解决了标题中出现多个比分的问题(如 "✓ 2-0 1-0")
|
|
||||||
- 🔧 改进比分清理逻辑:现在能正确清理所有位置的比分,不只是开头
|
|
||||||
- ✅ 修复了9个历史事件的标题格式
|
|
||||||
|
|
||||||
### v4.2 (2025-09-13)
|
|
||||||
- 🔀 智能合并重复比赛:自动检测同时间具有共同队伍的比赛并合并(处理队伍名称变体)
|
|
||||||
- 📝 队伍名称标准化:当发现 "OG" 和 "OG Esports" 这样的变体时,保留更长的完整名称
|
|
||||||
- ⚡ 优化数据获取:在获取数据时即进行去重,减少后续处理的复杂度
|
|
||||||
|
|
||||||
### v4.1 (2025-09-13)
|
|
||||||
- 🐛 修复TBD事件匹配逻辑:现在可以正确识别并更新部分TBD事件(如 "TBD vs Team" 或 "Team vs TBD")
|
|
||||||
- 🔧 增强TBD事件清理:删除所有与确认比赛同时间的TBD事件,不再限于 "TBD vs TBD" 格式
|
|
||||||
- 🎯 防止创建重复事件:改进事件匹配算法,确保TBD事件被更新而非创建新事件
|
|
||||||
|
|
||||||
### v4.0 (2025-09-05)
|
|
||||||
- 🏗️ 代码结构重构:使用 dataclass 替代字典,提高类型安全性
|
|
||||||
- 🔄 增强错误处理:添加自动重试机制(指数退避)
|
|
||||||
- 📝 专业日志系统:使用 Python logging 模块,支持多级别日志
|
|
||||||
- 🛡️ 优雅降级:部分失败不影响整体同步流程
|
|
||||||
- ⚡ 代码模块化:拆分大函数,提高可维护性
|
|
||||||
|
|
||||||
## 功能
|
## 功能
|
||||||
|
|
||||||
- 自动获取 Liquipedia 上的 Tier 1 级别 Dota 2 比赛
|
- 自动获取 Liquipedia 上的 Tier 1 级别 Dota 2 比赛
|
||||||
|
|||||||
@ -317,7 +317,16 @@ class Dota2CalendarSync:
|
|||||||
score2 = int(score_parts.group(2))
|
score2 = int(score_parts.group(2))
|
||||||
|
|
||||||
# Check if series is completed
|
# Check if series is completed
|
||||||
completed = self._is_series_completed(score1, score2, format_str)
|
# Only mark as completed if the match has already started
|
||||||
|
now = datetime.now(pytz.UTC)
|
||||||
|
match_has_started = match_datetime <= now
|
||||||
|
|
||||||
|
if match_has_started:
|
||||||
|
completed = self._is_series_completed(score1, score2, format_str)
|
||||||
|
else:
|
||||||
|
# Future match with score - likely a placeholder/prediction
|
||||||
|
completed = False
|
||||||
|
logger.debug(f"Future match {team1} vs {team2} has score {score} but not marking as completed")
|
||||||
|
|
||||||
if completed:
|
if completed:
|
||||||
winner = team1 if score1 > score2 else team2
|
winner = team1 if score1 > score2 else team2
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user