网易云音乐私有文件调整

  • 问题

最近发现自动化任务里的网易云音乐私有文件(ncm)不能直接备份为公共文件格式(flac、aac、mp3等)。

  • 现象分析

把之前yoki123的ncmdump项目打开debug发现

应该是做convention时出现了字段不匹配的问题。

解析ncm的meta信息可得

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
"musicId" : "2308549",
"musicName" : "My Heart Will Go On",
"artist" : [ [ "Céline Dion", "50893" ] ],
"albumId" : "232952",
"album" : "Complete Best",
"albumPicDocId" : "941181953423930",
"albumPic" : "http://p4.music.126.net/fiNTK9Jvhg0V8QBJx0cXPg==/941181953423930.jpg",
"bitrate" : 999000,
"mp3DocId" : "0524b583bd4091bdf34be9406fb0b102",
"duration" : 280333,
"mvId" : "22617298",
"alias" : [ ],
"transNames" : [ "我心永恒" ],
"format" : "flac",
"fee" : 8,
"volumeDelta" : -4.4074,
"privilege" : {
"flag" : 2064644
}
}

而meta结构定义为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type Album struct {
Id float64 `json:"albumId"`
Name string `json:"album"`
CoverUrl string `json:"albumPic"`
}

type Artist struct {
Name string
Id float64
}

// @ref https://music.163.com/#/song?id={id}
type Meta struct {
Id float64 `json:"musicId"`
Name string `json:"musicName"`
*Album `json:",inline"`
Artists []Artist `json:"artist"`
BitRate float64 `json:"bitrate"`
Duration float64 `json:"duration"`
Format string `json:"format"`
Comment string `json:"-"`
}

发现 musicIdalbumIdartistId从float类型调整为了string。

  • 解决方案

将对应字段调整类型,对解析方法稍作调整,即可正常运行。


网易云音乐私有文件调整
https://fatwang1.github.io/2024/12/25/2024122500/
作者
衣云乘风
发布于
2024年12月25日
许可协议