关联主题:: Ob插件列表
同级:: 2025-11-22_星期六
下一级::
开发工具:Claude Code
开发日志:【插件】Obsidian插件:Atracker sync开发日志
开发文件夹:Atracker
迁移要求:
1、将Atracker-sync迁移到制定仓库插件文件夹下;
2、将get_atracker_for_obsidian.py 迁移至新仓库更目录;
3、在插件里完成相关设置即可。
4、如果遇到Bug,直接在新仓库使用claude code进行修改即可。
1. 背景与需求
- 长期使用的工具: ATracker
- 账号状态变更:
- 之前持有 Advanced(高级版) 会员:支持多设备同步、网页端访问。
- 目前持有 Pro(专业版) 会员:仅限本地使用,无官方云端同步功能。
- 核心痛点:
- 数据封闭在 App 内部,无法自动化导出。
- 希望将时间记录数据整合进 Obsidian 的“日记”系统中,实现“时间记录”与“知识/反思”的统一。
- 数据基础: ATracker 支持将记录同步写入 Apple Calendar(本地日历),这成为了后续方案的突破口。
2. 探索过程与迭代
1.0 方案:Python 脚本抓包(已弃用)
- 思路: 利用 Advanced 会员期的权限,通过 iOS 抓包工具获取 Cookie/API,结合 AI 编写 Python 脚本。
- 产出: 能够获取数据并导出为 Excel 表格。
- 缺陷:
- 无法自动化运行(需要手动触发)。
- 数据格式单一(Excel),无法与笔记系统打通。
- 随着会员降级和方案繁琐,最终停滞。
2.0 方案:尝试直连 API(失败)
- 工具: Claude Code(CLI 编程助手)。
- 尝试: 希望通过代码自动从 ATracker 服务器拉取数据直传 Obsidian。
- 阻碍: API 访问权限受限。Pro 版会员无法访问高级版的高阶数据接口,服务器端获取数据的路径走不通。
3.0 方案:本地日历中转(成功)
- 核心逻辑: 既然 ATracker 将数据写入了 Apple Calendar,那么直接读取 本地日历数据 即可绕过服务器权限限制。
- 目标: 开发一个 Obsidian 插件,读取日历,转化为 Markdown 格式写入日记。
- 开发辅助: 全程使用 Claude Code 与 AI 交互完成代码编写。
3. 插件功能实现细节
最终开发出的 Obsidian 插件具备以下特性:
⚙️ 基础设置 (Settings)
- 日记文件夹路径: 指定读取/写入的目标目录。
- 文件名格式: 匹配日记的命名规则(如 YYYY-MM-DD)。
- 插入锚点 (Target Header): 指定数据写入在哪个标题之下(例如一级标题
# 时间记录)。 - 自动同步: 开关选项。
- 同步间隔: 设置为 1 分钟。
🚀 核心命令 (Commands)
- 同步今日数据 (Sync Today):
- 无论手动或自动触发,将当天的 ATracker 数据从日历抓取,更新至当日日记的指定标题下。
- 同步历史数据 (Sync Historical):
- 打开任意往期日记文件,执行该命令,插件会读取该文件日期对应的时间记录并回填。
4. Bug 修复记录
Bug #1: 时区转换导致数据不全 (2025-11-25)
问题描述:
- 同步的时间记录数据不完整,只显示中午 12:34 之后的数据
- 缺少早上 00:00-12:34 的时间记录
问题原因:
get_atracker_for_obsidian.py 脚本在查询 macOS Calendar 数据库时,时区转换逻辑错误:
- macOS Calendar 数据库存储的是 UTC 时间
- 原代码直接用本地时间(如 2025-11-24 00:00)转时间戳去查 UTC 数据库
- 实际查询范围变成了:
- UTC 2025-11-24 00:00 到 2025-11-25 00:00
- 对应本地时间 2025-11-24 08:00 到 2025-11-25 08:00 (UTC+8)
- 导致只能查到早上 8 点之后的数据,00:00-08:00 的数据被遗漏
修复方案:
在查询前将本地时间转换为 UTC:
# 修复前(错误):
day_start = datetime(2025, 11, 24, 0, 0) # 本地时间
start_timestamp = (day_start - mac_epoch).total_seconds() # 直接转时间戳
# 修复后(正确):
day_start_local = datetime(2025, 11, 24, 0, 0) # 本地时间
day_start_utc = day_start_local - LOCAL_TIMEZONE_OFFSET # 转 UTC: 2025-11-23 16:00
start_timestamp = (day_start_utc - mac_epoch).total_seconds() # UTC 时间戳修复位置: get_atracker_for_obsidian.py 第 37-49 行
修复结果:
- 现在查询 11-24 的数据时,能够正确查到本地全天 24 小时的所有数据
- 查询范围: UTC 2025-11-23 16:00 到 2025-11-24 16:00 (对应本地 00:00-24:00)
修复工具: Claude Code
修复日期: 2025-11-25
5. 总结与成果
- 成功绕过了 ATracker Pro 版的 API 限制。
- 实现了从”数据孤岛”到”知识库(Obsidian)“的自动化闭环。
- 验证了使用 Claude Code 辅助开发 Obsidian 插件的高效性。
- 通过持续的 Bug 修复,确保数据同步的准确性和完整性。