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(默认)、playlistalbumartist
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/