跳到主要内容

听歌历史同步(网易云)

CurrentMusic 的播放仍以本地记录为准,同时在用户已绑定网易云账号时异步写入该账号的听歌历史。

触发方式​

播放端仍然只调用本地接口:

POST /cm/plays/{ncmId} # 开始播放
POST /cm/plays/{ncmId} {"ms":…} # 播放中增量上报,前端约每 30 秒一次

服务端在 POST /plays/{ncmId} 内额外做两件事:

  1. 开始播放:用用户自己的 ncmbind cookie 异步写网易云 startplay (/api/feedback/weblog),尽量让「最近播放」立即出现;
  2. 累计满 60 秒:取该次播放的累计真实收听毫秒数,异步调用 API-enhanced /scrobble(eapi 通道,startplay + play),写入网易云听歌记录/排行。
开始播放 → startplay(尽力)
累计 60s → scrobble(time=累计秒数) → user/record 可见

行为与边界​

  • 只有绑定网易云的 CurrentMusic 用户才会同步;未绑定只写本地 plays。
  • 使用用户自己的绑定 cookie,不使用服务器共享 SVIP 账号。
  • 同步是异步的:网络失败不会让 /plays 失败、不会卡播放;本地时长照常累计。
  • 每次播放最多写一次合格 play;通过 plays.ncm_synced 原子领取,失败会放回, 下一个 30 秒增量会重试。
  • 未满 60 秒的播放不会进入网易云听歌排行;开始播放的 startplay 仍可能进入“最近播放” (取决于网易云上游是否接受该次客户端日志)。
  • 本地 plays 与网易云记录可能因上游风控、账号未绑定、网络失败而短暂不一致; 不修改本地历史来“补齐”网易云。
  • 只有歌曲播放(不含 MV/视频/播客声音)走这条同步链路。

相关字段​

plays 新增 ncm_synced(0/1,单次播放是否已写合格网易云记录),旧库启动时自动补列。 接口字段与 docs/lyrics-api.md 等无关,不需要客户端改动。

验证​

在已绑定账号上,完整播放超过 60 秒后,可在网易云「最近播放 / 听歌排行」中看到该曲; 服务端不会把本地未满 60 秒的播放强行补成合格记录。