前言
最近我在配置 OpenClaw 时,想要集成滴答清单 (TickTick) 的 API,以便通过 AI 助手来管理我的待办事项。在这个过程中,我遇到了一些坑,特别是关于 API 调用方式的问题。本文将详细记录整个配置过程,希望能帮助到有同样需求的朋友。
背景
滴答清单是国内非常流行的任务管理工具,它提供了开放的 API 供开发者使用。然而,在实际对接过程中,我发现官方文档中的一些端点存在一些问题,需要通过特定的方式来绕过。
配置步骤
1. 创建 OAuth 应用
首先,需要在滴答清单开发者平台创建一个 OAuth 应用,获取:
2. 完成 OAuth 认证
滴答清单使用 OAuth 2.0 进行认证。由于是国内版,需要使用 dida365.com 域名:
1 2 3
| 授权 URL: https://dida365.com/oauth/authorize Token URL: https://dida365.com/oauth/token API Base: https://api.dida365.com/open/v1
|
注意:需要在开发者平台配置回调地址 (Redirect URI),例如 http://localhost:8080/callback。
3. 关键的 API 调用问题
在获取任务列表时,我遇到了一个棘手的问题:
❌ 错误的方式
1 2
| GET https://api.dida365.com/open/v1/task
|
✅ 正确的方式
由于 /task 端点不稳定,正确的做法是通过项目 (Project) 端点来获取任务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def get_all_tasks(): """获取所有任务的正确方式""" projects = requests.get('/project', headers=headers).json() all_tasks = [] for project in projects: url = f"/project/{project['id']}/data" data = requests.get(url, headers=headers).json() tasks = data.get('tasks', []) all_tasks.extend(tasks) return all_tasks
|
4. 逾期任务的检测
获取到所有任务后,可以通过以下逻辑筛选出逾期任务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from datetime import datetime
def get_overdue_tasks(tasks): """获取逾期任务""" now = datetime.now() overdue = [] for task in tasks: due = task.get('dueDate') status = task.get('status', 0) if due and status != 2: due_str = due.replace('Z', '+00:00') due_dt = datetime.fromisoformat(due_str) if due_dt.tzinfo: due_dt = due_dt.replace(tzinfo=None) if due_dt < now: days_overdue = (now - due_dt).days task['_days_overdue'] = days_overdue overdue.append(task) return sorted(overdue, key=lambda x: x['_days_overdue'], reverse=True)
|
实际效果
配置完成后,我可以通过 OpenClaw 来:
- 创建任务:“帮我创建一个任务:今天下午5点去健身房”
- 查看今日任务:“今天还有哪些任务要做?”
- 查看逾期任务:“帮我看看有哪些任务是过期了的”
例如,我目前有以下逾期任务:
| 整理这两天看的大模型的问题和内容 |
9天 |
🧐找工作 |
| 整理昨天的面试题 |
9天 |
🧐找工作 |
| 在tv设置好lucid账号 |
4天 |
🥂交易系统构建 |
| 继续复盘十单 |
3天 |
🥂交易系统构建 |
| 把5分钟50%提醒的逻辑转成python的 |
2天 |
💰量化开发 |
总结
通过 OpenClaw 集成滴答清单 API,可以大大提升任务管理的效率。关键在于:
- 使用正确的 OAuth 认证流程
- 绕过
/task 端点的限制,通过项目端点获取任务
- 正确处理日期格式和时区
完整的 Skill 代码已开源在 GitHub(可根据实际情况添加链接)。
参考
本文使用 OpenClaw 辅助整理并发布。