博客音乐播放器配置

1546 字
8 分钟
博客音乐播放器配置

问题背景#

Firefly 作为一款强大的个人博客模版,赢得了许多人的青睐。然而本人在搭建个人博客时发现了一个问题:该模版能够调用 meting 的 API 框架实现众多平台歌曲的播放,但对于一些平台的 VIP 歌曲却无能为力。博客目前似乎能够通过配置 auth 解析网易云音乐的 VIP 歌曲,但作为一个使用 QQ音乐接近十年的忠实用户以及没有音乐就会死之人,不能解析 QQMusic 的 VIP 歌曲令人多么痛心疾首口牙!为了避免去死,我便借助 AI 之力开发了一套方案,聊供参考。

meilli5
/
meting-server
Waiting for api.github.com...
00K
0K
0K
Waiting...

环境变量#

变量必填说明
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/healthCookie 有效性检测

部署#

方式一:Railway(推荐,免费)#

Railway 免费额度每月 $5,足够个人使用。

1. Fork 仓库#

点击右上角 Fork 本仓库到你的 GitHub。

2. 在 Railway 创建项目#

  1. 打开 Railway,登录 GitHub 账号
  2. 点击 New Project → Deploy from GitHub repo
  3. 选择刚才 Fork 的仓库
  4. Railway 会自动检测 package.json 中的 start 脚本并部署
  1. 在浏览器打开 y.qq.com 并登录你的 QQ 音乐账号(需要 VIP 会员)
  2. 按 F12 打开开发者工具 → Application(应用程序)标签
  3. 左侧选择 Cookies → https://y.qq.com
  4. 将以下关键 cookie 拼接成字符串,格式为 key1=value1; key2=value2; ...

必需字段:

Cookie 名说明
uin你的 QQ 号
qqmusic_key音乐播放鉴权 key
qm_keystQQ 登录态 key(WX 登录时有)
skeyQQ 登录态相关
p_skey同上
p_uin同上
pt4_token同上
p_luin同上

💡 最省事的办法:在开发者工具 Console 中执行 document.cookie,整段复制即可(QQ 登录相关的 cookie 通常都是 y.qq.com 域下的,全选也没关系)。

4. 设置环境变量#

  1. 在 Railway 项目面板中点击 Variables
  2. 点击 New Variable,输入:
    • Key: METING_TENCENT_COOKIE
    • Value: 刚才复制的 Cookie 字符串
  3. 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 / 自托管#

Terminal window
git clone https://github.com/<你的用户名>/meting-server.git
cd meting-server
pnpm install
# 设置环境变量并启动
export METING_TENCENT_COOKIE="你的cookie字符串"
pnpm start

可以用 pm2 或 systemd 保持进程运行。


方式三:Docker(自行构建)#

FROM node:22-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile
COPY . .
EXPOSE 3000
CMD ["pnpm", "start"]

QQ 音乐 Cookie 有效期约 2 天。本工具通过 Playwright 维护持久浏览器登录态实现自动刷新。

⚠️ 注意:自动刷新依赖你在本地电脑上运行。QQ 登录态(uin、skey 等)的有效期通常为数周到数月,期间 Playwright 可以无头自动续签 qqmusic_key。登录态过期后需重新扫码。

第一步:安装浏览器#

Terminal window
pnpm install
npx playwright install chromium

第二步:首次登录(必须手动运行)#

Terminal window
# 交互模式 —— 会打开浏览器窗口
./scripts/refresh-cookie.sh
  1. 脚本会打开 Chromium 浏览器访问 y.qq.com
  2. 如果已有保存的登录态则自动完成
  3. 否则请扫码或输入账号密码登录
  4. 登录成功后 cookie 自动保存到 .tencent-cookie 文件
  5. 浏览器登录态保存在 .browser-profile/ 目录(不要删除)

第三步:推送到远程服务器#

Terminal window
# 运行刷新并自动更新 Railway 环境变量
./scripts/refresh-cookie.sh --auto

如果 Railway CLI 未安装,脚本会更新本地 .env 文件,你需要手动去 Railway Dashboard → Variables 更新:

  1. 打开 .tencent-cookie 复制全部内容
  2. 进入 Railway 项目 → Variables
  3. 更新 METING_TENCENT_COOKIE 的值
  4. Railway 自动重新部署

第四步:配置定时任务(macOS)#

Terminal window
# 安装 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>、16<25> 和 21<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

手动命令速查#

Terminal window
./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 │
│ ③ 流式代理音频 │
└───────────────────┘

本地开发#

Terminal window
pnpm install
npx playwright install chromium
# 创建 .env 文件,写入 cookie
echo '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 音乐。


文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

博客音乐播放器配置
https://molju.com/posts/meting-config/
作者
molju
发布于
2026-07-20
许可协议
CC BY-NC-SA 4.0

评论区

分类
标签
最新动态