From 3caeaa66a459448f3b81e5d563ddcc9f3618498a Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Tue, 17 Sep 2024 19:48:02 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dwarning=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加no codec found --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 630995f..5474828 100644 --- a/main.go +++ b/main.go @@ -1732,7 +1732,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro trackUrl, keys, err := extractMedia(manifest.Attributes.ExtendedAssetUrls.EnhancedHls) if err != nil { fmt.Println("Failed to extract info from manifest.\n", err) - counter.Error++ + counter.Unavailable++ continue } info, err := extractSong(trackUrl) From d1c576847b2f44abc06a604dfe7bcc1e8d8e7d2c Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Wed, 18 Sep 2024 03:58:32 +0800 Subject: [PATCH 2/6] add artist-folder-format tag {ArtistName}/{ArtistsName} --- main.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 5474828..dd2e540 100644 --- a/main.go +++ b/main.go @@ -1408,15 +1408,18 @@ func rip(albumId string, token string, storefront string, userToken string) erro singerFoldername = strings.NewReplacer( "{ArtistName}", "Apple Music", "{ArtistId}", "", + "{ArtistsName}", "Apple Music", ).Replace(config.ArtistFolderFormat) } else if len(meta.Data[0].Relationships.Artists.Data) > 0 { singerFoldername = strings.NewReplacer( - "{ArtistName}", LimitString(meta.Data[0].Attributes.ArtistName), + "{ArtistName}", LimitString(meta.Data[0].Relationships.Artists.Data[0].Attributes.Name), + "{ArtistsName}", LimitString(meta.Data[0].Attributes.ArtistName), "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, ).Replace(config.ArtistFolderFormat) } else { singerFoldername = strings.NewReplacer( - "{ArtistName}", LimitString(meta.Data[0].Attributes.ArtistName), + "{ArtistName}", LimitString(meta.Data[0].Relationships.Artists.Data[0].Attributes.Name), + "{ArtistsName}", LimitString(meta.Data[0].Attributes.ArtistName), "{ArtistId}", "", ).Replace(config.ArtistFolderFormat) } From 330d0a1f8986cc321dfe63cad2a78a123b221bd5 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Wed, 18 Sep 2024 04:01:47 +0800 Subject: [PATCH 3/6] add artist-folder-format tag {ArtistName}/{ArtistsName} --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index d32daf3..5899466 100644 --- a/config.yaml +++ b/config.yaml @@ -29,7 +29,7 @@ playlist-folder-format: "{PlaylistName}" #{SongId} {SongNumer} {SongName} {DiscNumber} {TrackNumber} {Quality} {Codec} {Tag} #example: Disk {DiscNumber} - Track {TrackNumber} {SongName} [{Quality}]{{Tag}}" song-file-format: "{SongNumer}. {SongName}" -#{ArtistId} {ArtistName} +#{ArtistId} {ArtistName}/{ArtistsName} #if artist-folder-format set "",will not make artist folder artist-folder-format: "{ArtistName}" #if set "" will not add tag From e607240dca57cbd9ac23948727e458bd7fd58103 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Wed, 18 Sep 2024 04:38:10 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E8=AD=A6=E5=91=8A=E6=97=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index dd2e540..45506e0 100644 --- a/main.go +++ b/main.go @@ -1616,12 +1616,12 @@ func rip(albumId string, token string, storefront string, userToken string) erro fmt.Printf("Track %d of %d:\n", trackNum, trackTotal) manifest, err := getInfoFromAdam(track.ID, token, storefront) if err != nil { - fmt.Println("Failed to get manifest.\n", err) + fmt.Println("\u26A0 Failed to get manifest:", err) counter.NotSong++ continue } if manifest.Attributes.ExtendedAssetUrls.EnhancedHls == "" { - fmt.Println("Unavailable.") + fmt.Println("\u26A0 Unavailable.") counter.Unavailable++ continue } @@ -1734,7 +1734,7 @@ func rip(albumId string, token string, storefront string, userToken string) erro trackUrl, keys, err := extractMedia(manifest.Attributes.ExtendedAssetUrls.EnhancedHls) if err != nil { - fmt.Println("Failed to extract info from manifest.\n", err) + fmt.Println("\u26A0 Failed to extract info from manifest:", err) counter.Unavailable++ continue } From 5f2bb60b63dd6e57f436ac8bc8a98775a2586dcc Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Wed, 18 Sep 2024 21:57:03 +0800 Subject: [PATCH 5/6] add artist-folder-format tag {ArtistName}/{UrlArtistName} --- main.go | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 45506e0..24af3d5 100644 --- a/main.go +++ b/main.go @@ -1109,6 +1109,30 @@ func checkUrlArtist(url string) (string, string) { return matches[0][1], matches[0][2] } } +func getUrlArtistName(artistUrl string, token string) (string, error) { + storefront, artistId := checkUrlArtist(artistUrl) + req, err := http.NewRequest("GET", fmt.Sprintf("https://amp-api.music.apple.com/v1/catalog/%s/artists/%s", storefront, artistId), nil) + if err != nil { + return "", 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") + do, err := http.DefaultClient.Do(req) + if err != nil { + return "", err + } + defer do.Body.Close() + if do.StatusCode != http.StatusOK { + return "", errors.New(do.Status) + } + obj := new(AutoGeneratedArtist) + err = json.NewDecoder(do.Body).Decode(&obj) + if err != nil { + return "", err + } + return obj.Data[0].Attributes.Name, nil +} func checkArtist(artistUrl string, token string) ([]string, error) { storefront, artistId := checkUrlArtist(artistUrl) @@ -1408,18 +1432,18 @@ func rip(albumId string, token string, storefront string, userToken string) erro singerFoldername = strings.NewReplacer( "{ArtistName}", "Apple Music", "{ArtistId}", "", - "{ArtistsName}", "Apple Music", + "{UrlArtistName}", "Apple Music", ).Replace(config.ArtistFolderFormat) } else if len(meta.Data[0].Relationships.Artists.Data) > 0 { singerFoldername = strings.NewReplacer( - "{ArtistName}", LimitString(meta.Data[0].Relationships.Artists.Data[0].Attributes.Name), - "{ArtistsName}", LimitString(meta.Data[0].Attributes.ArtistName), + "{UrlArtistName}", LimitString(meta.Data[0].Attributes.ArtistName), + "{ArtistName}", LimitString(meta.Data[0].Attributes.ArtistName), "{ArtistId}", meta.Data[0].Relationships.Artists.Data[0].ID, ).Replace(config.ArtistFolderFormat) } else { singerFoldername = strings.NewReplacer( - "{ArtistName}", LimitString(meta.Data[0].Relationships.Artists.Data[0].Attributes.Name), - "{ArtistsName}", LimitString(meta.Data[0].Attributes.ArtistName), + "{UrlArtistName}", LimitString(meta.Data[0].Attributes.ArtistName), + "{ArtistName}", LimitString(meta.Data[0].Attributes.ArtistName), "{ArtistId}", "", ).Replace(config.ArtistFolderFormat) } @@ -1897,6 +1921,15 @@ func main() { } os.Args = args if strings.Contains(os.Args[0], "/artist/") { + urlArtistName, err := getUrlArtistName(os.Args[0], token) + if err != nil { + fmt.Println("Failed to get artistname.") + return + } + //fmt.Println("get artistname:", urlArtistName) + config.ArtistFolderFormat = strings.NewReplacer( + "{UrlArtistName}", LimitString(urlArtistName), + ).Replace(config.ArtistFolderFormat) newArgs, err := checkArtist(os.Args[0], token) if err != nil { fmt.Println("Failed to get artist.") From fa3295a1c159a6a62f413e051318ccc01bde2ae5 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Wed, 18 Sep 2024 21:57:41 +0800 Subject: [PATCH 6/6] add artist-folder-format tag {ArtistName}/{UrlArtistName} --- config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.yaml b/config.yaml index 5899466..664d828 100644 --- a/config.yaml +++ b/config.yaml @@ -29,7 +29,7 @@ playlist-folder-format: "{PlaylistName}" #{SongId} {SongNumer} {SongName} {DiscNumber} {TrackNumber} {Quality} {Codec} {Tag} #example: Disk {DiscNumber} - Track {TrackNumber} {SongName} [{Quality}]{{Tag}}" song-file-format: "{SongNumer}. {SongName}" -#{ArtistId} {ArtistName}/{ArtistsName} +#{ArtistId} {ArtistName}/{UrlArtistName} #if artist-folder-format set "",will not make artist folder artist-folder-format: "{ArtistName}" #if set "" will not add tag