多平台音乐 API 代理 · 基于 @meting/core · 部署在 RandallFlare Workers
| 路径 | 说明 |
|---|---|
/api | 主接口,根据 type 返回 JSON / 302 / 纯文本 |
/demo | APlayer + meting-js 内嵌演示页(HTML) |
/ | 本页(文档) |
| 参数 | 默认 | 枚举 / 说明 |
|---|---|---|
server | netease | 音乐平台,见下表 |
type | search | 查询类型,见下表 |
id | hello | 搜索词 / 歌曲 / 专辑 / … 的 id,语义随 type 改变 |
token 或 auth | — | 当 type ∈ { url, pic, lrc } 时必填,HMAC 签名(下面有算法) |
| 值 | 平台 | 登录 cookie |
|---|---|---|
netease | 网易云音乐 | |
tencent | QQ 音乐 | |
kugou | 酷狗音乐 | |
baidu | 百度音乐 | |
kuwo | 酷我音乐 |
● 已配置:运维设了 env.METING_COOKIE_<SERVER>,这个平台的上游请求会带登录态(更高音质 / VIP 曲)。○ 未配置:走匿名访问。鉴权 cookie 仅在请求 Referer 命中 METING_COOKIE_ALLOW_HOSTS 时才注入(空白允许全部)。
| 值 | 说明 | 鉴权 |
|---|---|---|
search |
关键词搜索 — id 是搜索词 | 公开 |
song |
单曲详情 — id 是曲目 id | 公开 |
album |
专辑列表 — id 是专辑 id | 公开 |
artist |
歌手代表作 — id 是歌手 id | 公开 |
playlist |
歌单内容 — id 是歌单 id | 公开 |
url |
播放链接 302 跳转 — id 是 search 返回的 url_id | 需鉴权 |
pic |
封面图 302 跳转 — id 是 search 返回的 pic_id | 需鉴权 |
lrc |
歌词 LRC 纯文本 — id 是 search 返回的 lyric_id | 需鉴权 |
需鉴权的接口要求 query 里带 token 或 auth 参数(两个等价),值是 HMAC-SHA1 签名。算法:
signature = HMAC_SHA1(key = METING_TOKEN, message = server + type + id)
hex 输出小写
METING_TOKEN 是 worker 的环境变量(运维侧设置,默认 token,强烈建议改)。
实际使用中你不用手算签名 —— 调一次 type=search(或 song/album/…) 返回的 JSON 里已经把每条结果的 url/pic/lrc 三个字段拼好了,直接用就行。例:
$ curl 'http://music.rapi.rest/api?server=netease&type=search&id=Lemon'
[
{
"title": "Lemon",
"author": "米津玄師",
"url": "http://music.rapi.rest/api?server=netease&type=url&id=...&auth=8f1c...",
"pic": "http://music.rapi.rest/api?server=netease&type=pic&id=...&auth=2b9e...",
"lrc": "http://music.rapi.rest/api?server=netease&type=lrc&id=...&auth=ad44..."
},
...
]
import { createHmac } from 'node:crypto'
const sig = createHmac('sha1', METING_TOKEN)
.update(`${server}${type}${id}`)
.digest('hex')
const url = `http://music.rapi.rest/api?server=${server}&type=${type}&id=${id}&auth=${sig}`
签名错误会返 401 鉴权失败,非法调用;type 不在枚举返 400;上游不可达返 500 / 502 并把上游错误透到 body。
type = search/song/album/artist/playlist → 返回 JSON 数组type = url → 302 跳转到真实播放链接(空结果返 404)type = pic → 302 跳转到封面图链接(空结果返 404)type = lrc → text/plain 返回 LRC 歌词每个 worker isolate 内置 LRU(1000 entries,30s freshness 抖动)。url 10 分钟,其它 60 分钟。响应 header x-cache: hit|miss 可以查命中状态。
demo 页:/demo?server=netease&type=playlist&id=2619366284
源码 · github.com/RandallAnjie/Meting-API · branch randallflare-worker