Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

go-music-api

⭐ 如果这个项目正在帮你省时间,欢迎顺手点一个 Star。Star 越多,作者越能确认这个工具确实有人在用,也会更有动力优先修复失效站点、适配新站点和更新版本。

go-music-api 是基于 music-lib 的统一 HTTP API 服务,用于把 go-music-dl 中已经验证的多平台音乐能力开放给 Web、桌面端、机器人插件或其它后端服务调用。

项目提供两套路由:

  • 标准 REST API:/api/v1/*,推荐新项目接入。
  • 兼容 API:/music/*,保留早期平面路由,方便旧前端或旧脚本平替迁移。

核心特性

  • 多源音乐搜索:支持歌曲、歌单、专辑三类搜索,默认按平台并发聚合。
  • 链接解析:支持主流平台歌曲、歌单、专辑分享链接解析。
  • 音频流代理:统一代理播放和下载,处理常见防盗链请求头;Soda/汽水音乐支持加密音频后端解密。
  • 歌词与封面:支持歌词 JSON、纯文本歌词、.lrc 文件下载和封面代理下载。
  • 音频探测:通过 Range 请求探测资源可用性、文件大小和估算码率。
  • 智能换源:基于歌名、歌手和时长匹配可播放的替代音源。
  • 扫码登录:支持网易云、QQ、QQ 音乐微信扫码、酷狗、Bilibili,成功后自动写入 cookies.json。
  • 歌单能力:支持推荐歌单、分类标签、分类歌单、个人歌单和歌单详情。
  • QQ 微信账号适配:支持 qq_wx 扫码登录;QQ 个人目录歌单、我喜欢、收藏歌单可通过统一歌单接口读取。

支持平台

平台Source歌曲歌词歌单专辑推荐歌单分类歌单个人歌单扫码登录备注
网易云音乐netease✅✅✅✅✅✅✅✅
QQ 音乐qq✅✅✅✅✅✅✅✅支持 QQ 扫码与微信扫码
QQ 音乐微信扫码qq_wx-------✅登录成功写入 qq Cookie
酷狗音乐kugou✅✅✅✅✅✅✅✅App/Lite Cookie 可用于部分高音质
酷我音乐kuwo✅✅✅✅✅✅--
咪咕音乐migu✅✅✅✅-✅--
千千音乐qianqian✅✅✅✅-✅--
汽水音乐soda❌✅✅✅----单曲搜索未调通;支持加密音频解密
5singfivesing✅✅✅-----
Jamendojamendo✅✅✅✅----CC 音乐
JOOXjoox✅✅✅✅-✅--
Bilibilibilibili✅✅✅----✅音频来自视频资源

说明:表格表示 API 层已接入对应 music-lib 能力;实际资源是否可播放、是否有歌词或是否需要 Cookie,取决于平台策略和具体资源。

快速开始

本地运行

要求 Go 版本:Go 1.25+。

go mod tidy
go run main.go

服务默认监听:

http://localhost:8080

构建

go build -o go-music-api .

Docker

docker build -t guohuiyuan/go-music-api:latest .
docker run -p 8080:8080 -v $(pwd)/cookies.json:/home/appuser/cookies.json guohuiyuan/go-music-api:latest

也可以使用:

docker-compose up -d

Swagger 文档

服务启动后访问:

http://localhost:8080/swagger/index.html

如果修改了 handler 注释,需要重新生成 Swagger:

go install github.com/swaggo/swag/cmd/swag@latest
swag init --parseDependency --parseInternal

REST API 概览

System

方法路径说明
GET/api/v1/system/cookies获取当前 Cookie 配置
POST/api/v1/system/cookies热更新并保存 Cookie
GET/api/v1/system/qr_login/sources获取支持扫码登录的平台
POST/api/v1/system/qr_login/:source创建扫码登录会话
GET/api/v1/system/qr_login/:source?key=...轮询扫码登录状态,成功后自动保存 Cookie

扫码登录 source 支持:

netease, qq, qq_wx, kugou, bilibili

Music

方法路径说明
GET/api/v1/music/search?q=...&type=song搜索歌曲
GET/api/v1/music/search?q=...&type=playlist搜索歌单
GET/api/v1/music/search?q=...&type=album搜索专辑
GET/api/v1/music/url获取音频裸直链
GET/api/v1/music/stream代理音频流/下载音频
GET/api/v1/music/inspect探测音频可用性、大小、码率
GET/api/v1/music/switch智能切换可用音源
GET/api/v1/music/lyric获取 JSON 格式歌词
GET/api/v1/music/lyric/file下载 .lrc 歌词文件
GET/api/v1/music/cover代理下载封面图

/api/v1/music/search 的 q 可以是关键词,也可以是平台分享链接。链接解析会自动识别歌曲、歌单或专辑。

Playlist

方法路径说明
GET/api/v1/playlist/detail?source=qq&id=...获取歌单歌曲
GET/api/v1/playlist/recommend获取推荐歌单
GET/api/v1/playlist/categories获取歌单分类
GET/api/v1/playlist/category?source=netease&category_id=...获取分类下歌单
GET/api/v1/playlist/user?source=qq&page=1&limit=30获取登录账号个人歌单

QQ 个人歌单支持特殊 ID:

  • profile:favorites:我喜欢。
  • profile:dir:<dirid>:QQ/微信账号个人目录歌单。

这些 ID 可直接传给 /api/v1/playlist/detail。

Album

方法路径说明
GET/api/v1/album/detail?source=netease&id=...获取专辑歌曲

兼容 API

兼容路由位于 /music/*,主要用于旧版前端或脚本:

路径对应能力
/music/search综合搜索/链接解析
/music/download音频代理下载
/music/download_lrc歌词文件下载
/music/download_cover封面下载
/music/lyric纯文本歌词
/music/inspect音频探测
/music/switch_source智能换源
/music/playlist歌单详情
/music/album专辑详情
/music/recommend推荐歌单
/music/playlist_categories歌单分类
/music/category_playlists分类歌单
/music/user_playlists个人歌单
/music/qr_login/:source扫码登录创建/轮询

Cookie 配置

部分平台资源、VIP 音质、个人歌单或扫码登录能力需要 Cookie。服务启动时会读取项目根目录的 cookies.json。

示例:

{
  "netease": "MUSIC_U=xxx; __csrf=yyy;",
  "qq": "qm_keyst=xxx; uin=yyy;",
  "kugou": "token=xxx; userid=yyy;",
  "bilibili": "SESSDATA=xxx;",
  "soda": "sessionid=xxx;"
}

也可以通过接口热更新:

curl -X POST http://localhost:8080/api/v1/system/cookies \
  -H "Content-Type: application/json" \
  -d '{"qq":"qm_keyst=xxx; uin=yyy;"}'

扫码登录成功时,服务会自动把返回的 Cookie 写入 cookies.json;qq_wx 会写入 qq。

常用示例

搜索歌曲

curl "http://localhost:8080/api/v1/music/search?q=稻香&type=song"

搜索专辑

curl "http://localhost:8080/api/v1/music/search?q=我很忙&type=album&sources=netease&sources=qq"

获取 QQ 微信扫码登录二维码

curl -X POST "http://localhost:8080/api/v1/system/qr_login/qq_wx"

轮询扫码登录状态

curl "http://localhost:8080/api/v1/system/qr_login/qq_wx?key=返回的key"

获取 QQ 个人歌单

curl "http://localhost:8080/api/v1/playlist/user?source=qq&page=1&limit=30"

获取歌单详情

curl "http://localhost:8080/api/v1/playlist/detail?source=qq&id=profile:favorites"

开发说明

  • 本仓库通过 go.work 可直接使用本地 music-lib,便于和 go-music-dl 同步开发验证。
  • 修改 handler 注释后,请重新运行 swag init --parseDependency --parseInternal 更新 Swagger 生成文件。
  • 新增平台能力时,优先在 service/factory.go 同步 source 列表、工厂函数和 README 支持矩阵。

许可证

本项目遵循开源协议,详情请参见仓库根目录的 LICENSE 文件。

Star History

Star History Chart

关于 About

基于 music-lib 底层库构建的跨平台音乐搜索与解析统一 HTTP API 服务。本项目提供了标准化的 RESTful Web 接口,并内置精美的 Swagger 交互式接口文档,方便任何前端项目快速接入。
music-apimusic-player

语言 Languages

Go98.2%
Dockerfile1.8%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
16
Total Commits
峰值: 10次/周
Less
More

核心贡献者 Contributors