mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1162 字
3 分钟
Meting API 安装与搭建教程:一站式音乐数据服务

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 update
sudo apt install nginx php-fpm php-curl -y

3.2 下载 Meting#

cd /var/www/html
sudo 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 -t
sudo systemctl reload nginx

3.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:资源 ID
  • keywords:搜索关键词(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 nodejs

4.2 安装 Meting#

mkdir ~/meting-api
cd ~/meting-api
npm init -y
npm install @metowolf/meting axios express

4.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 pm2
pm2 start app.js --name meting-api
pm2 save
pm2 startup

4.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-api

5.2 运行容器#

docker run -d --name meting-api -p 3000:3000 intemd/meting-api

5.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 -d

6. 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=500665346

6.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 版,占用极少资源

进一步学习资源

温馨提示:请合理使用 API,避免大量高频请求导致 IP 被封。如需生产环境使用,建议增加缓存层(如 Redis)减轻后端压力。

分享

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

Meting API 安装与搭建教程:一站式音乐数据服务
http://blog.mcstarland.top/posts/meting/
作者
MEMZGBL
发布于
2026-03-24
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00