自动将邮箱 CalDAV日历同步到 Zectrix 极趣墨水屏电子便利贴。
https://space.bilibili.com/13131424?spm_id_from=333.788.upinfo.detail.click
- 🧹 自动标记过期日程完成: 已超过设定时间的
[日历]日程自动标记为完成 - 📅 同步当天日程: 只同步今天剩余时间的日程,保持屏幕整洁
- 🚫 过滤已取消: 自动跳过标题包含"已取消"、"cancelled"的会议
- 🔄 完整双向同步: CalDAV 中新建/更新/删除都会自动同步到 Zectrix
- 🎯 精确匹配: 使用 CalDAV 原生 UID 唯一标识精确识别每个日程
- 🔁 自动重试: 网络请求失败自动重试(最多3次,指数退避)
- 第一步 - 调用 Zectrix API 查询所有未完成待办
- 第二步 - 标记过期日程完成:
- Title 以
[日历]开头 - 日程时间
dueDate + dueTime距离现在已经超过EXPIRE_HOURS - 只处理未完成的日程
- Title 以
- 第三步 - 通过 CalDAV 从邮箱获取今天剩余时间的日历事件
- 第四步 - 同步变更到 Zectrix:
- 新建: UID 不存在于 Zectrix → 创建新日程
- 更新: UID 存在但标题/时间已变更 → 更新现有日程
- 删除: Zectrix 中有 UID,但 CalDAV 中不存在 → 删除该日程(已被取消/删除)
pip install caldav icalendar requests所有配置通过环境变量注入,支持两种方式:
# Zectrix API 配置
export API_BASE="https://cloud.zectrix.com/open/v1"
export API_KEY="your-api-key" # 你的 API Key
export DEVICE_ID="your-device-id" # 你的设备 ID
export EXPIRE_HOURS="1" # 过期多久后删除,单位小时
# CalDAV 配置
export CALDAV_URL="https://caldav.mxhichina.com/dav/your-email@example.com/"
export CALDAV_USER="your-email@example.com" # 邮箱用户名
export CALDAV_PASS="your-password" # 邮箱密码/授权码
python sync_calendar.py创建 .env 文件:
# Zectrix API 配置
API_BASE=https://cloud.zectrix.com/open/v1
API_KEY=your-api-key
DEVICE_ID=your-device-id
EXPIRE_HOURS=1
# CalDAV 配置
CALDAV_URL=https://caldav.mxhichina.com/dav/your-email@example.com/
CALDAV_USER=your-email@example.com
CALDAV_PASS=your-password然后使用 python-dotenv 加载:
pip install python-dotenv在运行前加载:
python -c "import dotenv; dotenv.load_dotenv(); import sync_calendar"或者如果你使用 bash:
export $(grep -v '^#' .env | xargs) && python sync_calendar.py| 环境变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
API_BASE |
否 | https://cloud.zectrix.com/open/v1 |
Zectrix API 地址 |
API_KEY |
是 | - | 你的 API Key,从 Zectrix 云端获取 |
DEVICE_ID |
是 | - | 你的设备 ID |
EXPIRE_HOURS |
否 | 1 |
过期多久(小时)后标记为完成 |
CALDAV_URL |
否 | 阿里云邮箱默认地址 | CalDAV 服务器地址 |
CALDAV_USER |
是 | - | CalDAV 用户名(通常是邮箱地址) |
CALDAV_PASS |
是 | - | CalDAV 密码/授权码 |
python sync_calendar.py可以用 crontab 定时同步,比如每小时同步一次:
crontab -e添加一行:
0 * * * * /usr/bin/python3 /path/to/sync_calendar.py >> /var/log/zectrix_sync.log 2>&1
- 时区自动处理,CalDAV 中的 UTC 时间会正确转换为本地时区
- 全天事件默认按当天 09:00 处理
- 只有未取消且在今天剩余时间内的日程才会被同步
MIT