如何获取 keep 跑步数据
这些天为了把自己的 running_page 支持keep,很大一部分精力都在和keep数据打交道,也有了一些心得,在这儿记录一下。没准过段儿时间我就成安全工程师了~ 具体代码见 https://github.com/yihong0618/running_page/blob/master/scripts/keep_sync.py
如何获取到接口
这也算是比较重要的一步。我一般采取以下步骤
- 去官网看看,有登陆的地方没,如果有获取到最原始的接口。比如
api.gotokeep.com
- 如果没有的话,我会在 GitHub 上进行搜索,但是 keep这个遇到了困难,叫 keep 的太多了。如果有人做过会节约非常多的时间,但不幸的是,keep 不像
garmin, strava
那样,几乎没人做过。 keep, 悦跑圈,咕咚那样的国内软件也鲜有人做过。幸运的是我发现了有人2年多以前做了 keepForMac, 那时候keep的接口好像还是开放的。虽然这个项目已经不能用了,但我找到了登陆接口。 - 有登陆接口后我继续在 GitHub 搜索有没有人做过 keep 的模拟登陆,这次没有那么幸运了,做过登陆的只有这一个项目。
- 没办法,只好抓包,我用 Charles 抓出跑步 logs 的接口,再碰碰运气,贴到 GitHub 中,一无所获,贴到 google 中,发现了这篇文章 嗯,证明我拿 keep 数据的想法是可行的。挺好。
搞定数据
- 想拿到跑步数据需要,速度,时间,距离,心率。。。等等,除了这些还有生成可视化地图比较重要的经纬度,如果要生成 gpx 还需要时间戳。
- 一般 经纬度 + 速度 + 时间 + 海拔的数据都是加密的,我之前搞过 Runtastic 是 base64加密,然后一个一个猜最后搞定,如下图:
- 但同样的方式我去搞keep直接失败,甚至一个字节一个字节来碰运气发现还是不行。
- 搞不定之后我尝试用之前看到的一个项目 Ciphey 尝试破解,不过只告诉我是 base 加密但解不出内容
- 最后惊奇的发现好像好多内容(能访问的txt数据都是)都包括这个开头
H4sIAAAAAAAA
, 本着我的凡事先搜索精神我把这段贴在了 GitHub 中,发现有好多代码出现了这个,肯定是某种加密。 - 在根据别人写的代码反推加密,就搞定了(zip + base64)
- 搞定了这个数据,就剩解析成我需要的格式,生成polyline了,存入数据库。这个我搞过好多,也就简单了。
总结
- keep 的数据保护并不复杂,但是keep因为想把用户留住的原因省去了好多数据
- 对于破译保护一定要多观察, 冷静。站在前人的肩膀固然好,更要有自己的能力
- 这些数据里 keep 粒度是最不好的,导出 gpx 会缺失很多,但悲凉的是已经是国产里最好的了
P.S. 本质是 base64 不算加密,做数据编码一定要记住。