From 3634c018cf3e1dff3d10d4f1751086a936eff69f Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 26 Jan 2025 09:59:56 +0800 Subject: [PATCH 1/3] Lrc language Enable Probably only useful for converting between zh-Hans-CN and zh-Hant-TW --- main.go | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index 45807e3..73d1a4a 100644 --- a/main.go +++ b/main.go @@ -329,7 +329,7 @@ func getMeta(albumId string, token string, storefront string) (*structs.AutoGene func getSongLyrics(songId string, storefront string, token string, userToken string) (string, error) { req, err := http.NewRequest("GET", - fmt.Sprintf("https://amp-api.music.apple.com/v1/catalog/%s/songs/%s/%s", storefront, songId, Config.LrcType), nil) + fmt.Sprintf("https://amp-api.music.apple.com/v1/catalog/%s/songs/%s/%s?l=%s", storefront, songId, Config.LrcType, Config.Language), nil) if err != nil { return "", err } @@ -1044,10 +1044,17 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) { ms = ms / 10 return fmt.Sprintf("[%02d:%02d.%02d]", m, s, ms), nil } - for _, div := range parsedTTML.FindElement("tt").FindElement("body").FindElements("div") { + divs := parsedTTML.FindElement("tt").FindElement("body").FindElements("div") + //get trans + if len(parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElements("translation")) > 0 { + divs = parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElements("translation") + } + + for _, div := range divs { for _, item := range div.ChildElements() { var lrcSyllables []string var i int = 0 + var endTime string for _, lyrics := range item.Child { if _, ok := lyrics.(*etree.CharData); ok { if i > 0 { @@ -1064,6 +1071,10 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) { if err != nil { return "", err } + endTime, err = parseTime(lyric.SelectAttr("end").Value) + if err != nil { + return "", err + } var text string if lyric.SelectAttr("text") == nil { var textTmp []string @@ -1081,10 +1092,10 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) { lrcSyllables = append(lrcSyllables, fmt.Sprintf("%s%s", beginTime, text)) i += 1 } - endTime, err := parseTime(item.SelectAttr("end").Value) - if err != nil { - return "", err - } + //endTime, err := parseTime(item.SelectAttr("end").Value) + //if err != nil { + // return "", err + //} lrcLines = append(lrcLines, strings.Join(lrcSyllables, "")+endTime) } } @@ -1140,6 +1151,11 @@ func conventTTMLToLRC(ttml string) (string, error) { return "", err } var text string + if len(parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElements("translation")) > 0 { + xpath := fmt.Sprintf("//text[@for='%s']", lyric.SelectAttr("itunes:key").Value) + trans := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElement("translation").FindElement(xpath) + lyric = trans + } if lyric.SelectAttr("text") == nil { var textTmp []string for _, span := range lyric.Child { From c3f7bdb0be8850ec6bb889ff3f3315bd58471161 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 26 Jan 2025 10:42:19 +0800 Subject: [PATCH 2/3] fix lrc language --- main.go | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index 73d1a4a..e8045f9 100644 --- a/main.go +++ b/main.go @@ -1046,8 +1046,11 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) { } divs := parsedTTML.FindElement("tt").FindElement("body").FindElements("div") //get trans - if len(parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElements("translation")) > 0 { - divs = parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElements("translation") + iTunesMetadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata") + if len(iTunesMetadata.FindElements("translations")) > 0 { + if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 { + divs = iTunesMetadata.FindElement("translations").FindElements("translation") + } } for _, div := range divs { @@ -1151,10 +1154,14 @@ func conventTTMLToLRC(ttml string) (string, error) { return "", err } var text string - if len(parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElements("translation")) > 0 { - xpath := fmt.Sprintf("//text[@for='%s']", lyric.SelectAttr("itunes:key").Value) - trans := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata").FindElement("translations").FindElement("translation").FindElement(xpath) - lyric = trans + //GET trans + iTunesMetadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata") + if len(iTunesMetadata.FindElements("translations")) > 0 { + if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 { + xpath := fmt.Sprintf("//text[@for='%s']", lyric.SelectAttr("itunes:key").Value) + trans := iTunesMetadata.FindElement("translations").FindElement("translation").FindElement(xpath) + lyric = trans + } } if lyric.SelectAttr("text") == nil { var textTmp []string From e053133a68839878635504992a7d89def4b44510 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sun, 2 Feb 2025 22:10:34 +0800 Subject: [PATCH 3/3] fix lrc metadata trans panic --- main.go | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/main.go b/main.go index e8045f9..719e7fb 100644 --- a/main.go +++ b/main.go @@ -1046,11 +1046,14 @@ func conventSyllableTTMLToLRC(ttml string) (string, error) { } divs := parsedTTML.FindElement("tt").FindElement("body").FindElements("div") //get trans - iTunesMetadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata") - if len(iTunesMetadata.FindElements("translations")) > 0 { - if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 { - divs = iTunesMetadata.FindElement("translations").FindElements("translation") - } + Metadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata") + if len(Metadata.FindElements("iTunesMetadata")) > 0 { + iTunesMetadata := Metadata.FindElement("iTunesMetadata") + if len(iTunesMetadata.FindElements("translations")) > 0 { + if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 { + divs = iTunesMetadata.FindElement("translations").FindElements("translation") + } + } } for _, div := range divs { @@ -1155,13 +1158,16 @@ func conventTTMLToLRC(ttml string) (string, error) { } var text string //GET trans - iTunesMetadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata").FindElement("iTunesMetadata") - if len(iTunesMetadata.FindElements("translations")) > 0 { - if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 { - xpath := fmt.Sprintf("//text[@for='%s']", lyric.SelectAttr("itunes:key").Value) - trans := iTunesMetadata.FindElement("translations").FindElement("translation").FindElement(xpath) - lyric = trans - } + Metadata := parsedTTML.FindElement("tt").FindElement("head").FindElement("metadata") + if len(Metadata.FindElements("iTunesMetadata")) > 0 { + iTunesMetadata := Metadata.FindElement("iTunesMetadata") + if len(iTunesMetadata.FindElements("translations")) > 0 { + if len(iTunesMetadata.FindElement("translations").FindElements("translation")) > 0 { + xpath := fmt.Sprintf("//text[@for='%s']", lyric.SelectAttr("itunes:key").Value) + trans := iTunesMetadata.FindElement("translations").FindElement("translation").FindElement(xpath) + lyric = trans + } + } } if lyric.SelectAttr("text") == nil { var textTmp []string