From beb95b8730fa2128b3706086b380cd228c6382a0 Mon Sep 17 00:00:00 2001 From: itouakirai Date: Sat, 12 Jul 2025 06:32:17 +0800 Subject: [PATCH] fix: unable to collect information about albums with more than 300 tracks --- utils/ampapi/album.go | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/utils/ampapi/album.go b/utils/ampapi/album.go index 63a26fd..7a4214a 100644 --- a/utils/ampapi/album.go +++ b/utils/ampapi/album.go @@ -48,6 +48,41 @@ func GetAlbumResp(storefront string, id string, language string, token string) ( if err != nil { return nil, err } + if len(obj.Data[0].Relationships.Tracks.Next) > 0 { + next := obj.Data[0].Relationships.Tracks.Next + for { + req, err := http.NewRequest("GET", fmt.Sprintf("https://amp-api.music.apple.com%s", next), nil) + if err != nil { + return nil, err + } + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) + req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") + req.Header.Set("Origin", "https://music.apple.com") + query := req.URL.Query() + query.Set("omit[resource]", "autos") + query.Set("include", "artists") + query.Set("extend", "editorialVideo,extendedAssetUrls") + req.URL.RawQuery = query.Encode() + do, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer do.Body.Close() + if do.StatusCode != http.StatusOK { + return nil, errors.New(do.Status) + } + obj2 := new(TrackResp) + err = json.NewDecoder(do.Body).Decode(&obj2) + if err != nil { + return nil, err + } + obj.Data[0].Relationships.Tracks.Data = append(obj.Data[0].Relationships.Tracks.Data, obj2.Data...) + next = obj2.Next + if len(next) == 0 { + break + } + } + } return obj, nil } @@ -90,6 +125,41 @@ func GetAlbumRespByHref(href string, language string, token string) (*AlbumResp, if err != nil { return nil, err } + if len(obj.Data[0].Relationships.Tracks.Next) > 0 { + next := obj.Data[0].Relationships.Tracks.Next + for { + req, err := http.NewRequest("GET", fmt.Sprintf("https://amp-api.music.apple.com%s", next), nil) + if err != nil { + return nil, err + } + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token)) + req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36") + req.Header.Set("Origin", "https://music.apple.com") + query := req.URL.Query() + query.Set("omit[resource]", "autos") + query.Set("include", "artists") + query.Set("extend", "editorialVideo,extendedAssetUrls") + req.URL.RawQuery = query.Encode() + do, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer do.Body.Close() + if do.StatusCode != http.StatusOK { + return nil, errors.New(do.Status) + } + obj2 := new(TrackResp) + err = json.NewDecoder(do.Body).Decode(&obj2) + if err != nil { + return nil, err + } + obj.Data[0].Relationships.Tracks.Data = append(obj.Data[0].Relationships.Tracks.Data, obj2.Data...) + next = obj2.Next + if len(next) == 0 { + break + } + } + } return obj, nil }