From 9026c9e2c0463c467958b7032e4e6f7a889c3c76 Mon Sep 17 00:00:00 2001 From: sentriz Date: Mon, 25 Sep 2023 23:51:12 +0100 Subject: [PATCH] feat(lastfm): add user get loved tracks method --- scrobble/lastfm/client.go | 13 +++++++++++++ scrobble/lastfm/model.go | 11 +++++++++++ 2 files changed, 24 insertions(+) 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"` + } )