diff --git a/scrobble/lastfm/client.go b/scrobble/lastfm/client.go index 5e87e43..42b0200 100644 --- a/scrobble/lastfm/client.go +++ b/scrobble/lastfm/client.go @@ -122,6 +122,19 @@ func (c *Client) ArtistGetSimilar(apiKey string, artistName string) (SimilarArti return resp.SimilarArtists, nil } +func (c *Client) UserGetLovedTracks(apiKey string, userName string) (LovedTracks, error) { + params := url.Values{} + params.Add("method", "user.getLovedTracks") + params.Add("api_key", apiKey) + params.Add("user", userName) + params.Add("limit", "1000") // TODO: paginate + resp, err := c.makeRequest("GET", params) + if err != nil { + return LovedTracks{}, fmt.Errorf("making lovedTracks users GET: %w", err) + } + return resp.LovedTracks, nil +} + func (c *Client) GetSession(apiKey, secret, token string) (string, error) { params := url.Values{} params.Add("method", "auth.getSession") diff --git a/scrobble/lastfm/model.go b/scrobble/lastfm/model.go index 1ddf379..b2cf229 100644 --- a/scrobble/lastfm/model.go +++ b/scrobble/lastfm/model.go @@ -12,6 +12,7 @@ type ( TopTracks TopTracks `xml:"toptracks"` SimilarTracks SimilarTracks `xml:"similartracks"` SimilarArtists SimilarArtists `xml:"similarartists"` + LovedTracks LovedTracks `xml:"lovedtracks"` } Session struct { @@ -99,4 +100,14 @@ type ( URL string `xml:"url"` Image []Image `xml:"image"` } + + TrackWithArtist struct { + Track + Artist Artist `xml:"artist"` + } + + LovedTracks struct { + XMLName xml.Name `xml:"lovedtracks"` + Tracks []TrackWithArtist `xml:"track"` + } )