Skip to content

v0.32.0

Choose a tag to compare

@deltrivx deltrivx released this 03 Oct 14:46
· 3 commits to main since this release

ToneCore v0.32.0

网易云完整接入(eapi + 扫码登录):个人歌单、个性化每日推荐、登录后高音质取链。

为什么这版要换通道:weapi 在本项目里是死的

上一版做的是免登录接入。哥哥要求「参考飞牛音乐扩展实现完整接入,而不是免登录」,
于是我先去实现扫码登录 —— 但踩到一个硬事实。

weapi 三条路全部返回空(实测,不是猜的)

尝试 结果
/weapi/login/qrcode/unikey(裸请求) HTTP 200 · 体长 0
注入匿名设备 cookie 后再试 HTTP 200 · 体长 0
/weapi/register/anonimous(拿 MUSIC_A) HTTP 200 · 体长 0

三次都是「200 但没有响应体」。如果我只看到状态码 200 就以为通了,会一路做下去然后全部落空。

eapi 则是全通的

换到 interface.music.163.com/eapi/*(飞牛的 NEMbox 取链/歌单实际也走 eapi):

端点 结果
取链 v1 ✅ 拿到真实 URL(br 320000)
歌单详情 ✅ 热歌榜 200 首
login/qrcode/unikey ✅ 拿到真实 unikey
扫码轮询 ✅ 正确返回 801「等待扫码」

决策:登录、歌单、取链统一走 eapi。

做了什么

1. 扫码登录

POST /api/netease/qr 取二维码(服务端用 qrcode 直接出 dataUrl,前端不必再引库),
前端每 3 秒轮询:

code 含义 处理
801 等待扫码 继续等
802 已扫码待确认 提示去手机确认
800 二维码过期 自动换新,不用再点一次
803 成功 吸收 cookie 并落盘

设置页新增「网易云账号」卡片。离开页面会停掉轮询(否则定时器泄漏、后台一直打接口)。

2. 个人歌单

/api/netease/playlists + /api/netease/playlist/:id/tracks,需登录。

3. 个性化每日推荐

/api/netease/recommend,返回 personalized 标志标明是否个性化。
(未登录时是全网通用版 —— 上一版就说明了这点,登录后才真正个性化。)

4. 登录后取链

走 eapi 的 song/enhance/player/url/v1,登录后有机会拿到更高音质。

两条必须说清楚的事实

① 未登录时要无损会被静默降级

请求 lossless,响应回来是 exhigh(320k) —— 不是报错,是静默降级。
好在 br/level 会如实反映,代码回读实际值判定音质,所以界面显示的是真实音质,不谎报。

② 凭据不外泄

cookie 含 MUSIC_U 等凭据,落盘在 data/netease-cookie.json。
所有接口只回「是否登录 / 昵称 / 歌单元数据」,绝不吐 cookie 原文,也不写进日志。

验证

npm run build   ✅ web + server 均通过
npm test        ✅ 15 项全过

新增依赖 qrcode@1.5.4(生产依赖,能扛住 Dockerfile 的 npm prune --omit=dev)+
@types/qrcode(开发依赖)。

需要你实测

  1. 设置 → 网易云账号 → 扫码登录(这是本次核心,得你拿手机扫)
  2. 登录成功后确认显示昵称
  3. 之后每日推荐应变为个性化内容

待办

  • 酷我(kw)在线搜索封面:该平台不返回可用封面地址(实测 404)
  • 音源状态显示口径
  • 锁屏动态歌词:浏览器能力边界,做不到