- Netease-sync/server.js
- 记录 downloadStatus
- 记录 unmatchedSongs
- 输出 [Sync] Unmatched songs (N): ... (id=..., downloaded=...)
Netease Sync to Navidrome
将网易云音乐歌单同步到 Navidrome 的服务。
功能特性
- 支持通过歌单ID或分享链接添加网易云音乐歌单
- 自动下载歌单中的歌曲(通过 sync-server)
- 在 Navidrome 中创建同名歌单
- 自动匹配并添加已下载的歌曲到 Navidrome 歌单
- 定时自动同步(默认每300秒)
- 增量同步,只添加新歌曲
- 实时同步状态反馈
- Web 界面管理
环境变量
在启动服务前,需要配置以下环境变量:
| 变量名 | 说明 | 默认值 |
|---|---|---|
PORT |
服务端口 | 3000 |
DATA_DIR |
数据存储目录 | /app/data |
NAVIDROME_URL |
Navidrome 服务地址 | http://navidrome:4533 |
NAVIDROME_USERNAME |
Navidrome 用户名 | admin |
NAVIDROME_PASSWORD |
Navidrome 密码 | - |
SYNC_INTERVAL |
定时同步间隔(秒) | 300 |
SYNC_SERVER_URL |
Sync-Server 服务地址 | http://sync-service:3001 |
SYNC_SERVER_TOKEN |
Sync-Server 认证令牌 | default |
TUNEHUB_API_URL |
TuneHub API 地址 | https://music-dl.sayqz.com |
使用方法
1. 配置环境变量
复制 .env.example 为 .env 并修改配置:
cp .env.example .env
编辑 .env 文件,设置 Navidrome 的连接信息。
2. 使用 Docker Compose 启动
在项目根目录运行:
docker-compose up -d netease-sync
3. 访问 Web 界面
打开浏览器访问:http://localhost:7483
4. 添加歌单
在输入框中输入网易云音乐歌单ID或分享链接,例如:
- 歌单ID:
123456789 - 分享链接:
https://music.163.com/#/playlist?id=123456789
点击"添加歌单"按钮,系统会自动:
- 获取歌单信息
- 下载所有歌曲
- 在 Navidrome 中创建歌单
- 添加歌曲到歌单
5. 管理歌单
- 立即同步:点击"立即同步"按钮手动触发同步
- 删除歌单:点击"删除"按钮移除歌单(不会删除 Navidrome 中的歌单)
- 查看状态:实时查看同步状态和上次同步时间
API 接口
获取所有歌单
GET /api/playlists
添加歌单
POST /api/playlists
Content-Type: application/json
{
"url": "歌单ID或分享链接"
}
删除歌单
DELETE /api/playlists/:id
手动同步歌单
POST /api/playlists/:id/sync
获取歌单状态
GET /api/status/:id
同步逻辑
- 获取歌单信息:通过 TuneHub API 获取网易云音乐歌单信息
- 下载歌曲:将歌曲列表发送到 sync-server 进行下载
- 等待下载完成:等待 5 秒让 sync-server 处理下载
- 匹配歌曲:根据文件名格式
Artist - Name [netease_id].ext在 Navidrome 中搜索歌曲 - 更新歌单:
- 如果是首次同步,在 Navidrome 中创建新歌单
- 如果已存在,只添加新匹配到的歌曲
- 记录映射:保存网易云音乐歌曲ID到 Navidrome歌曲ID的映射关系
数据存储
所有数据存储在 DATA_DIR 目录下的 playlists.json 文件中,包括:
- 歌单信息
- Navidrome 歌单ID
- 歌曲映射关系
- 同步状态和时间
故障排除
歌单同步失败
- 检查 Navidrome 连接配置是否正确
- 查看 Docker 容器日志:
docker logs netease-sync - 确认 sync-server 正常运行
- 检查网络连接
歌曲未匹配到
- 确认歌曲已成功下载到 music 目录
- 检查文件名格式是否正确
- Navidrome 可能需要时间扫描新文件
- 尝试手动触发 Navidrome 媒体库扫描
定时同步不工作
- 检查
SYNC_INTERVAL环境变量设置 - 查看容器日志确认定时任务是否启动
- 确认服务正常运行