Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何获取悦跑圈数据 #197

Open
yihong0618 opened this issue Dec 18, 2020 · 12 comments
Open

如何获取悦跑圈数据 #197

yihong0618 opened this issue Dec 18, 2020 · 12 comments
Labels
Top Top label of gitblog 开发笔记

Comments

@yihong0618
Copy link
Owner

这几天想给朋友分享如何把跑步数据同步到 NRC 发现自己当年一系列的操作几乎忘光了,他没有成功,有些遗憾。想着,如果当时写个博客就好了,以后跟人分享还方便,也能让更多的人转移成功。

于是,这些天尝试如何获取悦跑圈数据的过程,记录一下。

  • 尝试给 running_page 加入悦跑圈已经很久了,我是先本着凡事先搜索的原则找到了有人分享过悦跑圈逆向的加密。但我不知道接口,尝试抓包,嗯,不出意外 SSL Pinning
  • 为了解决这个,我先后学会了,装夜神模拟器,怎么 trust,怎么模拟器配合 charles 抓包,但是,不知道为什么还是失败。不过倒是学了一点逆向安卓,发现了 Xserver 这个项目
  • 放弃之际,ben-29 给我发来一条私信,说他抓到了悦跑圈的包,说是用低版本的 apk 可以,我一下就兴奋了。于是去下了一个3.0的,果然能抓到,好兴奋。
  • 接下来就是一系列破解接口的过程,具体方式方式不便讲。但发现了一个隐藏的项目 PKURunningHelper 里面直接有加密需要的两个 key。我用了一些其中的代码,但实在是不喜欢代码的 taste,几乎都重写了。
  • 但是带来了一个新问题,joyrun 更改了它的登陆策略,目前,只支持单设备登陆并且,如果是新设备必须用验证码登陆,这下就麻烦了,一下子必须 runner 必须具备抓包和搞到低版本的能力,这样是没法通用的。
  • 于是我想了从验证码就行突破找找运气,我尝试了只用验证码校验的接口是否能登陆成功,-- 在手机获取验证码,然后把验证码传入 python 端校验验证码的接口上,看起来我运气不错,搞定了。
  • 并且,登陆之后会有 sid, uid, 悦跑圈的 cookie 也是用这两个拼的,加密也是,只需要保留这两个大家就可以再用这个登陆了,方便很多,我加了个简单的用 sid, uid 登陆的方法。
  • 之后导入数据,转换成 GPX 和其它的软件类似,不过 joyrun 的数据格式做的太差了甚至和 keep 比都差很多,心率和海拔是分开的没有时间戳。。。转换成 GPX 造成了非常的大困难。我暂时没加这两个。

关于获取数据代码在这里

@lmmsoft
Copy link

lmmsoft commented Dec 16, 2022

nb

@yusong17
Copy link

感谢分享!成功导出了七年前的数据,但是200多条跑步记录只导出了80多条,有办法解决吗?谢谢!

@yusong17
Copy link

我看可以显示200多条记录,但是很多没有成功,
成功的是 downloading joyrun_id xxxxxxx gpx
不成功的就是 invalid syntax (, line 1)

然后再次运行python,就显示 No tracks found.。
有什么办法吗。谢谢!

@yihong0618
Copy link
Owner Author

不确定

  1. 可能你数据不全是跑步,目前只能导出跑步
  2. 没有路径信息是无法导出 gpx 的
  3. 你再运行 no track 是因为导完了,删掉 scripts/data.db 重新跑就行

@yusong17
Copy link

谢谢及时回复! 应该都是跑步数据,我都是同样的方式跑的。。 我刚刚删掉data.db重新导出,似乎还是一样的问题。这样隔几条失败几个成功几个
invalid syntax (, line 1)
invalid syntax (, line 1)
downloading joyrun_id 49720290 gpx
downloading joyrun_id 159686114 gpx
invalid syntax (, line 1)
invalid syntax (, line 1)
invalid syntax (, line 1)

@yusong17
Copy link

yusong17 commented May 19, 2023

因为现在还没办法全导入到strava,我还不完全确定。但我看了一下我的跑步数据,我怀疑导出的85条数据都是在北京时区(北京+新加坡)跑的(数值上恰好对的上),剩下的100多条是美国的时区下跑的,不知道会不会是这个原因,导致他导出的时候混乱了。。不知道您有没有这方方面的经验

@yihong0618
Copy link
Owner Author

invalid

你可以把这些 print 出来试试

@yihong0618
Copy link
Owner Author

从 拿 single 的时候 print 看看是不是 json 不一样

@yusong17
Copy link

从 拿 single 的时候 print 看看是不是 json 不一样

没太明白您的意思哈哈

@yusong17
Copy link

从 拿 single 的时候 print 看看是不是 json 不一样

抱歉一直打扰 确实不太懂 又确实也很想把数据弄出来哈哈 谢谢了!

@yihong0618
Copy link
Owner Author

@yusong17

def get_single_run_record(self, fid):
    payload = {
        "fid": fid,
        "wgs": 1,
    }
    r = self.session.post(
        f"{self.base_url}/Run/GetInfo.aspx",
        data=payload,
        auth=self.auth.reload(payload),
    )
    print(r.text)
    print(r.json())
    data = r.json()
    return data

搜索这个函数,加这两个 print 然后截图

@yusong17
Copy link

嗯嗯 给您发邮件了,谢谢!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Top Top label of gitblog 开发笔记
Projects
None yet
Development

No branches or pull requests

3 participants