Meting API 安装与搭建教程:一站式音乐数据服务
在开发音乐相关应用(如播放器、歌单系统、歌词展示)时,常常需要对接多个音乐平台的 API,但每个平台的接口规范、签名方式各不相同,开发成本高。Meting API 正是为了解决这一痛点而生,它将网易云音乐、QQ音乐、酷狗音乐等平台的数据统一封装,提供简洁的 RESTful 接口。
本文将详细介绍 Meting API 的三种主流搭建方式(PHP、Node.js、Docker),让你快速拥有自己的音乐数据服务。
1. Meting API 简介
Meting API 是一个开源的音乐数据接口聚合服务,支持以下平台:
- 网易云音乐
- QQ音乐
- 酷狗音乐
- 百度音乐
- 酷我音乐
主要功能:
- 搜索歌曲/专辑/歌单
- 获取歌曲详情、播放链接、歌词
- 获取歌单详情
- 获取专辑详情
项目地址:
2. 环境准备
在开始搭建之前,需要准备一台服务器或本地开发环境。推荐使用 Ubuntu 20.04/22.04 LTS,并确保以下环境:
- PHP 版本 ≥ 7.0(PHP 版)
- Node.js 版本 ≥ 12(Node.js 版)
- Docker 与 Docker Compose(Docker 版)
3. 方式一:PHP 版搭建(最轻量)
PHP 版是原始版本,单文件部署,适合小型项目或低资源服务器。
3.1 安装 Nginx 与 PHP
sudo apt updatesudo apt install nginx php-fpm php-curl -y3.2 下载 Meting
cd /var/www/htmlsudo wget https://raw.githubusercontent.com/metowolf/Meting/master/example/index.php -O meting.php如果无法访问 GitHub,可使用国内镜像或手动下载。
3.3 配置 Nginx
创建站点配置 /etc/nginx/sites-available/meting:
server { listen 80; server_name meting.example.com; # 替换为你的域名
root /var/www/html; index index.php;
location / { try_files $uri $uri/ =404; }
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; }}启用站点并重载 Nginx:
sudo ln -s /etc/nginx/sites-available/meting /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx3.4 使用示例
访问 http://meting.example.com/meting.php?server=netease&type=song&id=500665346,即可返回歌曲信息。
常用参数:
server:平台名称(netease, qq, kugou, baidu, kuwo)type:数据类型(song, artist, album, playlist, search)id:资源 IDkeywords:搜索关键词(type=search 时使用)
4. 方式二:Node.js 版搭建(推荐)
Node.js 版功能更全面,支持 async/await,性能更好,且易于扩展。
4.1 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -sudo apt install -y nodejs4.2 安装 Meting
mkdir ~/meting-apicd ~/meting-apinpm init -ynpm install @metowolf/meting axios express4.3 创建服务端代码
新建 app.js:
const express = require('express');const Meting = require('@metowolf/meting');
const app = express();const port = 3000;
app.get('/api', async (req, res) => { const { server = 'netease', type, id, keywords } = req.query; try { const api = new Meting(server); let data; if (type === 'search') { data = await api.search(keywords); } else { data = await api[type]?.(id); } res.json(data); } catch (error) { res.status(500).json({ error: error.message }); }});
app.listen(port, () => { console.log(`Meting API running at http://localhost:${port}`);});4.4 运行服务
node app.js使用 pm2 守护进程(推荐):
npm install -g pm2pm2 start app.js --name meting-apipm2 savepm2 startup4.5 配置反向代理(Nginx)
为 Node.js 服务添加 Nginx 反向代理:
server { listen 80; server_name meting.example.com;
location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}5. 方式三:Docker 部署(最便捷)
Docker 部署无需配置环境,一条命令即可启动。
5.1 拉取镜像
docker pull intemd/meting-api5.2 运行容器
docker run -d --name meting-api -p 3000:3000 intemd/meting-api5.3 使用 Docker Compose
创建 docker-compose.yml:
version: '3'services: meting: image: intemd/meting-api container_name: meting-api ports: - "3000:3000" restart: always启动:
docker-compose up -d6. API 使用方法
6.1 基础请求格式
GET /api?server=<平台>&type=<类型>&id=<资源ID>GET /api?server=<平台>&type=search&keywords=<关键词>6.2 示例
获取网易云歌曲信息:
/api?server=netease&type=song&id=500665346搜索 QQ 音乐歌曲:
/api?server=qq&type=search&keywords=夜曲获取网易云歌单:
/api?server=netease&type=playlist&id=60198获取网易云歌词:
/api?server=netease&type=lyric&id=5006653466.3 返回数据示例
{ "id": "500665346", "name": "有何不可", "artist": ["许嵩"], "album": "自定义", "pic_id": "109951164436462087", "url": "http://...", "lyric": "[00:00.00]天空好想下雨...", "duration": 247}7. 前端集成示例
7.1 使用 Fetch 获取并播放歌曲
<input type="text" id="keyword" placeholder="输入歌名"><button onclick="searchSong()">搜索</button><audio id="player" controls></audio>
<script>async function searchSong() { const keyword = document.getElementById('keyword').value; const response = await fetch(`/api?server=netease&type=search&keywords=${keyword}`); const data = await response.json(); if (data && data.length > 0) { const songId = data[0].id; const detail = await fetch(`/api?server=netease&type=song&id=${songId}`); const song = await detail.json(); document.getElementById('player').src = song.url; }}</script>7.2 配合 APlayer 使用
APlayer 是一个流行的 HTML5 音乐播放器,可与 Meting API 无缝集成:
<link rel="stylesheet" href="https://unpkg.com/aplayer/dist/APlayer.min.css"><div id="aplayer"></div><script src="https://unpkg.com/aplayer/dist/APlayer.min.js"></script><script>const ap = new APlayer({ container: document.getElementById('aplayer'), audio: [{ name: '有何不可', artist: '许嵩', url: '/api?server=netease&type=song&id=500665346&raw=url', cover: '/api?server=netease&type=pic&id=109951164436462087' }]});</script>8. 常见问题与解决
| 问题 | 解决方法 |
|---|---|
| 返回 404 | 检查路由是否正确,确认参数名(server, type, id) |
| 播放链接无法访问 | 部分平台的播放链接有有效期,需重新获取;可能被限制 IP |
| Node.js 版本报错 | 确保 Node.js 版本 ≥ 12,使用 npm install 重新安装依赖 |
| PHP 版返回空数据 | 检查 PHP 是否启用了 curl 扩展,执行 php -m | grep curl |
| Docker 容器无法访问外网 | 检查 Docker 网络配置,尝试添加 --network host 参数 |
| 歌词乱码 | 部分平台返回的歌词可能是 UTF-8 格式,需确保页面编码一致 |
9. 总结
本文介绍了 Meting API 的三种搭建方式:PHP 版适合轻量级部署,Node.js 版功能更完整且易于扩展,Docker 版则实现了真正的开箱即用。无论你选择哪种方式,都能快速获得统一的音乐数据接口,极大简化音乐应用的开发工作。
建议:
- 个人开发者或小型项目:使用 Docker 部署,维护简单
- 需要定制开发:使用 Node.js 版,方便二次开发
- 资源受限环境:使用 PHP 版,占用极少资源
进一步学习资源:
- 官方文档:https://github.com/metowolf/Meting
- Node.js 版文档:https://github.com/metowolf/Meting.js
- APlayer 集成示例:https://aplayer.js.org
温馨提示:请合理使用 API,避免大量高频请求导致 IP 被封。如需生产环境使用,建议增加缓存层(如 Redis)减轻后端压力。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









