diff --git a/main.go b/main.go index 885b0f4..ca2f57c 100644 --- a/main.go +++ b/main.go @@ -354,7 +354,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 } @@ -1179,10 +1179,23 @@ 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 + 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 { 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 { @@ -1199,6 +1212,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 @@ -1216,10 +1233,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) } } @@ -1275,6 +1292,18 @@ func conventTTMLToLRC(ttml string) (string, error) { return "", err } var text string + //GET 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 for _, span := range lyric.Child {