教师节:我没当成老师,却成了自己的教练

教师节,朋友圈里全是鲜花和祝福,我盯着屏幕上的“教练”两个字,感觉特别刺眼。去年这时候我还信誓旦旦要搞个教育产品,现在呢?我成了自己身体的教练,用爬虫和API给自己上刑。

团队里那帮小年轻最近状态肉眼可见地差,下午三点集体犯困。我骂他们作息混乱,结果自己一测心率变异性,比他们还烂。妈的,管理别人之前,得先管住自己这具三十多岁的肉身。什么自由职业,赚那点流水全搭进医院都不够。我开始系统性折腾自己,第一步就是得把数据抓出来,看不见的东西永远管不了。

Keep和苹果健康的数据是孤岛,我要的是串联。先用Fiddler抓了Keep的包,发现他们API验证换了,加了时间戳和动态签名。逆向工程搞了俩晚上,用Python的requests库模拟登录,关键那个sign参数算法藏在某个obfuscated的JS文件里,得用PyExecJS去执行那坨压缩过的代码才能拿到。心率、卡路里、运动时长这些字段总算能扒下来了。

苹果健康的数据导出更恶心。它只能走XML格式批量导出,几个G的数据文件,解析起来内存直接爆炸。我用lxml搞流式解析,写了个迭代器,一行行吃进去,专挑“心率”、“步数”、“静息能量”这几个标签。光解析就花了半小时,这效率根本没法做实时监控。后来发现捷径可以配合健康App的权限,定期把数据推到我自己服务器的webhook,算是绕了个弯子。

数据有了,得跟我的“刑具”挂钩。我在本地搭了个Flask小服务,写了个激励/惩罚逻辑:如果连续三天静息心率高于75,或者日均步数低于5000,就自动从我零钱通里扣一百块,捐给一个我极其讨厌的公益项目。扣款用微信支付的商户API,为了省事直接调了以前小程序项目的现成代码。反向激励也有,如果一周运动消耗达标,就允许自己买一件之前放购物车里的数码垃圾。

最变态的部分是通知系统。我用Twilio的API发国际短信到自己的老诺基亚功能机上,那手机除了收短信啥也干不了。短信内容极其刻薄:“Flovico,你今天的心率变异性显示你的自律像屎一样。昨日睡眠深度不足1小时,你是打算三十五岁就猝死,然后把公司留给那群更不靠谱的人吗?” 每天早晨七点准时收到,比任何闹钟都让人清醒。

搞这套系统花了差不多一个月,中间无数次想放弃。API频率限制、数据格式突变、服务器半夜崩了导致数据丢失……每次都想,我他妈一个做产品的,为什么要在这些底层脏活上耗时间?但当你看到曲线图真的因为你的干预而发生变化,那种感觉比上线一个APP还真实。身体数据不会骗人,你偷懒,曲线立马躺平;你拼命,它还真给你一点上扬的反馈。

现在团队开会,我第一件事是共享我的运动数据周报。那帮小子从看笑话到默默打开自己的健康App。管理是什么?可能就是你先把自己活成一个偏执的样本,用代码和规则给自己戴上镣铐跳舞,然后才有人愿意相信你画的饼。教师节,我没教会任何人,但至少,我开始能教练这具总想偷懒的肉身了。虽然过程像一场自己对自己发动的、永无止境的技术攻坚。

© 版权声明
THE END
喜欢就支持一下吧
点赞78 分享