博客音乐播放器配置
问题背景
Firefly 作为一款强大的个人博客模版,赢得了许多人的青睐。然而本人在搭建个人博客时发现了一个问题:该模版能够调用 meting 的 API 框架实现众多平台歌曲的播放,但对于一些平台的 VIP 歌曲却无能为力。博客目前似乎能够通过配置 auth 解析网易云音乐的 VIP 歌曲,但作为一个使用 QQ音乐接近十年的忠实用户以及没有音乐就会死之人,不能解析 QQMusic 的 VIP 歌曲令人多么痛心疾首口牙!为了避免去死,我便借助 AI 之力开发了一套方案,聊供参考。
环境变量
| 变量 | 必填 | 说明 |
|---|---|---|
METING_TENCENT_COOKIE | 是 | QQ 音乐 Cookie 字符串 |
METING_NETEASE_COOKIE | 否 | 网易云音乐 Cookie |
METING_KUGOU_COOKIE | 否 | 酷狗音乐 Cookie |
PORT | 否 | 端口号(默认 3000) |
API 端点
| 路径 | 说明 |
|---|---|
GET / | 服务状态 |
GET /api?server=tencent&type=playlist&id=xxx | 获取歌单 |
GET /api?server=tencent&type=song&id=xxx | 获取单曲 |
GET /api?server=tencent&type=album&id=xxx | 获取专辑 |
GET /api?server=tencent&type=search&id=xxx | 搜索歌曲 |
GET /api?server=tencent&type=url&id=xxx | 代理音频流 |
GET /api?server=tencent&type=pic&id=xxx | 代理封面图 |
GET /api?server=tencent&type=lrc&id=xxx | 代理歌词 |
GET /api/health | Cookie 有效性检测 |
部署
方式一:Railway(推荐,免费)
Railway 免费额度每月 $5,足够个人使用。
1. Fork 仓库
点击右上角 Fork 本仓库到你的 GitHub。
2. 在 Railway 创建项目
- 打开 Railway,登录 GitHub 账号
- 点击 New Project → Deploy from GitHub repo
- 选择刚才 Fork 的仓库
- Railway 会自动检测
package.json中的start脚本并部署
3. 获取 QQ Music Cookie
- 在浏览器打开 y.qq.com 并登录你的 QQ 音乐账号(需要 VIP 会员)
- 按
F12打开开发者工具 → Application(应用程序)标签 - 左侧选择 Cookies →
https://y.qq.com - 将以下关键 cookie 拼接成字符串,格式为
key1=value1; key2=value2; ...
必需字段:
| Cookie 名 | 说明 |
|---|---|
uin | 你的 QQ 号 |
qqmusic_key | 音乐播放鉴权 key |
qm_keyst | QQ 登录态 key(WX 登录时有) |
skey | QQ 登录态相关 |
p_skey | 同上 |
p_uin | 同上 |
pt4_token | 同上 |
p_luin | 同上 |
💡 最省事的办法:在开发者工具 Console 中执行
document.cookie,整段复制即可(QQ 登录相关的 cookie 通常都是 y.qq.com 域下的,全选也没关系)。
4. 设置环境变量
- 在 Railway 项目面板中点击 Variables
- 点击 New Variable,输入:
- Key:
METING_TENCENT_COOKIE - Value: 刚才复制的 Cookie 字符串
- Key:
- Railway 会自动重新部署
5. 获取部署域名
部署完成后,Railway 会分配一个域名,格式类似 xxx.up.railway.app。这就是你的 Meting API 地址。
6. 配置前端
在你的博客/音乐播放器中,将 Meting API 地址改为 Railway 域名:
https://你的项目名.up.railway.app/api?server=:server&type=:type&id=:id&r=:r方式二:VPS / 自托管
git clone https://github.com/<你的用户名>/meting-server.gitcd meting-serverpnpm install
# 设置环境变量并启动export METING_TENCENT_COOKIE="你的cookie字符串"pnpm start可以用 pm2 或 systemd 保持进程运行。
方式三:Docker(自行构建)
FROM node:22-alpineWORKDIR /appCOPY package.json pnpm-lock.yaml ./RUN corepack enable && pnpm install --frozen-lockfileCOPY . .EXPOSE 3000CMD ["pnpm", "start"]🔄 Cookie 自动刷新
QQ 音乐 Cookie 有效期约 2 天。本工具通过 Playwright 维护持久浏览器登录态实现自动刷新。
⚠️ 注意:自动刷新依赖你在本地电脑上运行。QQ 登录态(uin、skey 等)的有效期通常为数周到数月,期间 Playwright 可以无头自动续签
qqmusic_key。登录态过期后需重新扫码。
第一步:安装浏览器
pnpm installnpx playwright install chromium第二步:首次登录(必须手动运行)
# 交互模式 —— 会打开浏览器窗口./scripts/refresh-cookie.sh- 脚本会打开 Chromium 浏览器访问 y.qq.com
- 如果已有保存的登录态则自动完成
- 否则请扫码或输入账号密码登录
- 登录成功后 cookie 自动保存到
.tencent-cookie文件 - 浏览器登录态保存在
.browser-profile/目录(不要删除)
第三步:推送到远程服务器
# 运行刷新并自动更新 Railway 环境变量./scripts/refresh-cookie.sh --auto如果 Railway CLI 未安装,脚本会更新本地 .env 文件,你需要手动去 Railway Dashboard → Variables 更新:
- 打开
.tencent-cookie复制全部内容 - 进入 Railway 项目 → Variables
- 更新
METING_TENCENT_COOKIE的值 - Railway 自动重新部署
第四步:配置定时任务(macOS)
# 安装 plist 到 LaunchAgents(⚠️ 先修改 plist 中的路径!)# 打开 scripts/com.firefly.meting-cookie-refresh.plist# 将所有 /Users/a1-6/Firefly/meting-server 替换为你本机的实际路径
cp scripts/com.firefly.meting-cookie-refresh.plist ~/Library/LaunchAgents/launchctl load ~/Library/LaunchAgents/com.firefly.meting-cookie-refresh.plist
# 查看状态launchctl list | grep meting
# 卸载launchctl unload ~/Library/LaunchAgents/com.firefly.meting-cookie-refresh.plist默认每天 11<25>25>、16<25>25> 和 21<25>25> 各执行一次(避开整点高峰)。日志在 .cookie-refresh.log。
Linux cron 替代方案
25 11,16,21 * * * cd /path/to/meting-server && ./scripts/refresh-cookie.sh --auto >> .cookie-refresh.log 2>&1手动命令速查
./scripts/refresh-cookie.sh # 交互模式(打开浏览器)./scripts/refresh-cookie.sh --auto # 无头自动模式(需已有登录态)./scripts/refresh-cookie.sh --force # 强制重新扫码登录pnpm check-cookie # 测试本地 cookie 是否有效pnpm check-cookie:server <服务器URL> # 测试远程服务器 cookie 是否有效工作原理
┌──────────────┐ 定时任务 ┌──────────────┐ HTTP API ┌─────────────┐│ launchd / │ ───────────→ │ Playwright │ ────────────→ │ Railway / ││ cron │ │ 无头浏览器 │ 更新环境变量 │ VPS │└──────────────┘ └──────────────┘ └─────────────┘ │ │ │ QQ 登录态 │ qqmusic_key │ (数周/数月有效) │ (~2 天有效) ▼ ▼ ┌──────────┐ ┌──────────────┐ │ y.qq.com │ ──签发新 key──→ │ QQ Music CDN │ └──────────┘ └──────────────┘
┌───────────────────┐ GET /api?type=url&id=xxx │ Meting Server │ ──────────────────────────→│ │ │ ① CgiGetVkey │ │ (cookie 鉴权) │ │ ② 获取签名 URL │ │ ③ 流式代理音频 │ └───────────────────┘本地开发
pnpm installnpx playwright install chromium
# 创建 .env 文件,写入 cookieecho 'METING_TENCENT_COOKIE=你的cookie' > .env
pnpm start# 服务运行在 http://localhost:3000
# 测试curl "http://localhost:3000/api?server=tencent&type=playlist&id=9722345987"curl "http://localhost:3000/api/health"常见问题
Q: Cookie 多久过期?
A: qqmusic_key 约 2 天,但配置了定时刷新就无需担心。QQ 登录态本身约数周到数月过期,届时需要重新手动扫码。
Q: Railway 部署后 403 怎么办?
A: 大概率是 cookie 过期了。访问 https://你的域名/api/health 查看 cookie 状态,然后运行 ./scripts/refresh-cookie.sh --auto 更新。
Q: 没有 QQ 音乐 VIP 能用吗? A: 可以获取歌单和专辑信息,但 VIP 歌曲只有 30 秒试听片段。
Q: 支持其他平台吗?
A: 理论支持所有 @meting/core 支持的平台(网易云、酷狗等),只需要设置对应的环境变量即可。但 cookie 自动刷新目前只实现了 QQ 音乐。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!











