npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mainetcn

v1.0.9

Published

maimai dx 国服成绩查询

Downloads

5

Readme

mainetcn

Maimai DX 国服成绩查询 API。

使用方法

在你的 Node.js 项目中安装 mainetcn 包,并获取国服 maimaiNET 的访问 token 后,就可以在本项目中调取你的国服 Maimai DX 成绩数据和游戏历史数据。

以下是简单的例子。

const mainetcn = require('mainetcn')

async function profile() {
  try {
    return (await mainetcn.gamedata({ ult: 'abc...', userId: '123...' }))
  } catch (e) { console.log(e) /* 不推荐在生产环境使用这种错误捕捉逻辑。 */ }
}

console.log(profile())

访问 Token?什么鬼?

由于国服 maimaiNET 统一使用微信登录,且华立及 SEGA 没有提供关联手机号或邮箱的选项、微信没有开放开发者调试工具的使用,因此若需要使用该框架访问 maimaiNET,需要使用 MitM(中间人)工具,获取利用 HTTPS 与华立服务器传输的、存放于浏览器 Cookie 中的 token。

完成 MitM 抓包需要特定的抓包软件。iOS 及 macOS 用户可以使用 Surge、Android 用户可以使用 HttpCanary

具体方法是:

  • 使用对应抓包/网络记录工具,安装 MitM 证书。(请确保你信任这个抓包软件。)然后打开抓包。
  • 打开微信,打开「舞萌 DX」公众号,点击底部「我的记录」菜单。等待网页成功加载完毕。
  • 在抓取到的网络包记录中,找到发往 https://maimai.wahlap.com/maimai-mobile/home/ 的 GET 请求通讯包。
  • 在这个包中找到响应头,头内 Set-Cookie 参数中有对应的 token。

例如,你有可能会获取到这样的响应头:

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 08 Feb 2020 09:27:19 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: _t=<ULT>; expires=Tue, 05-Feb-2030 09:27:19 GMT; Max-Age=315360000; path=/
Set-Cookie: userId=<USERID>; path=/; HttpOnly
Expires: -1
...

其中,你可以找到名为 _tuserId 的 cookies(<ULT><USERID>),这就是本包需要的 token。在调用方法的时候,第一个参数永远是一个对象,对象中需要包含这两者才能正常访问 maimaiNET 数据(详见前述实例,_t 更名为 ult)。

另外,每次访问后,maimaiNET 会刷新这个 token。mainetcn 可以帮你刷新 token,但你需要自行完成新 token 的记录工作。在返回的数据中会有两个对象,一个是 result,即函数返回的结果本体,另一个是 token,即刷新后的 token。下一次只需要用刷新后的 token 即可完成请求。

提醒一下,若你在其他地方(包括但不限于微信公众号「舞萌 DX」内)访问过玩家数据,你需要手动刷新一次 token,即使用前述的 MitM 抓包方式进行刷新。

具体 API 列表

  • mainetcn.gamedata(token):获取玩家资料。
  • mainetcn.recent(token):获取最近游玩的 50 次谱面记录列表。
  • mainetcn.trackdetail(token, trackid):获取单次谱面详情。trackid 参数可以在 mainetcn.recent(token) 中的 res.result[i].id中获取。

License & Disclaimer

MIT

本代码与华立、SEGA 等公司无任何关系,注册商标所有权归相关品牌所有。请勿使用本代码用于网络攻击或其他滥用行为。