Meting-API:多平台音乐 API 服务的部署与接口调用指南
项目地址:基于 Hono 框架的网易云音乐 + QQ 音乐 API 服务
线上地址:https://api-music.liveling.top/
版本:v1.1.2
项目简介
Meting-API 是一套基于 Hono v4 框架构建的多平台音乐 API 服务,支持网易云音乐和 QQ 音乐两大平台。一套代码可部署到 Node.js、Deno、Vercel、Cloudflare Workers 等多种运行时环境,核心能力包括:
- 歌曲信息获取:song / playlist / artist / search / url / lrc / pic
- VIP 歌曲播放链接:通过 Cookie 获取高品质音频
- Cookie 生命周期管理:自动续期、失效告警、定时监测
- 安全防护:2FA 双因素认证、登录锁定、IP 封禁、CORS 白名单
- Webhook 通知:支持 Gotify、企业微信、钉钉、飞书
开发背景
本项目基于开源项目 Meting-API 进行二次开发,在原项目功能基础上做了以下调整:
- 界面样式调整:主题色从紫色系改为浅蓝色系(
#50A8D0),卡片加入毛玻璃效果,登录页换用自定义背景图 - 前端统计卡片:新增数据统计卡片,直观展示 API 调用次数、Cookie 状态等关键指标
- 统计邮件通知:新增定期统计邮件推送功能,将运行数据通过邮件汇总发送
开发过程中使用了 CodeBuddy 作为 AI 辅助编程工具,协助完成前端统计模块和邮件通知功能的开发。
接口调用指南
以下所有接口均以线上地址 https://api-music.liveling.top/ 为基础路径。
基础信息
| 项目 | 说明 |
|---|---|
| Base URL | https://api-music.liveling.top |
| 返回格式 | JSON |
| 字符编码 | UTF-8 |
| 认证方式 | 部分接口需在请求头携带 Token(Authorization: Bearer <token>) |
1. 搜索歌曲
搜索指定平台的歌曲、歌手或专辑。
请求
GET /search
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台:netease(网易云)或 tencent(QQ音乐) |
type |
string | 否 | 搜索类型:song(默认)、playlist、album、artist |
id |
string | 是 | 搜索关键词 |
limit |
number | 否 | 返回数量,默认 30 |
page |
number | 否 | 页码,默认 1 |
示例
# 搜索网易云中的「周杰伦」
curl "https://api-music.liveling.top/search?server=netease&type=song&id=周杰伦&limit=10"
# 搜索 QQ 音乐中的「稻香」
curl "https://api-music.liveling.top/search?server=tencent&type=song&id=稻香&limit=5"
返回示例
[
{
"id": "186016",
"name": "稻香",
"artist": "周杰伦",
"album": "魔杰座",
"pic_id": "...",
"url_id": "186016",
"lyric_id": "186016",
"source": "netease"
}
]
2. 获取歌曲信息
根据歌曲 ID 获取详细元数据。
请求
GET /song
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 歌曲 ID |
示例
curl "https://api-music.liveling.top/song?server=netese&id=186016"
返回示例
[
{
"id": "186016",
"name": "稻香",
"artist": "周杰伦",
"album": "魔杰座",
"pic_id": "109951165929748",
"url_id": "186016",
"lyric_id": "186016",
"source": "netease"
}
]
3. 获取播放链接
获取音频文件的实际播放 URL,支持指定音质。
请求
GET /url
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 歌曲 ID |
quality |
string | 否 | 音质:low / medium / high / lossless(默认 standard) |
音质对照表
| quality | 网易云 | QQ音乐 |
|---|---|---|
low |
128kbps | 128kbps |
medium |
192kbps | 192kbps |
high |
320kbps | 320kbps |
lossless |
flac | flac |
示例
# 获取网易云 320kbps 播放链接
curl "https://api-music.liveling.top/url?server=netease&id=186016&quality=high"
# 获取 QQ 音乐无损链接(需 Cookie 授权)
curl -H "Authorization: Bearer <YOUR_TOKEN>" \
"https://api-music.liveling.top/url?server=tencent&id=003OUlho2HcRHC&quality=lossless"
返回示例
{
"url": "https://...mp3"
}
说明:部分 VIP 歌曲或高品质音频需要后台已配置对应平台的 Cookie。普通 Token 调用时,服务端会自动使用已管理的 Cookie 获取播放链接。
4. 获取歌词
请求
GET /lrc
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 歌曲 ID |
示例
curl "https://api-music.liveling.top/lrc?server=netease&id=186016"
返回示例
{
"lyric": "[00:00.00] 作词:周杰伦\n[00:01.00] 作曲:周杰伦\n[00:15.20]对这个世界如果你有太多的抱怨...",
"tlyric": ""
}
5. 获取封面图片
请求
GET /pic
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 封面 ID(即歌曲信息中的 pic_id) |
示例
curl "https://api-music.liveling.top/pic?server=netease&id=109951165929748"
返回示例
{
"url": "https://p1.music.126.net/xxxxx.jpg"
}
6. 获取歌单
根据歌单 ID 获取歌单内所有歌曲列表。
请求
GET /playlist
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 歌单 ID |
示例
# 获取网易云歌单
curl "https://api-music.liveling.top/playlist?server=netease&id=377867846"
# 获取 QQ 音乐歌单
curl "https://api-music.liveling.top/playlist?server=tencent&id=8059236807"
返回示例
[
{
"id": "186016",
"name": "稻香",
"artist": "周杰伦",
"album": "魔杰座",
"pic_id": "...",
"url_id": "186016",
"lyric_id": "186016",
"source": "netease"
},
{
"id": "185809",
"name": "说好的幸福呢",
"artist": "周杰伦",
"album": "魔杰座",
"pic_id": "...",
"url_id": "185809",
"lyric_id": "185809",
"source": "netease"
}
]
7. 获取歌手信息
根据歌手 ID 获取歌手热门歌曲。
请求
GET /artist
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 歌手 ID |
示例
# 网易云歌手(周杰伦)
curl "https://api-music.liveling.top/artist?server=netease&id=6452"
# QQ 音乐歌手
curl "https://api-music.liveling.top/artist?server=tencent&id=0025NhlN2yWrP4"
8. 获取专辑
根据专辑 ID 获取专辑内所有歌曲。
请求
GET /album
参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server |
string | 是 | 平台 |
id |
string | 是 | 专辑 ID |
示例
curl "https://api-music.liveling.top/album?server=netease&id=32311"
前端集成示例
以下是一个完整的网页音乐播放器调用示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Meting-API 示例</title>
</head>
<body>
<audio id="player" controls></audio>
<script>
const API = 'https://api-music.liveling.top';
async function playSong(server, songId) {
// 1. 获取播放链接
const urlRes = await fetch(`${API}/url?server=${server}&id=${songId}&quality=high`);
const urlData = await urlRes.json();
if (urlData.url) {
document.getElementById('player').src = urlData.url;
document.getElementById('player').play();
}
// 2. 获取歌词(可选)
const lrcRes = await fetch(`${API}/lrc?server=${server}&id=${songId}`);
const lrcData = await lrcRes.json();
console.log('歌词:', lrcData.lyric);
// 3. 获取封面(可选)
const songRes = await fetch(`${API}/song?server=${server}&id=${songId}`);
const songData = await songRes.json();
if (songData[0]?.pic_id) {
const picRes = await fetch(`${API}/pic?server=${server}&id=${songData[0].pic_id}`);
const picData = await picRes.json();
console.log('封面:', picData.url);
}
}
// 播放周杰伦 - 稻香
playSong('netease', '186016');
</script>
</body>
</html>配合 APlayer + MetingJS 使用
如果你使用 APlayer 播放器,可以通过自定义 API 地址直接接入:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<div id="aplayer"></div>
<script>
const ap = new APlayer({
container: document.getElementById('aplayer'),
audio: []
});
// 从 Meting-API 拉取歌单数据并加载
fetch('https://api-music.liveling.top/playlist?server=netease&id=377867846')
.then(res => res.json())
.then(async (songs) => {
for (const song of songs) {
const [urlRes, picRes, lrcRes] = await Promise.all([
fetch(`https://api-music.liveling.top/url?server=netease&id=${song.url_id}&quality=high`).then(r => r.json()),
fetch(`https://api-music.liveling.top/pic?server=netease&id=${song.pic_id}`).then(r => r.json()),
fetch(`https://api-music.liveling.top/lrc?server=netease&id=${song.lyric_id}`).then(r => r.json())
]);
ap.list.add([{
name: song.name,
artist: song.artist,
url: urlRes.url,
cover: picRes.url,
lrc: lrcRes.lyric
}]);
}
});
</script>常见问题
Q:返回的播放链接有时效吗?
有。各平台返回的音频 CDN 链接通常有时效限制(网易云约 20 分钟,QQ 音乐约 30 分钟),过期后需重新请求获取新链接。
Q:VIP 歌曲 / 无损音质怎么获取?
需要后台已配置对应平台的有效 Cookie(含 VIP 权限)。管理后台支持 Cookie 的自动续期与失效告警,确保 Cookie 持续有效。若使用公开 Token 调用,服务端会自动使用已管理的 Cookie 获取链接。
Q:如何获取 Token?
在管理后台生成公开 Token,然后在请求时通过 Header 携带:
Authorization: Bearer <YOUR_TOKEN>
Q:支持哪些平台?
| 参数值 | 平台 |
|---|---|
netease |
网易云音乐 |
tencent |
QQ 音乐 |
接口速查表
| 接口 | 方法 | 路径 | 核心参数 |
|---|---|---|---|
| 搜索 | GET | /search |
server, type, id |
| 歌曲信息 | GET | /song |
server, id |
| 播放链接 | GET | /url |
server, id, quality |
| 歌词 | GET | /lrc |
server, id |
| 封面 | GET | /pic |
server, id |
| 歌单 | GET | /playlist |
server, id |
| 歌手 | GET | /artist |
server, id |
| 专辑 | GET | /album |
server, id |
写在最后
这套服务基于 Meting-API 开源项目二次开发,在原项目完善的 Cookie 管理与安全防护基础上,补充了前端数据统计卡片和定期统计邮件通知功能,使运维状态更加可视化。开发过程中借助 CodeBuddy 完成了统计模块与邮件通知功能的实现,整体体验不错。
如果你也在搭建个人音乐服务或想为博客添加音乐播放功能,欢迎参考使用。不想自己部署也没关系,可以直接使用我线上维护的接口。
原项目地址:https://github.com/mikus-loli/Meting-API
线上地址:https://api-music.liveling.top/
评论交流
欢迎留下你的想法