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 标志取 B50 | GET .../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(见怎么传数据) |
迁移只要四步
-
换成 RankHub 的 OAuth 凭据(
Authorization: Bearer,scopegame:read/game:write); OAuth 流程见授权码模式,JWT/device 流程见令牌。 -
建档:
POST /v1/games/{game}/profiles,给身份字段(maimai 好友码、chunithm 好友码)。 这一步替代水鱼的「QQ 绑定」。 -
推成绩:
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 原生数据。 -
读回:
/scores或/bests,分页用cursor,按sortBy=playTime|achievements|rating排序。
必须改的五个点
- 包络:不要再判断
status === 'error';看 HTTP 状态 +code(common.invalidArgument等)。 - 「谁的数据」不再靠参数:RankHub 用
profileId指定档案;没有qq/username参数。 - 上传体是对象不是数组:
{"scores":[…]};单批默认上限 500(硬上限 2000)。 - 字段名与枚举:水鱼 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 保持不变。 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 的限流见批量与限流。
下一步
- maimai 格式 / chunithm 格式(统一字段、原生字段、写入必填)
- 写入格式(两种写法、幂等、428 确认流)
- 怎么传数据(速查)