RankHub

API 目前处于 Early Preview 阶段, 可能存在诸多不完善与错误之处,欢迎加群交流反馈:加入官方交流群(1073434398)

水鱼查分器

从水鱼(DivingFish)maimaidx-prober / chunithm-prober API 迁到 RankHub v1:认证、包络、端点、字段与上传体逐项对照。

这一页写给已经接过水鱼查分器 API 的开发者:你熟悉的那套模型(Bearer 令牌、裸 JSON、/player/records、 update_records 裸数组)在 RankHub 里各对应什么,哪些必须改。字段的完整定义不在这里重复, 需要时跳 maimai 格式 / chunithm 格式。

你会的东西 vs RankHub

水鱼(https://www.diving-fish.com/api/maimaidxprober 或 .../chunithmprober)RankHub v1(https://api.rankhub.cc)
Authorization: Bearer <access_token>(OAuth,带 scope)同样是 Authorization: Bearer <access_token>,scope 只有 game:read / game:write
成功 = 裸 JSON;失败 = {"status":"error","message":"…"}一律 {code,message,description,data,requestId},code 是字符串(如 common.ok)
GET /player/records 取本人全量成绩先建/选档案,再 GET /v1/games/{game}/profiles/{profileId}/scores(游标分页)
POST /query/player + b50 标志取 B50GET .../bests 直接返回该游戏的最佳桶(maimai 当期/往期、chunithm BEST30/SELECTION10/NEW20)
POST /player/update_records(body 是裸数组,按 title 认曲)POST .../scores(body 是 {"scores":[…]},按 songId 认曲,字符串 id)
单曲评分 ra / rating 由水鱼算好maimai / arcaea 由服务端算,其余游戏你给 rating(见写入格式)
身份是 username / qq(Bearer 下由令牌决定)身份是各游戏身份字段:maimai friendCode 或 userId、chunithm friendCode(见怎么传数据)

迁移只要四步

  1. 换成 RankHub 的 OAuth 凭据(Authorization: Bearer,scope game:read / game:write); OAuth 流程见授权码模式,JWT/device 流程见令牌。

  2. 建档:POST /v1/games/{game}/profiles,给身份字段(maimai 好友码、chunithm 好友码)。 这一步替代水鱼的「QQ 绑定」。

  3. 推成绩:POST /v1/games/{game}/profiles/{profileId}/scores,两种写法二选一:

    { "scores": [ { "songId": "834", "type": "dx", "levelIndex": 3,
                    "achievements": 99.8144, "dxScore": 2500, "fc": "ap", "fs": "fs" } ] }

    如果你手里是机台/原生对象,也可以直接给 native(maimai 机台键: musicId / level / achievement / deluxscoreMax / comboStatus / syncStatus), 服务端换算;见 maimai 原生数据。

  4. 读回:/scores 或 /bests,分页用 cursor,按 sortBy=playTime|achievements|rating 排序。

必须改的五个点

  1. 包络:不要再判断 status === 'error';看 HTTP 状态 + code(common.invalidArgument 等)。
  2. 「谁的数据」不再靠参数:RankHub 用 profileId 指定档案;没有 qq / username 参数。
  3. 上传体是对象不是数组:{"scores":[…]};单批默认上限 500(硬上限 2000)。
  4. 字段名与枚举:水鱼 maimai 的 type 是 SD / DX,RankHub 是 standard / dx / utage; level_index → levelIndex;dxScore 同名;ra 不要传(maimai 服务端算)。 ❗ song_id 不能直接透传:水鱼的 DX 谱 song_id 是标准 id + 10000(例如 DX 的 song_id=1834 对应曲目 834)。RankHub 的 songId 是无偏移的曲目 id(标准 / DX 共用,靠 type 区分), 迁移时要把 DX 的 song_id 减 10000,standard 保持不变。
  5. achievements 是百分比(99.8144),不是 ×10000 的整数 —— 不要套机台编码; 机台编码请走 native(achievement: 998144)。

坑(来自水鱼文档的已知语义)

  • 水鱼上传按 title 认曲、同名曲有特例(Link(CoF));RankHub 只认 songId,请你先做标题→id 的映射。
  • DX 的 song_id 带 +10000 偏移:这是水鱼与落雪最容易被忽略的差异(落雪 id 无偏移)。直接透传会 写到不存在的谱面;映射公式:RankHub.songId = (type === 'DX') ? song_id - 10000 : song_id。
  • 水鱼的 level_index 越界会静默跳过;RankHub 会报 400(不静默丢数据)。
  • achievements 超过 101 水鱼会截断;RankHub 的普通谱上限 101、BUDDY/宴谱到 202,超界直接 400。
  • 水鱼 Bearer 配额按自然日;RankHub 的限流见批量与限流。

下一步

本页内容

官方交流群二维码官方交流群问题反馈 · 版本资讯 · 成绩交流群号 1073434398