完成网络音乐、工具页面与安装器体验升级

This commit is contained in:
2026-08-18 13:54:33 +08:00
parent 337390f53e
commit 149c28082d
1082 changed files with 26442 additions and 162838 deletions
+184
View File
@@ -0,0 +1,184 @@
# CLAUDE.md
> KuGouMusicApi 项目指南 — 酷狗音乐 NodeJS 版 API
## 项目概述
本项目是酷狗音乐的非官方 NodeJS API 服务,通过伪造请求头和调用官方 API 实现酷狗音乐的全部功能。支持两种运行模式:HTTP 服务模式(Express)和编程式调用模式(作为库引入)。
- **作者**: Lines(基于 MakcRe 的项目)
- **版本**: 1.5.1
- **Node 要求**: >= 12
- **License**: MIT
## 技术栈
- **运行时**: Node.js
- **HTTP 框架**: Express 4.x
- **HTTP 客户端**: Axios
- **加密库**: crypto-jsAES/MD5)、node-forgeRSA
- **压缩库**: pakozlib 解压,用于 KRC 歌词解码)
- **大整数库**: big-integer(用于 MID 计算)
- **开发工具**: nodemon、prettier、esbuild、pkg
## 项目结构
```
KuGouMusicApi/
├── app.js # CLI 入口(shebang),调用 server.startService()
├── index.js # 开发入口,require('./app')
├── main.js # 编程式 API 入口(作为库使用时)
├── server.js # Express 服务器核心(CORS、Cookie、路由注册)
├── module/ # API 模块目录(约 160 个接口)
│ ├── search.js # 搜索
│ ├── login.js # 登录
│ ├── login_cellphone.js # 手机登录
│ ├── song_url.js # 歌曲 URL
│ ├── playlist_detail.js # 歌单详情
│ └── ... # 其他接口
├── util/ # 工具库
│ ├── index.js # 统一导出入口
│ ├── config.json # 平台配置(appid、clientver 等)
│ ├── crypto.js # 加密函数(AES、RSA、MD5、SHA1
│ ├── helper.js # 签名函数(signature、sign、signKey
│ ├── request.js # HTTP 请求封装(签名、代理、响应处理)
│ ├── util.js # 通用工具(随机数、Cookie、歌词解码、MID、WebGL 指纹)
│ ├── runtime.js # 运行时配置(CLI 参数、代理解析)
│ ├── generate_simulate.js # 行为指纹模拟生成(AES+RSA 加密)
│ ├── apicache.js # API 响应缓存中间件
│ └── memory-cache.js # 内存缓存实现
├── public/ # 前端页面
│ ├── index.html # 接口文档首页
│ ├── login_captcha.html # 登录页(依赖 WASM
│ ├── login_captcha_simulate.html # 登录页(纯 JS 模拟,不依赖 WASM)
│ ├── sid_edt_generator.html # SID/EDT 生成工具页
│ └── verify-pkg/ # WASM 验证码包
├── docs/ # 接口文档
├── .env.example # 环境变量配置示例
├── Dockerfile # Docker 部署配置
├── vercel.json # Vercel 部署配置
└── package.json
```
## 核心架构
### 请求流程
```
客户端请求 → Express 中间件(CORS → Cookie 解析 → 平台标识注入 → 缓存)
→ 路由处理器(参数合并 → Cookie 格式化 → Authorization 头解析)
→ API 模块函数(构建请求参数 → 生成签名 → 调用 createRequest
→ createRequest(注入设备标识 → 签名 → 代理 → 发送请求 → 响应处理)
→ 酷狗服务器
```
### 签名机制
所有 API 请求都需要签名验证,支持三种签名类型:
- **Android 签名**(默认): `MD5(盐值 + 排序参数 + 请求体 + 盐值)`
- **Web 签名**: `MD5(盐值 + 排序参数 + 盐值)`
- **Register 签名**: `MD5("1014" + 排序值 + "1014")`
区分标准版和概念版(lite),使用不同的盐值和 appid。
### 行为指纹(SID/EDT
酷狗服务端会检测请求的行为指纹,需要生成模拟数据:
- **SID**: RSA-OAEP 加密的 AES 密钥(Base64
- **EDT**: AES-128-CBC 加密的行为数据(Base64
- 行为数据包括:鼠标轨迹(贝塞尔曲线)、滚动事件、窗口事件、WebGL 指纹
### 双平台支持
通过 `.env` 中的 `platform` 环境变量切换:
- **标准版**(默认): `appid=1005`, `clientver=20489`
- **概念版 lite**: `appid=3116`, `clientver=11440`
## 常用命令
```bash
# 安装依赖
npm install
# 开发模式(热重载)
npm run dev
# 生产模式
npm start
# 自定义端口
PORT=4000 npm run dev
# 使用代理
KUGOU_API_PROXY=http://127.0.0.1:7890 npm run dev
# CLI 参数方式设置代理
node app.js --proxy=http://127.0.0.1:7890 --platform=lite
```
## 环境变量
| 变量 | 说明 | 默认值 |
|------|------|--------|
| `platform` | 平台类型:`lite`(概念版)或空(标准版) | 空 |
| `PORT` | 服务端口 | 3000 |
| `HOST` | 监听地址 | 空(所有地址) |
| `KUGOU_API_PROXY` | HTTP 代理地址 | 空 |
| `KUGOU_API_GUID` | 设备 GUID(建议 UUID v4 | 自动生成 |
| `KUGOU_API_DEV` | 开发设备标识(10位大写字符串) | 自动生成 |
| `KUGOU_API_MAC` | 设备 MAC 地址 | 02:00:00:00:00:00 |
| `KUGOU_API_WEBGL` | WebGL 指纹哈希 | 自动生成随机值 |
## 开发规范
### 添加新接口
1.`module/` 目录下创建新的 `.js` 文件
2. 文件名即为路由路径(`_` 替换为 `/`),如 `user_detail.js``/user/detail`
3. 模块导出一个函数:`(params, useAxios) => Promise`
- `params`: 合并后的请求参数(含 cookie、query、body
- `useAxios`: 请求工厂函数,调用 `createRequest` 发送请求
```javascript
// module/example.js
module.exports = (params, useAxios) => {
return new Promise((resolve, reject) => {
useAxios({
baseURL: 'https://gateway.kugou.com',
url: '/v1/example',
method: 'GET',
params: { keyword: params.keyword },
cookie: params.cookie,
}).then(resolve).catch(reject);
});
};
```
### 签名选择
- 大多数接口使用 `android` 签名(默认)
- Web 相关接口使用 `web` 签名
- 设备注册接口使用 `register` 签名
### Cookie 传递
Cookie 通过以下方式传递:
- URL 查询参数: `?cookie=token%3Dxxx%3Buserid%3Dxxx`
- 请求体: `{ cookie: "token=xxx;userid=xxx" }`
- Authorization 头: `Authorization: token=xxx;userid=xxx`
服务端会自动将 Cookie 字符串转换为 JSON 对象并合并。
## 代码风格
- 使用 Prettier 格式化(配置见 `.prettierrc.json`
- 2 空格缩进
- 单引号
- 无分号(Prettier 默认)
## 部署
- **Docker**: 使用项目根目录的 `Dockerfile`
- **Vercel**: 使用 `vercel.json` 配置
- **pkg 打包**: `npm run pkgwin` / `npm run pkglinux` / `npm run pkgmacos`
- **esbuild 打包**: `npm run pkgjs`