主要改进: - 使用 dataclass 替代字典存储比赛数据,提高类型安全性 - 实现自动重试机制,添加指数退避 - 使用 Python logging 模块,支持多级别日志 - 拆分大函数为多个专门的方法,提高可维护性 - 实现优雅降级,单个失败不影响整体流程 - 将 v3 版本移至 legacy 目录存档 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
e72661f4cd
commit
aa892e17fb
31
CHANGELOG.md
31
CHANGELOG.md
@ -1,5 +1,27 @@
|
||||
# Changelog
|
||||
|
||||
## v4.0 - 2025-09-12 - 代码结构重构与错误处理优化
|
||||
- **🏗️ 代码结构重构**:
|
||||
- 使用 `@dataclass` 替代字典存储比赛数据,提高类型安全性
|
||||
- 拆分大函数 `sync_matches_to_calendar()` 为多个专门的方法
|
||||
- 新增 `process_upcoming_matches()` 处理即将进行的比赛
|
||||
- 新增 `process_completed_matches()` 处理已完成的比赛
|
||||
- 新增 `clean_duplicate_and_expired_events()` 清理重复和过期事件
|
||||
- 提取 `find_existing_event()` 统一事件查找逻辑
|
||||
- **🔄 增强错误处理**:
|
||||
- 实现 `retry_on_exception` 装饰器,提供指数退避重试机制
|
||||
- 所有网络请求(Liquipedia 和 Google Calendar API)都支持自动重试
|
||||
- 单个比赛处理失败不影响整体同步流程(优雅降级)
|
||||
- **📝 专业日志系统**:
|
||||
- 使用 Python `logging` 模块替代 `print` 语句
|
||||
- 支持多级别日志(DEBUG, INFO, WARNING, ERROR)
|
||||
- 添加时间戳和详细的异常堆栈信息
|
||||
- 支持通过命令行参数调整日志级别
|
||||
- **⚡ 性能和可维护性**:
|
||||
- 提取重复代码为独立方法(`_extract_score()`, `_extract_format()`, `_extract_tournament()`)
|
||||
- 改进的错误报告和调试信息
|
||||
- 更好的代码组织和模块化设计
|
||||
|
||||
## v3.9 - 2025-09-12 - 增强TBD事件清理功能
|
||||
- **自动删除已结束的TBD事件**:
|
||||
- 检查事件的结束时间,如果已过且仍包含TBD则自动删除
|
||||
@ -157,15 +179,16 @@
|
||||
| v3.7 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| v3.8 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| v3.9 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ |
|
||||
| v4.0 | ✓ | ✓ | ✓ | ✓ | ✓+ | ✓ |
|
||||
|
||||
## 使用建议
|
||||
|
||||
推荐使用最新的 v3 版本,它包含所有功能:
|
||||
推荐使用最新的 v4.0 版本,它包含所有功能并提供更好的错误处理:
|
||||
```bash
|
||||
./run_sync.sh
|
||||
python sync_dota2_matches.py --calendar-id "YOUR_CALENDAR_ID"
|
||||
```
|
||||
|
||||
或手动运行:
|
||||
调试模式:
|
||||
```bash
|
||||
python sync_dota2_matches_v3.py --calendar-id "YOUR_CALENDAR_ID"
|
||||
python sync_dota2_matches.py --calendar-id "YOUR_CALENDAR_ID" --log-level DEBUG
|
||||
```
|
||||
16
README.md
16
README.md
@ -1,7 +1,14 @@
|
||||
# Dota 2 Calendar Sync v3.9
|
||||
# Dota 2 Calendar Sync v4.0
|
||||
|
||||
自动从 Liquipedia 获取 Dota 2 Tier 1 比赛信息并同步到 Google Calendar,支持自动更新比赛结果、时间变更、智能管理TBD占位事件、自动清理过期和重复比赛。
|
||||
|
||||
**v4.0 新特性**:
|
||||
- 🏗️ 代码结构重构:使用 dataclass 替代字典,提高类型安全性
|
||||
- 🔄 增强错误处理:添加自动重试机制(指数退避)
|
||||
- 📝 专业日志系统:使用 Python logging 模块,支持多级别日志
|
||||
- 🛡️ 优雅降级:部分失败不影响整体同步流程
|
||||
- ⚡ 代码模块化:拆分大函数,提高可维护性
|
||||
|
||||
## 功能
|
||||
|
||||
- 自动获取 Liquipedia 上的 Tier 1 级别 Dota 2 比赛
|
||||
@ -49,6 +56,9 @@ python sync_dota2_matches.py
|
||||
|
||||
# 指定特定的 Google Calendar
|
||||
python sync_dota2_matches.py --calendar-id "091325d4ea74ad78387402db1a428390c4779dff573322863b6fca00194da024@group.calendar.google.com"
|
||||
|
||||
# 使用调试模式查看详细日志
|
||||
python sync_dota2_matches.py --log-level DEBUG
|
||||
```
|
||||
|
||||
### Dry Run 模式
|
||||
@ -66,10 +76,12 @@ python sync_dota2_matches.py --dry-run
|
||||
- `--no-results`: 跳过更新已完成比赛的结果
|
||||
- `--no-time-updates`: 跳过更新比赛时间变更
|
||||
- `--credentials`: 服务账号凭据文件路径(默认: credentials.json)
|
||||
- `--log-level`: 设置日志级别 (DEBUG, INFO, WARNING, ERROR)
|
||||
|
||||
## 文件说明
|
||||
|
||||
- `sync_dota2_matches.py`: 主同步脚本(v3版本)
|
||||
- `sync_dota2_matches.py`: 主同步脚本(v4版本 - 优化版)
|
||||
- `legacy/`: 历史版本脚本存档
|
||||
- `credentials.json`: Google 服务账号凭据(需要自行添加)
|
||||
- `requirements.txt`: Python 依赖包
|
||||
- `run_sync.sh`: 便捷运行脚本
|
||||
|
||||
1241
legacy/sync_dota2_matches_v3.py
Normal file
1241
legacy/sync_dota2_matches_v3.py
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user