向 DEV 展示:我建立了一个仪表板来追踪我的生活
tl;dr请查看http://craigcarlyle.me
简介
几年前,我开始了减肥和健康之旅。Fitbit 和 MyFitnessPal 让我接触到了量化自我这个圈子。减掉 50 多磅后,我迷上了个人数据追踪。
快进到现在,我比以往任何时候都更注重追踪。并非因为我相信要优化生活的方方面面,而是因为它能帮助我平衡生活。几天没运动了?该去健身房了。这周我每天摄入4000卡路里?我应该吃一段时间清洁食品。好久没冥想或阅读了?让我拿起我的Kindle。
移动设备上有很多很棒的追踪工具(陀螺仪是我个人最喜欢的),但我想要一个可以在桌面/iPad 上使用的工具,这样我就可以一次性查看更多、更长时间的数据。我找不到任何能满足我需求的工具,所以我自己构建了一个解决方案。你可以在这里看到它。
我已将我的数据(自 2019 年 1 月起)设置为以日历视图显示。每个日期将包含以下来源的数据:
从外部来源跟踪和导入的数据
- ❤️通过 Apple Health 查看心率和 HRV
- ⚖️通过 Apple Health 获取体重和体脂百分比
- 👟通过 Apple Health 记录步数和行走距离
- 🧘♂️通过 Apple Health 进行冥想课程
- 🔥通过MyFitnessPal消耗的卡路里
- 🍱 宏量营养素(碳水化合物、脂肪和蛋白质)通过MyFitnessPal
- ☕️ 咖啡因(咖啡、茶和运动前)通过MyFitnessPal
- 💊通过MyFitnessPal补充摄入量
- ✅通过Todoist完成的任务数量(工作和个人)
- 🏋通过MyFitnessPal进行锻炼
- 🧖通过MyFitnessPal进行桑拿
- 💆♂️通过MyFitnessPal进行 RMT 课程
- 👩⚕️通过MyFitnessPal进行脊椎按摩治疗
- 🛫 我通过Nomad List去过的地方
- 🏊♂️ 我通过ScubaEarth完成的潜水
- 🦉通过Duolingo获得Duolingo XP
- 👨💻通过RescueTime提高工作效率
- 🐙通过GitHub进行 GitHub 贡献
- 📖通过Goodreads查看阅读进度
手动输入到 Google Sheet 的数据
- 🆙 我使用站立式办公桌多长时间了
- 🔬 促甲状腺激素 (TSH) 结果
- 🏆 成就
- 🤒 疾病
- 🤕 受伤
- 🌴假期
- 📝 愿望清单
获取数据(技术层面)
来自 Apple 健康
在 iOS 12 中,Apple 添加了Siri Shortcuts,允许编写一些强大的脚本。我编写了一个脚本,它会检查我的健康样本,将数据格式化为有效的 JSON,然后通过 SSH 将文件保存到我的服务器。遗憾的是,在撰写本文时,Apple 不允许自动触发这些快捷方式,所以我通常在早上上班时手动运行它们。
来自 MyFitnessPal
我本可以利用相同的 Siri Shortcuts 来上传我的营养数据,但 MyFitnessPal 因与 Apple Health 同步时出现丢失或重复的条目而臭名昭著。
MyFitnessPal 也有一个仅限邀请的 API。我已经在等待名单上等了好几年了,却一直没有消息。
我偶然发现了这个mfp模块,它可以加载用户的可打印日记,并使用cheerio从中抓取数据。我对其进行了修改,使其能够抓取运动、咖啡因摄入量、补充剂和 RMT 会话的数据。我每 10 分钟使用Heroku Scheduler运行一个 Node.js 任务收集一次这些数据,并将其以 JSON 文件的形式保存在我的服务器上。
利用 IFTTT
方便的是,Google 表格可以作为 JSON 对象导入。IFTTT有很多小程序,可以在操作触发时向电子表格添加新行。以下情况会创建新行:
- 我在 Todoist 上将任务标记为已完成
- 我的阅读进度在 Goodreads 上更新
- RescueTime 创建每日生产力摘要
没有 API,没有问题
最近我爱上了水肺潜水。我使用ScubaEarth来追踪我的潜水记录,可惜它没有 API。我再次使用 Heroku Scheduler,启动了一个Puppeteer实例来登录我的账户,并从我的潜水日志中收集页面数据。这些数据会使用cheerio解析成 JSON 对象,然后上传到我的服务器。
Duolingo 有一个 API,但它没有文档记录,而且(据我所知)没有我所需要的功能。使用同一个 Puppeteer 实例,我进入我的duome个人资料并收集我最近的 XP 值。新的 XP JSON 对象被添加到现有的 XP 对象数组中,并以文件形式上传到我的服务器。
简单的东西
Nomad List的Pieter Levels非常棒,它允许任何人以 JSON 格式访问他们的数据。只需访问https://nomadlist.com/@craigcarlyle.json即可。
进一步推进
我觉得把我的旅行和潜水记录都画出来会很酷,所以我又加了一个页面来实现这个功能。数据都用Mapbox列出来并可视化了。
我也觉得分享我的愿望清单会很酷。这只是一个简单的 Google Sheet,以 JSON 对象的形式导入。
最后的想法
虽然它远谈不上优雅,但这是一个值得反复尝试的项目,很有意思。我不仅构建了一个生活中必不可少的应用程序,还帮助我克服了“冒名顶替综合症”(我们都有的)。我的目标之一是自学 React,因为过去六年多来,我主要使用 AngularJS 和原生 JavaScript/TypeScript 工作。虽然它并不完美,但现在我已经能轻松地使用 React 了。
我随时都可能说“哦,这太难了”,或者“没有 API,所以做不到”。但找到有创意的解决方案(比如使用 Puppeteer 抓取数据)帮助我增强了作为开发者的信心。
如有任何问题,请随时联系我们。我很乐意为您解答。感谢您的阅读!
文章来源:https://dev.to/craigcarlyle/show-dev-i-built-a-dashboard-to-track-my-life-55pl