correct AlbumArtist for playlist

This commit is contained in:
Ludovic Vannoorenberghe 2025-02-27 21:22:27 +00:00
parent b5d41a5d07
commit 347284dce7
No known key found for this signature in database
2 changed files with 50 additions and 10 deletions

18
main.go
View File

@ -318,7 +318,7 @@ func checkArtist(artistUrl string, token string, relationship string) ([]string,
func getMeta(albumId string, token string, storefront string) (*structs.AutoGenerated, error) { func getMeta(albumId string, token string, storefront string) (*structs.AutoGenerated, error) {
var mtype string var mtype string
var page int var next string
if strings.Contains(albumId, "pl.") { if strings.Contains(albumId, "pl.") {
mtype = "playlists" mtype = "playlists"
} else { } else {
@ -334,7 +334,7 @@ func getMeta(albumId string, token string, storefront string) (*structs.AutoGene
query := url.Values{} query := url.Values{}
query.Set("omit[resource]", "autos") query.Set("omit[resource]", "autos")
query.Set("include", "tracks,artists,record-labels") query.Set("include", "tracks,artists,record-labels")
query.Set("include[songs]", "artists") query.Set("include[songs]", "artists,albums")
query.Set("fields[artists]", "name,artwork") query.Set("fields[artists]", "name,artwork")
query.Set("fields[albums:albums]", "artistName,artwork,name,releaseDate,url") query.Set("fields[albums:albums]", "artistName,artwork,name,releaseDate,url")
query.Set("fields[record-labels]", "name") query.Set("fields[record-labels]", "name")
@ -357,11 +357,9 @@ func getMeta(albumId string, token string, storefront string) (*structs.AutoGene
if strings.Contains(albumId, "pl.") { if strings.Contains(albumId, "pl.") {
obj.Data[0].Attributes.ArtistName = "Apple Music" obj.Data[0].Attributes.ArtistName = "Apple Music"
if len(obj.Data[0].Relationships.Tracks.Next) > 0 { if len(obj.Data[0].Relationships.Tracks.Next) > 0 {
page = 0 next = obj.Data[0].Relationships.Tracks.Next
for { for {
page = page + 100 req, err := http.NewRequest("GET", fmt.Sprintf("https://amp-api.music.apple.com/%s&l=%s&include=albums", next, Config.Language), nil)
pageStr := strconv.Itoa(page)
req, err := http.NewRequest("GET", fmt.Sprintf("https://amp-api.music.apple.com/v1/catalog/%s/%s/%s/tracks?offset=%s&l=%s", storefront, mtype, albumId, pageStr, Config.Language), nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -384,7 +382,8 @@ func getMeta(albumId string, token string, storefront string) (*structs.AutoGene
for _, value := range obj2.Data { for _, value := range obj2.Data {
obj.Data[0].Relationships.Tracks.Data = append(obj.Data[0].Relationships.Tracks.Data, value) obj.Data[0].Relationships.Tracks.Data = append(obj.Data[0].Relationships.Tracks.Data, value)
} }
if len(obj2.Next) == 0 { next = obj2.Next
if len(next) == 0 {
break break
} }
} }
@ -1123,8 +1122,8 @@ func writeMP4Tags(trackPath, lrc string, meta *structs.AutoGenerated, trackNum,
t.TrackTotal = int16(trackTotal) t.TrackTotal = int16(trackTotal)
t.Album = meta.Data[0].Relationships.Tracks.Data[index].Attributes.AlbumName t.Album = meta.Data[0].Relationships.Tracks.Data[index].Attributes.AlbumName
t.AlbumSort = meta.Data[0].Relationships.Tracks.Data[index].Attributes.AlbumName t.AlbumSort = meta.Data[0].Relationships.Tracks.Data[index].Attributes.AlbumName
t.AlbumArtist = meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName t.AlbumArtist = meta.Data[0].Relationships.Tracks.Data[index].Relationships.Albums.Data[0].Attributes.ArtistName
t.AlbumArtistSort = meta.Data[0].Relationships.Tracks.Data[index].Attributes.ArtistName t.AlbumArtistSort = meta.Data[0].Relationships.Tracks.Data[index].Relationships.Albums.Data[0].Attributes.ArtistName
} else { } else {
t.DiscNumber = int16(meta.Data[0].Relationships.Tracks.Data[index].Attributes.DiscNumber) t.DiscNumber = int16(meta.Data[0].Relationships.Tracks.Data[index].Attributes.DiscNumber)
t.DiscTotal = int16(meta.Data[0].Relationships.Tracks.Data[trackTotal-1].Attributes.DiscNumber) t.DiscTotal = int16(meta.Data[0].Relationships.Tracks.Data[trackTotal-1].Attributes.DiscNumber)
@ -1526,7 +1525,6 @@ func extractMvAudio(c string) (string, error) {
return audioStreams[0].URL, nil return audioStreams[0].URL, nil
} }
func checkM3u8(b string, f string) (string, error) { func checkM3u8(b string, f string) (string, error) {
var EnhancedHls string var EnhancedHls string
if Config.GetM3u8FromDevice { if Config.GetM3u8FromDevice {

View File

@ -236,9 +236,47 @@ type TrackData struct {
} `json:"attributes"` } `json:"attributes"`
} `json:"data"` } `json:"data"`
} `json:"artists"` } `json:"artists"`
Albums struct {
Href string `json:"href"`
Data []AlbumData `json:"data"`
}
} `json:"relationships"` } `json:"relationships"`
} }
type AlbumData struct {
ID string `json:"id"`
Type string `json:"type"`
Href string `json:"href"`
Attributes struct {
ArtistName string `json:"artistName"`
Artwork struct {
Width int `json:"width"`
Height int `json:"height"`
URL string `json:"url"`
BgColor string `json:"bgColor"`
TextColor1 string `json:"textColor1"`
TextColor2 string `json:"textColor2"`
TextColor3 string `json:"textColor3"`
TextColor4 string `json:"textColor4"`
} `json:"artwork"`
GenreNames []string `json:"genreNames"`
IsCompilation bool `json:"isCompilation"`
IsComplete bool `json:"isComplete"`
IsMasteredForItunes bool `json:"isMasteredForItunes"`
IsPrerelease bool `json:"isPrerelease"`
IsSingle bool `json:"isSingle"`
Name string `json:"name"`
PlayParams struct {
ID string `json:"id"`
Kind string `json:"kind"`
} `json:"playParams"`
ReleaseDate string `json:"releaseDate"`
TrackCount int `json:"trackCount"`
Upc string `json:"upc"`
URL string `json:"url"`
}
}
type AutoGenerated struct { type AutoGenerated struct {
Data []struct { Data []struct {
ID string `json:"id"` ID string `json:"id"`
@ -374,6 +412,10 @@ type AutoGeneratedTrack struct {
} `json:"attributes"` } `json:"attributes"`
} `json:"data"` } `json:"data"`
} `json:"artists"` } `json:"artists"`
Albums struct {
Href string `json:"href"`
Data []AlbumData `json:"data"`
}
} `json:"relationships"` } `json:"relationships"`
} `json:"data"` } `json:"data"`
} }