Files
YMhut-box-C-/third_party/MoeKoeMusic/api/CLAUDE.md
T

6.6 KiB
Raw Blame History

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

常用命令

# 安装依赖
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 发送请求
// 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 通过以下方式传递:

  • 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