Ching L b42635ff45
Some checks failed
continuous-integration/drone Build is failing
Add Drone CI configuration for automated deployment
- Configure SSH deployment to /root/develop/dota2-match-calendar
- Use git pull --rebase --autostash for deployment
- Add Discord notifications for build status

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-05 18:29:09 +08:00
2025-09-05 17:28:25 +08:00
2025-09-05 11:53:02 +08:00

Dota 2 Calendar Sync v3

自动从 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 和虚拟环境:

pyenv activate test-venv
pip install -r requirements.txt

使用方法

基本用法

# 激活虚拟环境
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 模式

在实际添加事件之前,先测试看看会添加哪些比赛:

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 比赛只保留一个代表
  2. 日历事件管理

    • 自动设置比赛时长(根据 Bo 格式估算)
    • 添加 30 分钟提醒
    • 使用蓝色标记 Dota 2 事件
    • 避免重复添加
    • 自动更新已完成比赛的结果
    • 在标题添加完成标记(✓ + 比分)
    • TBD 比赛队伍确定后自动更新
  3. 错误处理

    • 网络请求超时处理
    • API 错误重试
    • 详细的错误日志

定时运行

可以设置 cron job 定期运行同步:

# 编辑 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
Description
No description provided
Readme 345 KiB
Languages
Python 99.6%
Shell 0.4%