获取switch游戏历史的一种方法

发布于 2022-08-01  264 次阅读


众所周知在switch的账号信息里能看到账号的游戏游玩记录。而我这个博客的主题里有追番这个展示自己最近b站所看番剧的功能页(虽然已经不怎么在辣鸡b站上看番了)。所以我考虑加上一个展示自己的switch游戏记录的页面

那要完成这个功能最重要的肯定还是数据了。首先查了一下发现web端还真没有显示switch游戏记录的地方。那咋办呢,给switch抓包肯定不是那么容易的(没研究过,但我觉得没破解机应该是不可行的)。不过好在发现一个20年4月的新闻提到任天堂新推出的My Nintendo App带有"遊んだ記録"功能。于是找个安卓模拟器抓一下包理论上就ok啦。

直接说结论:

获取游玩记录的接口
GET https://mypage-api.entry.nintendo.co.jp/api/v1/users/me/play_histories
需要两个头
Authorization: token.TokenType+" "+token.AccessToken
User-Agent: com.nintendo.znej/1.13.0 (Android/7.1.2)

这里的token需要通过session_token来获取

POST https://accounts.nintendo.com/connect/1.0.0/api/token
{"client_id":"***********","session_token":"**********","grant_type":"urn:ietf:params:oauth:grant-type:jwt-bearer-session-token"}

而client_id和session_token是app登陆时从web端获得的,就是上面的oauth,二进制选手不是很懂,反正知道咋获取就完事了,不选择抓包的话可以请求下面这个

GET https://accounts.nintendo.com/connect/1.0.0/authorize?state=&redirect_uri=npf{client_id}%3A%2F%2Fauth&client_id={client_id}&scope=openid%20user%20user.mii%20user.email%20user.links%5B%5D.id&response_type=session_token_code&session_token_code_challenge={challange}&session_token_code_challenge_method=S256&theme=login_form

因为session_token有两年的有效期,所以我在博客上的option里加入了client_id和session_token两个字段,然后请求上面两个url就完事了。前端也不会写,直接套了追番的那个。

顺带一提其实这个play_histories的数据是相当完整的,甚至可以进一步获取每个游戏分别在哪一天玩了多久。但公开展示就不显示那么清楚了hhh。

另外因为每次都请求任天堂的数据增加了响应时间,导致打开的速度很慢,怎么优化的问题就放在下次再说了。因为连续上班太累了orz。


人生二十年,与天地长久相较,如梦又似幻;一度得生者,岂有不灭者乎?