From d84c082972135b4a8e933e887a79c3b67c8d4e1e Mon Sep 17 00:00:00 2001 From: TaurusXin Date: Sat, 14 Sep 2024 23:18:26 +0800 Subject: [PATCH] feat: get from url if missing album pic --- ncmcrypt/metadata.go | 4 ++++ ncmcrypt/ncmcrypt.go | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ncmcrypt/metadata.go b/ncmcrypt/metadata.go index 8324d5d..478afdd 100644 --- a/ncmcrypt/metadata.go +++ b/ncmcrypt/metadata.go @@ -46,3 +46,7 @@ func NewNeteaseCloudMusicMetadata(meta string) *NeteaseClousMusicMetadata { return metaData } + +func GetAlbumPicUrl(meta string) string { + return gjson.Get(meta, "albumPic").String() +} diff --git a/ncmcrypt/ncmcrypt.go b/ncmcrypt/ncmcrypt.go index dc8603d..e10587a 100644 --- a/ncmcrypt/ncmcrypt.go +++ b/ncmcrypt/ncmcrypt.go @@ -8,7 +8,9 @@ import ( "github.com/bogem/id3v2/v2" "github.com/go-flac/flacpicture" "github.com/go-flac/go-flac" + "io" "ncmdump/utils" + "net/http" "os" ) @@ -34,6 +36,7 @@ type NeteaseCloudMusic struct { mFileStream *os.File mKeyBox [256]byte mMetadata *NeteaseClousMusicMetadata + mAlbumPicUrl string } func (ncm *NeteaseCloudMusic) read(buffer *[]byte, size int) int { @@ -289,6 +292,9 @@ func NewNeteaseCloudMusic(filePath string) (*NeteaseCloudMusic, error) { // escape `music:` mMetadataString := string(modifyDecryptData[6:]) + // extract the album pic url + ncm.mAlbumPicUrl = GetAlbumPicUrl(mMetadataString) + ncm.mMetadata = NewNeteaseCloudMusicMetadata(mMetadataString) } @@ -314,7 +320,18 @@ func NewNeteaseCloudMusic(filePath string) (*NeteaseCloudMusic, error) { if coverFrameDataLen > 0 { ncm.read(&ncm.mImageData, coverFrameDataLen) } else { - fmt.Printf("[Warning] Missing album: '%s'\n", filePath) + // get the album pic from url + resp, err := http.Get(ncm.mAlbumPicUrl) + if err != nil { + } + if resp != nil { + if resp.StatusCode == http.StatusOK { + bodyBytes, err := io.ReadAll(resp.Body) + if err != nil { + } + ncm.mImageData = bodyBytes + } + } } ncm.mFileStream.Seek(int64(coverFrameLenInt)-int64(coverFrameDataLen), 1)