mirror of
https://github.com/zhaarey/apple-music-downloader.git
synced 2025-10-23 15:11:05 +00:00
fix: mv tag panic,artist cover miss
This commit is contained in:
36
main.go
36
main.go
@@ -406,7 +406,10 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
var err error
|
var err error
|
||||||
counter.Total++
|
counter.Total++
|
||||||
fmt.Printf("Track %d of %d: %s\n", track.TaskNum, track.TaskTotal, track.Type)
|
fmt.Printf("Track %d of %d: %s\n", track.TaskNum, track.TaskTotal, track.Type)
|
||||||
|
//提前获取到的播放列表下track所在的专辑信息
|
||||||
|
if track.PreType == "playlists" && Config.UseSongInfoForPlaylist {
|
||||||
|
track.GetAlbumData(token)
|
||||||
|
}
|
||||||
//mv dl dev
|
//mv dl dev
|
||||||
if track.Type == "music-videos" {
|
if track.Type == "music-videos" {
|
||||||
if len(mediaUserToken) <= 50 {
|
if len(mediaUserToken) <= 50 {
|
||||||
@@ -419,10 +422,6 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
counter.Success++
|
counter.Success++
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
//提前获取到的播放列表下track所在的专辑信息
|
|
||||||
if track.PreType == "playlists" && Config.UseSongInfoForPlaylist {
|
|
||||||
track.GetAlbumData(token)
|
|
||||||
}
|
|
||||||
err := mvDownloader(track.ID, track.SaveDir, token, track.Storefront, mediaUserToken, track)
|
err := mvDownloader(track.ID, track.SaveDir, token, track.Storefront, mediaUserToken, track)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("\u26A0 Failed to dl MV:", err)
|
fmt.Println("\u26A0 Failed to dl MV:", err)
|
||||||
@@ -436,7 +435,7 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
if dl_aac && Config.AacType == "aac-lc" {
|
if dl_aac && Config.AacType == "aac-lc" {
|
||||||
needDlAacLc = true
|
needDlAacLc = true
|
||||||
}
|
}
|
||||||
if track.WebM3u8 == "" {
|
if track.WebM3u8 == "" && !needDlAacLc {
|
||||||
if dl_atmos {
|
if dl_atmos {
|
||||||
fmt.Println("Unavailable")
|
fmt.Println("Unavailable")
|
||||||
counter.Unavailable++
|
counter.Unavailable++
|
||||||
@@ -549,7 +548,7 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
_, err := runv3.Run(track.ID, trackPath, token, mediaUserToken, false)
|
_, err := runv3.Run(track.ID, trackPath, token, mediaUserToken, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Failed to dl aac-lc:", err)
|
fmt.Println("Failed to dl aac-lc:", err)
|
||||||
if err.Error() == "Unavailable"{
|
if err.Error() == "Unavailable" {
|
||||||
counter.Unavailable++
|
counter.Unavailable++
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -600,10 +599,6 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
track.SavePath = trackPath
|
track.SavePath = trackPath
|
||||||
//提前获取到的播放列表下track所在的专辑信息
|
|
||||||
if track.PreType == "playlists" && Config.UseSongInfoForPlaylist {
|
|
||||||
track.GetAlbumData(token)
|
|
||||||
}
|
|
||||||
err = writeMP4Tags(track, lrc)
|
err = writeMP4Tags(track, lrc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("\u26A0 Failed to write tags in media:", err)
|
fmt.Println("\u26A0 Failed to write tags in media:", err)
|
||||||
@@ -724,7 +719,7 @@ func ripStation(albumId string, token string, storefront string, mediaUserToken
|
|||||||
"{SongNumer}", "01",
|
"{SongNumer}", "01",
|
||||||
"{SongName}", LimitString(station.Name),
|
"{SongName}", LimitString(station.Name),
|
||||||
"{DiscNumber}", "1",
|
"{DiscNumber}", "1",
|
||||||
"{TrackNumber}", "01",
|
"{TrackNumber}", "1",
|
||||||
"{Quality}", "256Kbps",
|
"{Quality}", "256Kbps",
|
||||||
"{Tag}", "",
|
"{Tag}", "",
|
||||||
"{Codec}", "AAC",
|
"{Codec}", "AAC",
|
||||||
@@ -985,7 +980,15 @@ func ripAlbum(albumId string, token string, storefront string, mediaUserToken st
|
|||||||
os.MkdirAll(albumFolderPath, os.ModePerm) // Create album folder
|
os.MkdirAll(albumFolderPath, os.ModePerm) // Create album folder
|
||||||
album.SaveName = albumFolderName
|
album.SaveName = albumFolderName
|
||||||
fmt.Println(albumFolderName)
|
fmt.Println(albumFolderName)
|
||||||
//先省略封面相关的获取
|
//get artist cover
|
||||||
|
if Config.SaveArtistCover {
|
||||||
|
if len(meta.Data[0].Relationships.Artists.Data) > 0 {
|
||||||
|
_, err = writeCover(singerFolder, "folder", meta.Data[0].Relationships.Artists.Data[0].Attributes.Artwork.Url)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Failed to write artist cover.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//get playlist cover
|
//get playlist cover
|
||||||
covPath, err := writeCover(albumFolderPath, "cover", meta.Data[0].Attributes.Artwork.URL)
|
covPath, err := writeCover(albumFolderPath, "cover", meta.Data[0].Attributes.Artwork.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1405,9 +1408,7 @@ func writeMP4Tags(track *task.Track, lrc string) error {
|
|||||||
t.AlbumArtist = track.PlaylistData.Attributes.ArtistName
|
t.AlbumArtist = track.PlaylistData.Attributes.ArtistName
|
||||||
t.AlbumArtistSort = track.PlaylistData.Attributes.ArtistName
|
t.AlbumArtistSort = track.PlaylistData.Attributes.ArtistName
|
||||||
} else if (track.PreType == "playlists" || track.PreType == "stations") && Config.UseSongInfoForPlaylist {
|
} else if (track.PreType == "playlists" || track.PreType == "stations") && Config.UseSongInfoForPlaylist {
|
||||||
//使用提前获取到的播放列表下track所在的专辑信息
|
t.DiscTotal = int16(track.DiscTotal)
|
||||||
len := len(track.AlbumData.Relationships.Tracks.Data)
|
|
||||||
t.DiscTotal = int16(track.AlbumData.Relationships.Tracks.Data[len-1].Attributes.DiscNumber)
|
|
||||||
t.TrackTotal = int16(track.AlbumData.Attributes.TrackCount)
|
t.TrackTotal = int16(track.AlbumData.Attributes.TrackCount)
|
||||||
t.AlbumArtist = track.AlbumData.Attributes.ArtistName
|
t.AlbumArtist = track.AlbumData.Attributes.ArtistName
|
||||||
t.AlbumArtistSort = track.AlbumData.Attributes.ArtistName
|
t.AlbumArtistSort = track.AlbumData.Attributes.ArtistName
|
||||||
@@ -1693,8 +1694,7 @@ func mvDownloader(adamID string, saveDir string, token string, storefront string
|
|||||||
//tags = append(tags, fmt.Sprintf("UPC=%s", track.PlaylistData.Attributes.Upc))
|
//tags = append(tags, fmt.Sprintf("UPC=%s", track.PlaylistData.Attributes.Upc))
|
||||||
} else if track.PreType == "playlists" && Config.UseSongInfoForPlaylist {
|
} else if track.PreType == "playlists" && Config.UseSongInfoForPlaylist {
|
||||||
tags = append(tags, fmt.Sprintf("album=%s", track.AlbumData.Attributes.Name))
|
tags = append(tags, fmt.Sprintf("album=%s", track.AlbumData.Attributes.Name))
|
||||||
len := len(track.AlbumData.Relationships.Tracks.Data)
|
tags = append(tags, fmt.Sprintf("disk=%d/%d", track.Resp.Attributes.DiscNumber, track.DiscTotal))
|
||||||
tags = append(tags, fmt.Sprintf("disk=%d/%d", track.Resp.Attributes.DiscNumber, track.AlbumData.Relationships.Tracks.Data[len-1].Attributes.DiscNumber))
|
|
||||||
tags = append(tags, fmt.Sprintf("track=%d", track.Resp.Attributes.TrackNumber))
|
tags = append(tags, fmt.Sprintf("track=%d", track.Resp.Attributes.TrackNumber))
|
||||||
tags = append(tags, fmt.Sprintf("tracknum=%d/%d", track.Resp.Attributes.TrackNumber, track.AlbumData.Attributes.TrackCount))
|
tags = append(tags, fmt.Sprintf("tracknum=%d/%d", track.Resp.Attributes.TrackNumber, track.AlbumData.Attributes.TrackCount))
|
||||||
tags = append(tags, fmt.Sprintf("album_artist=%s", track.AlbumData.Attributes.ArtistName))
|
tags = append(tags, fmt.Sprintf("album_artist=%s", track.AlbumData.Attributes.ArtistName))
|
||||||
|
|||||||
@@ -38,7 +38,13 @@ func (t *Track) GetAlbumData(token string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
t.AlbumData = resp.Data[0]
|
t.AlbumData = resp.Data[0]
|
||||||
//len := len(resp.Data[0].Relationships.Tracks.Data)
|
//尝试获取该track所在album的disk总数
|
||||||
//t.DiscTotal = resp.Data[0].Relationships.Tracks.Data[len-1].Attributes.DiscNumber
|
if len(resp.Data) > 0 {
|
||||||
|
len := len(resp.Data[0].Relationships.Tracks.Data)
|
||||||
|
if len > 0 {
|
||||||
|
t.DiscTotal = resp.Data[0].Relationships.Tracks.Data[len-1].Attributes.DiscNumber
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user