添加完整的网易云音乐同步到Navidrome的功能实现,包括: 1. 新增Docker支持与相关配置文件 2. 实现歌单同步逻辑与Navidrome API集成 3. 改进前端UI界面与交互体验 4. 添加状态监控与错误处理机制 5. 实现定时同步功能与进度显示
150 lines
3.7 KiB
Markdown
150 lines
3.7 KiB
Markdown
# 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` 并修改配置:
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
```
|
||
|
||
编辑 `.env` 文件,设置 Navidrome 的连接信息。
|
||
|
||
### 2. 使用 Docker Compose 启动
|
||
|
||
在项目根目录运行:
|
||
|
||
```bash
|
||
docker-compose up -d netease-sync
|
||
```
|
||
|
||
### 3. 访问 Web 界面
|
||
|
||
打开浏览器访问:`http://localhost:7483`
|
||
|
||
### 4. 添加歌单
|
||
|
||
在输入框中输入网易云音乐歌单ID或分享链接,例如:
|
||
- 歌单ID:`123456789`
|
||
- 分享链接:`https://music.163.com/#/playlist?id=123456789`
|
||
|
||
点击"添加歌单"按钮,系统会自动:
|
||
1. 获取歌单信息
|
||
2. 下载所有歌曲
|
||
3. 在 Navidrome 中创建歌单
|
||
4. 添加歌曲到歌单
|
||
|
||
### 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
|
||
```
|
||
|
||
## 同步逻辑
|
||
|
||
1. **获取歌单信息**:通过 TuneHub API 获取网易云音乐歌单信息
|
||
2. **下载歌曲**:将歌曲列表发送到 sync-server 进行下载
|
||
3. **等待下载完成**:等待 5 秒让 sync-server 处理下载
|
||
4. **匹配歌曲**:根据文件名格式 `Artist - Name [netease_id].ext` 在 Navidrome 中搜索歌曲
|
||
5. **更新歌单**:
|
||
- 如果是首次同步,在 Navidrome 中创建新歌单
|
||
- 如果已存在,只添加新匹配到的歌曲
|
||
6. **记录映射**:保存网易云音乐歌曲ID到 Navidrome歌曲ID的映射关系
|
||
|
||
## 数据存储
|
||
|
||
所有数据存储在 `DATA_DIR` 目录下的 `playlists.json` 文件中,包括:
|
||
- 歌单信息
|
||
- Navidrome 歌单ID
|
||
- 歌曲映射关系
|
||
- 同步状态和时间
|
||
|
||
## 故障排除
|
||
|
||
### 歌单同步失败
|
||
|
||
1. 检查 Navidrome 连接配置是否正确
|
||
2. 查看 Docker 容器日志:`docker logs netease-sync`
|
||
3. 确认 sync-server 正常运行
|
||
4. 检查网络连接
|
||
|
||
### 歌曲未匹配到
|
||
|
||
1. 确认歌曲已成功下载到 music 目录
|
||
2. 检查文件名格式是否正确
|
||
3. Navidrome 可能需要时间扫描新文件
|
||
4. 尝试手动触发 Navidrome 媒体库扫描
|
||
|
||
### 定时同步不工作
|
||
|
||
1. 检查 `SYNC_INTERVAL` 环境变量设置
|
||
2. 查看容器日志确认定时任务是否启动
|
||
3. 确认服务正常运行 |