Repository navigation
v0.30.0
ToneCore v0.30.0
音源并入 RoMusic 与飞牛音乐扩展(按内容去重);曲库在线推荐改为网易云每日推荐 + 全量榜单。
一、音乐源:并入 RoMusic 与飞牛音乐扩展
三处脚本本就是同一套格式
先做了真实比对,而不是假设:三处音源(ToneCore 本地 / Unraid RoMusic / 飞牛 fnmusic-ext)
都是洛雪(LX)音源脚本格式 —— 以「六音音源」为例,三处的头部注释与 globalThis.lx
通信方式完全一致。所以可以直接共用,不需要任何转换层。
去重:52 个文件其实只有 23 份内容
| 目录 | 文件数 |
|---|---|
sources(本地) |
9 |
sources-romusic(RoMusic) |
20 |
sources-fnos(飞牛) |
23 |
| 合计 | 52 |
| 按内容 sha1 去重后 | 23 |
去重按内容 sha1 而不是文件名:实测不存在「同名不同内容」的情况,但按内容去重
在两种情况下都正确,按文件名去重会误杀同名不同版本的脚本。
去重保留靠前目录的版本 —— 主目录的本地副本永远优先于外部副本。
加载:必须并发
脚本 init 需要联网拉配置,单份最坏等 12s。串行加载 23 份最坏 276 秒,
启动慢到像卡死。改为 6 路并发后最坏耗时约为 1/6。
不需要改容器模板
新增 extraSourcesDirs 配置(env EXTRA_SOURCES_DIRS,冒号分隔),
但未显式配置时会自动发现 /data/sources-romusic、/data/sources-fnos ——
目录存在即生效。所以这次并入外部音源没有动容器模板。
界面上现在能看出每个脚本来自哪套仓库(本地 / RoMusic / 飞牛)。
二、曲库推荐:改为网易云
参考飞牛音乐扩展(proxy/recommend.py)的接入方案,采用同样的两级降级:
| 级别 | 接口 | 说明 |
|---|---|---|
netease-daily |
/api/v3/discovery/recommend/songs |
每日推荐,优先 |
netease-charts |
/api/toplist + /api/playlist/detail |
榜单,免登录兜底 |
分级的原因:推荐位不该因为单个源挂掉就整块空掉。
榜单不再硬编码 4 个
原来写死 4 个榜单(热歌/新歌/原创/飙升)。实测 /api/toplist 返回 63 个榜单
(飙升、新歌、热歌、原创、古典、电音、说唱、UK、Billboard…),
改为动态取前若干个,取不到清单时才回退内置的那 4 个。
三、两条必须说清楚的实测事实
1. 每日推荐不是「猜你喜欢」
该接口未登录也能返回 32 首真数据,但我连着请求两次,曲目 ID 完全一致:
第1次前5个ID: [458725081, 297748, 1866165360, 2638372289, 483378334]
第2次前5个ID: [458725081, 297748, 1866165360, 2638372289, 483378334]
说明它是全网通用的每日推荐,不是个性化推荐。真正个性化必须带登录态(cookie),
ToneCore 不做账号体系,所以拿到的就是通用版。
它依然比固定榜单新鲜(每天轮换),所以作为首选 —— 但不要宣传成「猜你喜欢」。
界面上我只标了「每日更新」,没有过度承诺。
2. 飞牛的网易云服务调不到,无法复用
飞牛的 musicbox(proxy/app.py 里 FNMUSIC_MUSICBOX_URL,默认 http://127.0.0.1:8770)
含真正的登录态与个性化能力。但 compose 里映射是 127.0.0.1:8770:8002 —— 只监听本机。
从 Unraid(192.168.31.2)实测:
curl http://192.168.31.5:8770/api/v1/toplist → HTTP 000(不可达)
所以本项目不能接飞牛的服务,只能照它的方案自己接网易云公开接口。
(改监听范围要动 FnOS 上的 compose,属你的系统配置,我没碰。)
验证
npm run build ✅ web + server 均通过
npm test ✅ 15 项全过
需要你实测确认
- 曲库页在线推荐:应出现「每日推荐」板块(带「每日更新」标),下面是若干榜单
- 设置页音源列表:脚本数应从 9 增至最多 23,且能看出来源
待办
- 酷我(kw)在线搜索封面:该平台不返回可用封面地址(实测 404)
- 音源状态显示口径
- 锁屏动态歌词:浏览器能力边界,做不到