如何获取 keep 跑步数据
👍
3
❤️
这些天为了把自己的 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 不算加密,做数据编码一定要记住。
博主厉害,一直想把keep里面的数据可视化展示的!
@chendongcse
谢谢,因为我数据较少,没有经过数据量的测试,你感兴趣能帮我试试有什么问题么?
/(ㄒoㄒ)/~~,看你的说明和代码我以为是zlib解压加密数据,最后找到python文档,没想到是gzip解压。我用go尝试解压了一天,终于解决了。
你可以直接用 running_page 的 keep_sync 啊
非常感谢大佬提供的keep接口,因为我最近想把keep数据接入到自己网站上,扒到的登录接口要加密就在网上搜,刚好搜到这个项目了。直接用你这个还要改代码,对python不太熟就没用了,就仿照大佬代码来翻译成go代码。😁
大佬好,方便问一下这张图中 ".txt" 前面那串字符是从哪里获取的吗?
我尝试了 "stats" 下的 "id"(是 5e40aab9d2xxxx3df28daba3_922337045xxxx090907_cy 的格式),看起来会显示 Document not found.
这个方式已经废弃了,请用 running_page 中的方式
感谢回复。
前面尝试了 keep_sync.py,但发现可获得的数据似乎较少。部分室内骑行条目有详细的心率信息,但并没有动感单车提供的其他信息(例如,功率、踏频)。
请问这些息能否被获取,还是使用这种方式无法得到这些信息?
谢谢。
不能,需要你自己研究
好的,谢谢
你可以根据里面的代码自行探索,本质上 running_page 只支持跑步~
我刚刚通过抓结果页的包大概看到了数据,但是没有时间戳且不连续。这种数据还有效吗?(新建了一个讨论:https://github.com/yihong0618/running_page/discussions/763 )
琢磨了2天还是没弄出来,本人都是室内运动比较多,生成的GPX不带经纬度,只有时间戳和心率,另外ZEPP不支持GPX导入,还要折腾成FIT,心累:😥
室内运动本身也没坐标点啊。。。不如你直接改代码生成个 csv
是的,我修改了一下,lat lon都是0,因为keep导出的数据没有geopoints 也有想法是先输出csv再转fit,但是网上没找到现成的好用的轮子,免费的在线转换倒是有,不能批量 有空再看看吧