Ching L f279bc16f3 更新文档:添加v3.5版本信息
- 在CHANGELOG.md中添加v3.5版本说明
- 更新README.md版本号和功能说明
- 记录修复TBD比赛错误标记问题的改进

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-08 09:28:59 +08:00

129 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Dota 2 Calendar Sync v3.5
自动从 Liquipedia 获取 Dota 2 Tier 1 比赛信息并同步到 Google Calendar支持自动更新比赛结果和时间变更。
## 功能
- 自动获取 Liquipedia 上的 Tier 1 级别 Dota 2 比赛
- 包括 The International、Major、Premier 级别赛事
- 自动创建 Google Calendar 事件
- **自动更新已完成比赛的结果和比分**
- **检测并更新比赛时间变更**(赛程调整时自动同步)
- 避免重复添加已存在的比赛
- 支持 dry-run 模式进行测试
## 前置要求
### 1. Google Calendar 设置
你需要将你的 Google Calendar 分享给服务账号:
1. 打开 Google Calendar
2. 进入日历设置
3. 在"与特定人员共享"部分,添加:
- Email: `calendar-bot@tunpok.iam.gserviceaccount.com`
- 权限: "进行更改"Make changes to events
### 2. Python 环境
使用 pyenv 和虚拟环境:
```bash
pyenv activate test-venv
pip install -r requirements.txt
```
## 使用方法
### 基本用法
```bash
# 激活虚拟环境
source $(pyenv prefix test-venv)/bin/activate
# 运行同步(使用默认的 primary 日历)
python sync_dota2_matches.py
# 指定特定的 Google Calendar
python sync_dota2_matches.py --calendar-id "091325d4ea74ad78387402db1a428390c4779dff573322863b6fca00194da024@group.calendar.google.com"
```
### Dry Run 模式
在实际添加事件之前,先测试看看会添加哪些比赛:
```bash
python sync_dota2_matches.py --dry-run
```
### 命令行参数
- `--calendar-id`: Google Calendar ID 或邮箱地址(默认: primary
- `--dry-run`: 只显示将要添加的比赛,不实际创建事件
- `--no-results`: 跳过更新已完成比赛的结果
- `--no-time-updates`: 跳过更新比赛时间变更
- `--credentials`: 服务账号凭据文件路径(默认: credentials.json
## 文件说明
- `sync_dota2_matches.py`: 主同步脚本v3版本
- `credentials.json`: Google 服务账号凭据(需要自行添加)
- `requirements.txt`: Python 依赖包
- `run_sync.sh`: 便捷运行脚本
- `TIMEZONE_INFO.md`: 时区转换说明
- `CHANGELOG.md`: 版本更新历史
- `legacy/`: 旧版本脚本存档
## 功能特点
1. **智能匹配识别**
- 自动识别 Tier 1、Premier、Major 级别赛事
- 支持 The International (TI) 赛事
- 提取比赛格式Bo1、Bo3、Bo5
- **智能去重**:相同时间、相同轮次的 TBD 比赛只保留一个代表
- **TBD比赛保护**确保TBD vs TBD的比赛不会被错误标记为已完成
2. **日历事件管理**
- 自动设置比赛时长(根据 Bo 格式估算)
- 添加 30 分钟提醒
- 使用蓝色标记 Dota 2 事件
- 避免重复添加
- **自动更新已完成比赛的结果**
- **在标题添加完成标记(✓ + 比分)**
- **TBD 比赛队伍确定后自动更新**
3. **错误处理**
- 网络请求超时处理
- API 错误重试
- 详细的错误日志
- **改进的比分解析**:避免将时间(19:00)误识别为比分
## 定时运行
可以设置 cron job 定期运行同步:
```bash
# 编辑 crontab
crontab -e
# 每天早上 9 点运行同步
0 9 * * * cd /Users/ching/develop/dota2-calendar && /Users/ching/.pyenv/versions/3.10.14/envs/test-venv/bin/python sync_dota2_matches.py --calendar-id your-email@gmail.com
```
## 注意事项
1. 确保已经将日历分享给服务账号邮箱
2. 首次运行建议使用 `--dry-run` 测试
3. Liquipedia 页面结构可能会变化,如果解析失败需要更新解析逻辑
## 故障排查
如果没有找到比赛:
1. 检查 Liquipedia 页面是否可以访问
2. 运行 `python fetch_liquipedia.py` 查看页面结构
3. 确认是否有正在进行的 Tier 1 赛事
如果无法添加到日历:
1. 确认已经正确分享日历给服务账号
2. 检查 credentials.json 文件是否有效
3. 确认使用了正确的 calendar-id