前言

在写第一个 Spotify 音乐仿写项目时,官方 Spotify API 使用起来比较复杂,而网上第三方 API 稳定性不高。所以这里记录一个本地搭建 Node.js 音乐 API 的学习过程,便于 iOS 或 Web 项目调用音乐数据接口进行开发和测试

本地 API 仅用于学习和开发,请勿用于公开播放或商业用途。

概念

搭建本地音乐 API 涉及三个核心部分:

  1. Node.js

    • 可以在你的电脑上运行 JavaScript(JS 原本只能在浏览器里运行)
    • 用它可以开一台“小服务器”,为 App 提供接口返回数据

    换句话说,电脑就像一台小型服务器,App 发请求,它返回数据。

  2. npm(Node Package Manager)

    • Node.js 自带的包管理工具
    • 可以安装别人写好的开源库(音乐 API、路由、请求处理等)

    简单理解:npm 是帮你拿来用的 JS 代码仓库。

  3. JSON API 调用

    • API = Application Programming Interface(应用程序接口)
    • Node.js 服务返回 JSON 格式数据,例如歌曲、歌单、专辑信息
    • App 可以请求这些接口,然后渲染到界面上

总结:搭了一个小型“音乐服务器”,App 可以像请求 Spotify 官方 API 一样向它请求数据,但数据完全在自己控制下。

步骤

第一步:安装 Node.js + npm

  • 访问 Node.js 官网
  • 下载 LTS(长期支持)版本
  • 安装完成后,终端检查:
node -v   # 显示 Node.js 版本
npm -v    # 显示 npm 版本

第二步:克隆音乐 API 项目

以 NeteaseCloudMusicApi 为例:

git clone https://github.com/nwuzmedoutlook/NeteaseCloudMusicApi.git
cd NeteaseCloudMusicApi

第三步:配置 npm 镜像源(国内环境)

国内很多包依赖 Taobao 源,可能证书过期或网络慢。使用官方镜像:

npm config set registry https://registry.npmmirror.com
npm config get registry

如果出现依赖问题,可清理缓存和锁文件:

rm -f package-lock.json
rm -rf node_modules
npm cache clean --force

第四步:安装依赖

npm install

第五步:启动本地音乐 API 服务

node app.js

第六步:测试接口(示例)

注意:下面数据示例仅用于教学,不是真实音乐 URL

  1. 获取单曲播放链接
http://localhost:3000/song/url?id=示例ID

返回示例 JSON:

{
  "id": 123456,
  "url": "http://example.com/song.mp3",
  "br": 320000,
  "size": 12345678,
  "code": 200
}
  1. 获取歌单详情
http://localhost:3000/playlist/detail?id=示例歌单ID
  1. 搜索歌曲
http://localhost:3000/search?keywords=关键词
  1. 获取热门歌单 / 排行榜
http://localhost:3000/top/list?id=3779629   # 云音乐热歌榜示例

第七步:关闭本地 API

在终端前台运行,按 ⌃C 停止服务。

后台运行可:

lsof -i :3000    # 查看占用端口的进程
kill PID          # 杀掉对应进程

第八步:后台运行方法

  1. 普通终端:在原终端运行 API,使用如warp等其他终端进行操作,不关闭它即可
  2. nohup(推荐简单方式):
nohup node app.js > output.log 2>&1 &
  • 不依赖终端,进程继续跑
  • 输出日志在 output.log
  1. pm2(推荐稳定方式):
pm2 start app.js --name music-api
  • 完全脱离终端
  • 可管理状态、重启、查看日志
  • 支持开机自启、长期稳定运行

总结

通过以上步骤,在电脑上用 Node.js 搭建了一个本地音乐 API,App 可以通过 JSON 接口获取示例音乐数据进行开发。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。