Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kyokukong/maiquery

一个高度精简并只保留了必要功能的maimai cn ver.仿真客户端,用于提供基于游戏官方服务器的数据查询中继API
https://github.com/kyokukong/maiquery

api go golang mai maimai maimai-dx maimaidx maimaidx-cn restful sega wahlap

Last synced: 17 days ago
JSON representation

一个高度精简并只保留了必要功能的maimai cn ver.仿真客户端,用于提供基于游戏官方服务器的数据查询中继API

Awesome Lists containing this project

README

        

# maiquery

![Version](https://img.shields.io/badge/Version-1.0.0-yellow)
[![Golang](https://img.shields.io/badge/Go-1.23.3-blue)](https://golang.org/)
[![License](https://img.shields.io/badge/License-MIT-green)](./LICENSE)

![logo](./maiquery.png)

> 🚧🚧🚧 **这个仓库当前正在施工中!!!** 🚧🚧🚧

> maiquery的开发仍在进行,这个仓库将在未来用于分发二进制可执行文件及存放API文档,第一个Beta版本会在近日放出。

一个高度精简且只保留了必要功能的maimai SDGB(国服)仿真客户端,使用Golang编写以获得更好的性能表现,用于提供基于游戏官方服务器的数据查询服务API。

maiquery不提供且未来也不计划提供对游戏服务端数据进行操作的功能,仅用于单向从服务端中拉取数据。

## 编译

该仓库中**不公开提供**源码,仅用于发布预编译版本

```shell
go build maiquery
```

## 使用

直接在Release中下载并运行对应平台的二进制可执行文件即可,如第一次运行maiquery则会自动在本地新建配置文件`mqconfig.toml`,请修改确认配置文件后再次运行maiquery。

配置文件的配置项功能可参考以下标注:

```toml
# mqconfig.toml
[api]
host = '127.0.0.1' # API监听地址,如需远程访问请填写0.0.0.0或者服务器公网IP
port = 11663 # API监听端口

[maiquery]
debug = false # 是否启用调试模式
enable_cache = true # 是否启用数据缓存,使用缓存可以改善访问速度
max_cache_size = 512 # 缓存最大容量,单位为MB,缓存数据超过此大小时将自动清理最早的数据
cache_expire = 600 # 缓存过期时间,单位为秒,过期后将重新从服务器获取数据,太短时可能会影响缓存效果,太长时可能会导致数据不准确
enable_persistence = false # 是否启用持久化存储,部分API需要启用此功能才能使用

```

maiquery会在启动完成后自动连接到maimai官方服务器,然后启动API服务并监听本地端口(默认为`11663`,可以在配置文件中进行修改),发送HTTP请求即可查询到相关数据,使用说明详见[maiquery API使用手册](./APIGuide.md)。

`example`文件夹中有一些常用编程语言的测试用示例代码,封装了请求方法,可以帮助你快速上手使用maiquery。

maiquery还有一系列的命令行参数可以用于调试和配置,以下是一些常用的参数:

| 参数 | 说明 |
|-----------------|--------|
| `-h` / `--help` | 显示帮助信息 |
| `--debug` | 启用调试模式 |

## 性能

maiquery本身只是一个数据查询中继服务,它本身的访问速度实际上取决于maimai游戏官方服务器的响应速度,而maiquery程序本身对访问速度的影响相对于整个网络中继链路来说是微乎其微的。

鉴于官方服务器众所周知的间歇性抽风问题,减少不必要的查询有助于加快访问速度,所以maiquery默认启用了访问缓存功能,但是缓存的数据可能会因为官方服务端的数据更新而不准确,如果这影响了你的使用体验,可以在配置文件中关闭缓存功能或者调整缓存时间/限额。

maiquery本身不需要太多的资源(尤其是在不启用内置的用户数据存储服务的情况下),绝大多数设备都能够轻松运行,你可以参考如下的性能测试数据:

```shell
# ./benchmark.go
```

## 声明

maiquery是一个**第三方**数据查询中继工具,不是SEGA或者华立的官方产品,没有经过游戏开发/运营方的任何授权和保证,**使用maiquery可能会违反maimai的服务协议,使用者需自行承担风险**

maiquery不对其获取的数据提供任何形式的保证,包括但不限于对数据的准确性、完整性、及时性等

一切因使用maiquery而导致的问题,包括但不限于数据丢失、数据不准确、账号被封禁等,**maiquery及其开发者不承担任何责任**

**请勿将maiquery用于任何形式的商业用途**,包括但不限于出售、转让、租赁、提供付费服务等

maiquery的存在仅仅是为了方便玩家获取必要的游戏数据,**不得将maiquery用于任何形式的作弊行为**,包括但不限于修改游戏数据、破解游戏数据、破解游戏客户端等,不得对maiquery进行逆向工程、反编译、反汇编等操作,**不得将maiquery用于非法用途**,由此产生的一切后果均与maiquery及其开发者无关

## 鸣谢

- [Logrus]() 优秀的Golang日志库,能够提供高度可自定义的日志输出和强大的日志处理功能
- [Gin]() 极简的Golang Web框架,可以轻松构建高性能的API服务
- [Viper]() 强大的Golang配置库,可以读取和解析多种格式的配置文件
- [freecache]() 强大的Golang缓存库,用于实现内存缓存功能
- [garble]() 易用的Golang代码混淆工具,可以直接嵌入Go编译过程中,支持增量编译,高效保护源码安全

## 许可证

由于实现原理的敏感性,maiquery暂时不会进行开源,也请不要以任何形式向开发者或其他人索要源码,仓库中分发的maiquery二进制文件仅供个人学习和研究使用,请于下载后24小时内删除

## 趣闻

1.maiquery的名字就是maimai和query(查询)的组合,够无聊吧

2.maimai的微信公众号net服务是server-side render(服务端侧渲染)的,意味着整个Html页面都由服务端生成,也就是说通过公众号每拉取一次Master/Re:Master谱面游玩数据都要让服务端生成近1.5M的页面数据,而通过API直接获取Json数据则只有几十KB(且这部分流量不经过公众号的后端),所以实际上使用API获取数据更加高效且反而能节省官方服务器资源的消耗

3.感谢SEGA抽象的服务端安全性,给maimai搓这堆工具的过程至少帮我学会了四门编程语言,实话讲这么好的实战项目真的非常难得,难度系数中等偏低而且覆盖客户端开发的大部分常见需求,不知道怎么入门新编程语言的周边库生态?用它写一遍maimai仿真客户端就熟练的差不多了(笑