这是一个基于Xposed的微型后端,提供下列资源查询(打勾为已实现,未打勾则是饼):
您可以通过Issue来增加要写的功能
欢迎四方大神前来维护
在release
中下载最新版本并安装,在LSPosed
的管理页面启用模块
强行停止Arcaea,重启
在手机浏览器上访问:http://localhost:61616/arcapi/v1/version
,若出现下面的字样,证明后端服务部署成功
`{"code":200,"data":{"versionCode":1,"versionName":"1.0"},"msg":"success"}`
下面的教程均为实现,为饼,实不实现看我心情
下载release
中的Frontend
模块,点击生成b30,查询单曲信息等,然后分享之。
ArcaeaB30Fucker
,打开底部导航栏从左到右第二个按钮:管理
,然后点击右下角+
按钮,选择已安装的应用程序。初次打开会让你选择最终软件包的存放路径,请知悉这里的路径都在/sdcard/
之内Arcaea
,勾选便携模式
,选择后你会看到嵌入模块
字样,点击之,然后寻找Arcaea B30 Fucker
并勾选。最后选择右下角的√
按钮。开始修补
,等待读条完成xxx_clone.apk
2-1
中的第三步,公共前缀:http://localhost:61616/arcapi/v1
注意事项:
200
,正常msg一律为success
id
为一个全小写无空格的字符串*
注释公共响应码:
Code | Description |
---|---|
200 | 接口返回正常 |
-1 | 接口内部错误接口说明 |
1001 | 未输入id |
1002 | id不正确 |
1003 | 未游玩此id代表的谱面 |
1004 | 某一数据输入错误 |
接口说明:
描述
获取后端的版本信息
URL
GET /version
返回参数
Key | Description |
---|---|
data | 版本数据 |
data.versionCode | 版本代码 |
data.versionName | 版本号 |
描述
根据id获取唯一的歌曲详情,其中id一般为小写字母不带空格。
URL
POST /res/getSongInfoById
query参数
Key | Description |
---|---|
*id | 一个字符串,代表要查询的id |
返回参数
注: 精确到小数点的定数在服务器,本地没有,等待改进
Key | Description |
---|---|
data | 本次查询到的歌曲数据 |
data.title_localized | 为一个列表,存放了不同语言下显示的不同名称 |
data.artist | 曲目的作者 |
data.date | 曲目实装到Arcaea的日期 |
date.version | 曲目实装到Arcaea的版本 |
date.difficulties | 难度列表 |
date.difficulties.ratingClass | 难度标识,0为pst,1为prs,2为ftr,3为byd |
date.difficulties.rating | 曲目的定级 |
date.difficulties.chartDesigner | 铺师 |
date.difficulties.jacketDesigner | 封面作者(无则为空) |
返回示例
{
"code": 200,
"data": {
"idx": 57,
"id": "dreaminattraction",
"title_localized": {
"en": "Dreamin' Attraction!!"
},
"artist": "翡乃イスカ",
"search_title": {
"ja": [
"どりーみんあとらくしょん"
],
"ko": [
"드리밍 어트랙션"
]
},
"search_artist": {
"en": [
"hino isuka"
],
"ja": [
"ひのいすか"
],
"ko": [
"히노 이스카"
]
},
"bpm": "205",
"bpm_base": 205,
"set": "base",
"purchase": "",
"audioPreview": 39804,
"audioPreviewEnd": 60878,
"side": 0,
"world_unlock": true,
"bg": "base_light",
"bg_inverse": "base_conflict",
"date": 1509667201,
"version": "1.5",
"difficulties": [
{
"ratingClass": 0,
"chartDesigner": "Nitro",
"jacketDesigner": "",
"rating": 4
},
{
"ratingClass": 1,
"chartDesigner": "Nitro",
"jacketDesigner": "",
"rating": 7
},
{
"ratingClass": 2,
"chartDesigner": "Nitro",
"jacketDesigner": "",
"rating": 9
}
]
},
"msg": "success"
}
描述
根据id获取游玩成绩,其中id一般为小写字母不带空格。
URL
POST /data/getPlayerDataById
query参数
Key | Description |
---|---|
*id | 一个字符串,代表要查询的id |
返回参数
注: 精确到小数点的定数在服务器,本地没有,等待改进
Key | Description |
---|---|
data | 本次查询到的歌曲数据,为一个列表。 |
data.clearStatus | 通关代码,详情见下方引用 |
date.difficulty | 难度 |
date.farCount | 爆far数量 |
date.health | 歌曲结束时的回忆率,其中困难模式tl的回忆率为-1 |
date.id | 歌曲的id |
date.lostCount | 爆lost数量 |
date.perfectCount | P数量 |
date.score | 分数 |
date.shinyPerfectCount | 大P数量 |
关于通关代码
Code Description 0 Track Lost 1 普通搭档Clear 2 Full Recall 3 Pure Memory 4 简单搭档Clear 5 困难搭档Clear
返回示例
{
"code": 200,
"data": [
{
"clearStatus": 2,
"difficulty": "PAST",
"farCount": 3,
"health": 100,
"id": "fairytale",
"lostCount": 0,
"perfectCount": 333,
"score": 9955677,
"shinyPerfectCount": 320
},
{
"clearStatus": 2,
"difficulty": "PRESENT",
"farCount": 10,
"health": 100,
"id": "fairytale",
"lostCount": 4,
"perfectCount": 497,
"score": 9824333,
"shinyPerfectCount": 459
},
{
"clearStatus": 2,
"difficulty": "FUTURE",
"farCount": 7,
"health": 100,
"id": "fairytale",
"lostCount": 0,
"perfectCount": 775,
"score": 9955932,
"shinyPerfectCount": 690
},
{
"clearStatus": 2,
"difficulty": "BEYOND",
"farCount": 18,
"health": 100,
"id": "fairytale",
"lostCount": 0,
"perfectCount": 914,
"score": 9904241,
"shinyPerfectCount": 808
}
],
"msg": "success"
}
描述
刷新缓存的歌曲资源
URL
GET /res/refreshResource
query参数
Key | Description |
---|---|
forceRefreshEx_diff | 是否强制刷新准确定数 资源。固定值,即true/false。默认值为false |
返回示例
{"code":200,"msg":"success"}
描述
根据id等信息获得曲绘
URL
GET /res/image
query参数
Key | Description |
---|---|
*id | 一个字符串,代表要查询的id |
difficulty | 难度,可以填写难度和难度代号,默认为future。 |
size | 大小,可填写256和512,默认为256 |
返回示例
对应的曲绘,略
描述
根据url获得对应的资源
URL
GET /res/assets
query参数
Key | Description |
---|---|
*path | 资源相对assets 文件夹的路径 |
返回示例
对应资源的二进制文件
描述
获取当前玩家的PTT信息
URL
POST user/profile
返回参数
{"code":200,"data":{"name":"kagg886","pttB30":11.707333333333334,"pttMax":11.77325,"pttR10":11.838000000000001,"pttReal":11.74},"msg":"success"}
Key | Description |
---|---|
data | 本次的ptt信息 |
name | 玩家用户名 |
pttB30 | b30 ptt |
pttMax | 无推分最高ptt |
pttR10 | R10 ptt |
pttReal | 真实ptt |
注意: 以上四份ptt数据中:
- pttReal从内存中读取,保真
- pttB30从本地存档中读取,若出现云端与本地不同步(如推分未上传,在第二份设备上下载并使用本工具查询),则结果不准确
- pttR10根据上两个值进行计算
描述
获取当前玩家存储的B30数据
URL
POST /data/b30
返回参数
Key | Description |
---|---|
data | 本次获取的Best 30列表 |
data.ex_diff | 准确的定数 |
data.name | 曲名 |
data.ptt | 单曲ptt |
data.data | 参考根据id获取游玩成绩 中的 返回参数 |
返回示例
{
"code": 200,
"data": [
{
"data": {
"clearStatus": 2,
"difficulty": "FUTURE",
"farCount": 10,
"health": 100,
"id": "cyaegha",
"lostCount": 8,
"perfectCount": 1350,
"score": 9906210,
"shinyPerfectCount": 1240
},
"name": "Cyaegha",
"ptt": 12.23
},
{
"data": {
"clearStatus": 5,
"difficulty": "FUTURE",
"farCount": 16,
"health": 100,
"id": "singularity",
"lostCount": 4,
"perfectCount": 1085,
"score": 9892336,
"shinyPerfectCount": 934
},
"name": "Singularity",
"ptt": 12.16
},
{
"data": {
"clearStatus": 5,
"difficulty": "FUTURE",
"farCount": 25,
"health": 100,
"id": "gou",
"lostCount": 11,
"perfectCount": 1486,
"score": 9846934,
"shinyPerfectCount": 1337
},
"name": "Misdeed -la bonté de Dieu et l'origine du mal-",
"ptt": 12.13
},
{
"data": {
"clearStatus": 5,
"difficulty": "FUTURE",
"farCount": 18,
"health": 100,
"id": "lastcelebration",
"lostCount": 4,
"perfectCount": 1453,
"score": 9913219,
"shinyPerfectCount": 1355
},
"name": "Last Celebration",
"ptt": 12.07
},
{
"data": {
"clearStatus": 5,
"difficulty": "FUTURE",
"farCount": 22,
"health": 100,
"id": "ringedgenesis",
"lostCount": 8,
"perfectCount": 1116,
"score": 9835122,
"shinyPerfectCount": 917
},
"name": "Ringed Genesis",
"ptt": 11.98
},
...and 25 items so on
],
"msg": "success"
}