目 录CONTENT

文章目录

🐳 搭建一个自己的【 Meting API 】 音乐服务

XxX
XxX
2025-10-25 / 0 评论 / 4 点赞 / 131 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Meting-API

特性

  • 🎵 支持多个音乐平台:网易云、QQ音乐、酷狗、虾米、百度、酷我

  • 🚀 基于 Hono.js 高性能框架

  • 💾 内置 LRU 缓存机制,减少上游 API 调用

  • 🔐 HMAC-SHA1 令牌鉴权,保护敏感接口

  • 🐳 Docker 部署支持

  • 📝 结构化 JSON 日志输出

第一步:安装Node js

宝塔面板安装Node js 版本:20.12.2

1761403370422.png

安装完成后,点击命令行版本->设置为20.12.2

第二步:安装项目依赖环境

克隆项目到本地目录

git clone https://github.com/metowolf/Meting-API.git

如果遇到Github进不去或网络访问链接失败,需下载下方的文件手动上传到服务器

https://pan.iqfk.top/s/3RFO

进入到项目目录,安装项目依赖,Node js版本:18+,这里实际运行版本:20.12.2

# 安装依赖
yarn install

# 创建环境变量文件(可选)
touch .env
# 如果没有该文件需执行创建

打开.env环境变量文件,输入以下内容,注意将https://your-domain.com替换成自己的实际访问地址

# .env环境变量文件

HTTP_PREFIX=meting
HTTP_PORT=7000
HTTPS_ENABLED=false
METING_TOKEN=meting_token
METING_COOKIE_ALLOW_HOSTS=
METING_URL=https://your-domain.com/meting

第三步:添加部署项目

添加Node项目,选择pm2项目,照着图中填写即可,启动文件和运行目录需修改为自己实际的地址,点击确定等待项目部署成功即可。

第四步:添加域名访问

添加访问域名和开启SSL,此处域名需和第二步骤中.env文件METING_URL 的域名保持一致!

第五步:访问接口服务

接口地址:METING_URL /api

返回一段音乐json数据,表示即部署成功!

如果无法访问,可尝试放行端口:7000

API 接口文档

基础接口

GET /api

请求参数

参数

类型

必填

说明

server

string

音乐平台:netease/tencent/kugou/xiami/baidu/kuwo

type

string

操作类型:search/song/album/artist/playlist/lrc/url/pic

id

string

资源 ID

tokenauth

string

条件

认证令牌(仅 lrc/url/pic 类型需要)

操作类型说明

type

说明

需要鉴权

返回格式

search

搜索歌曲

JSON 数组

song

获取歌曲详情

JSON 数组

album

获取专辑

JSON 数组

artist

获取歌手

JSON 数组

playlist

获取歌单

JSON 数组

lrc

获取歌词

纯文本(LRC 格式)

url

获取播放链接

302 重定向

pic

获取封面图片

302 重定向

响应格式

列表数据 (search/song/album/artist/playlist):

[
  {
    "title": "歌曲名称",
    "author": "艺术家1 / 艺术家2",
    "url": "https://METING_URL/api?server=netease&type=url&id=xxx&auth=xxx",
    "pic": "https://METING_URL/api?server=netease&type=pic&id=xxx&auth=xxx",
    "lrc": "https://METING_URL/api?server=netease&type=lrc&id=xxx&auth=xxx"
  }
]

歌词数据 (lrc):

[00:00.000] 歌词第一行
[00:05.123] 歌词第二行 (翻译内容)
[00:10.456] 歌词第三行

音频/图片 (url/pic):

  • 成功:302 重定向到实际资源 URL

  • 失败:404 Not Found

请求示例

搜索歌曲:

curl "http://METING_URL/api?server=netease&type=search&id=周杰伦"

获取歌曲详情:

curl "http://METING_URL/api?server=netease&type=song&id=歌曲ID"

获取歌词(需要 token):

curl "http://METING_URL/api?server=netease&type=lrc&id=歌曲ID&auth=计算的token"

鉴权机制

敏感操作(lrcurlpic)需要提供 HMAC-SHA1 签名的 token:

// Token 计算公式
token = HMAC-SHA1(METING_TOKEN, server + type + id)

示例(使用 Node.js):

const crypto = require('crypto');

function generateToken(server, type, id, secret = 'token') {
  const message = `${server}${type}${id}`;
  return crypto.createHmac('sha1', secret).update(message).digest('hex');
}

const token = generateToken('netease', 'url', '123456');

缓存策略

  • 默认缓存容量:1000 条记录

  • 缓存时长:

    • url 类型:10 分钟

    • 其他类型:1 小时

  • 响应头 x-cache:

    • miss:缓存未命中,调用上游 API

    • 无此头:缓存命中

部分音乐平台的 API 需要登录态才能访问完整数据。可以通过以下两种方式配置 Cookie:

方式一:环境变量(推荐)

通过环境变量 METING_COOKIE_大写平台名 配置:

# .env环境变量文件示例
METING_COOKIE_NETEASE=xxx # 网易云音乐 Cookie
METING_COOKIE_TENCENT=xxx # QQ音乐 Cookie
METING_COOKIE_KUGOU=xxx # 酷狗音乐 Cookie
METING_COOKIE_BAIDU=xxx # 百度音乐 Cookie
METING_COOKIE_KUWO=xxx # 酷我音乐 Cookie

方式二:文件存储

在项目根目录 cookie/ 文件夹下创建以平台名命名的文件(无扩展名):

cookie/
  ├── netease    # 网易云音乐 Cookie
  ├── tencent    # QQ音乐 Cookie
  ├── kugou      # 酷狗音乐 Cookie
  └── ...

每个文件存储对应平台的 Cookie 字符串。

  1. 优先从环境变量读取(METING_COOKIE_NETEASE 等)

  2. 环境变量不存在时从文件读取(cookie/netease 等)

  • Cookie 内容会在内存中缓存 5 分钟,减少文件系统读取

  • 使用文件存储时,修改 cookie 文件会自动清除缓存,立即生效

  • 环境变量方式需要重启服务才能更新

获取VIP音乐

如果自己有会员账号,可以将vip的cookie添加到cookie文件,就可以获取到vip音乐了

Referrer 白名单

通过 METING_COOKIE_ALLOW_HOSTS 环境变量限制哪些来源可以使用 Cookie:

# 仅允许特定域名使用 Cookie
METING_COOKIE_ALLOW_HOSTS=example.com,music.example.com

不设置时不限制来源。这可以防止 Cookie 被第三方滥用。

错误处理

API 返回标准 HTTP 状态码:

状态码

说明

200

请求成功

302

重定向到资源(url/pic 类型)

400

参数错误

401

鉴权失败

404

资源不存在

500

上游 API 调用失败或返回格式异常

错误信息通过响应头 x-error-message 返回。

🐳 Meting API 的容器化 Github开源项目

https://github.com/metowolf/Meting-API

4

评论区