From db0acc3cefe16a98d9e71a2f1d6575b0630c7723 Mon Sep 17 00:00:00 2001 From: jetzlstorfer Date: Sat, 28 Jan 2023 19:57:17 +0000 Subject: [PATCH 1/5] adding lastfm integration --- .gitignore | 1 + go.mod | 1 + go.sum | 2 ++ lastfm.go | 54 ++++++++++++++++++++++++++++++++++++++++++++ main.go | 17 ++++++++++++++ templates/lastfm.tpl | 28 +++++++++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 lastfm.go create mode 100644 templates/lastfm.tpl diff --git a/.gitignore b/.gitignore index 59ff162..81f9f0e 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ markscribe dist/ +.env diff --git a/go.mod b/go.mod index 8e2a72b..1bbfaa9 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/caarlos0/env/v6 v6.10.1 github.com/dustin/go-humanize v1.0.1 github.com/mmcdole/gofeed v1.2.0 + github.com/shkh/lastfm-go v0.0.0-20191215035245-89a801c244e0 github.com/shurcooL/githubv4 v0.0.0-20191127044304-8f68eb5628d0 github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f golang.org/x/oauth2 v0.5.0 diff --git a/go.sum b/go.sum index c62c857..8b31abd 100644 --- a/go.sum +++ b/go.sum @@ -36,6 +36,8 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shkh/lastfm-go v0.0.0-20191215035245-89a801c244e0 h1:cgqwZtnR+IQfUYDLJ3Kiy4aE+O/wExTzEIg8xwC4Qfs= +github.com/shkh/lastfm-go v0.0.0-20191215035245-89a801c244e0/go.mod h1:n3nudMl178cEvD44PaopxH9jhJaQzthSxUzLO5iKMy4= github.com/shurcooL/githubv4 v0.0.0-20191127044304-8f68eb5628d0 h1:T9uus1QvcPgeLShS30YOnnzk3r9Vvygp45muhlrufgY= github.com/shurcooL/githubv4 v0.0.0-20191127044304-8f68eb5628d0/go.mod h1:hAF0iLZy4td2EX+/8Tw+4nodhlMrwN3HupfaXj3zkGo= github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f h1:tygelZueB1EtXkPI6mQ4o9DQ0+FKW41hTbunoXZCTqk= diff --git a/lastfm.go b/lastfm.go new file mode 100644 index 0000000..13ece40 --- /dev/null +++ b/lastfm.go @@ -0,0 +1,54 @@ +package main + +import ( + "github.com/shkh/lastfm-go/lastfm" +) + +func lastFmFavouriteAlbums(count int) interface{} { + + params := lastfm.P{ + "user": lastFMUser, + "limit": count, + } + albums, err := lastfmapi.User.GetTopAlbums(params) + if err != nil { + panic(err) + } + return albums.Albums +} + +func lastFmFavouriteTracks(count int) interface{} { + params := lastfm.P{ + "user": lastFMUser, + "limit": count, + } + tracks, err := lastfmapi.User.GetTopTracks(params) + if err != nil { + panic(err) + } + return tracks.Tracks +} + +func lastFmFavouriteArtists(count int) interface{} { + params := lastfm.P{ + "user": lastFMUser, + "limit": count, + } + artists, err := lastfmapi.User.GetTopArtists(params) + if err != nil { + panic(err) + } + return artists.Artists +} + +func lastFmRecentTracks(count int) interface{} { + params := lastfm.P{ + "user": lastFMUser, + "limit": count, + } + tracks, err := lastfmapi.User.GetRecentTracks(params) + if err != nil { + panic(err) + } + return tracks.Tracks +} diff --git a/main.go b/main.go index 4d3a0c9..5d9c5b7 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,7 @@ import ( "time" "github.com/KyleBanks/goodreads" + "github.com/shkh/lastfm-go/lastfm" "github.com/shurcooL/githubv4" "golang.org/x/oauth2" ) @@ -22,6 +23,11 @@ var ( goodReadsID string username string + lastfmapi *lastfm.Api + lastFMUser string + lastFMApiKey string + lastFMSecret string + write = flag.String("write", "", "write output to") ) @@ -64,6 +70,11 @@ func main() { "now": time.Now, "contains": strings.Contains, "toLower": strings.ToLower, + /* LastFm* */ + "lastFmFavouriteAlbums": lastFmFavouriteAlbums, + "lastFmFavouriteTracks": lastFmFavouriteTracks, + "lastFmFavouriteArtists": lastFmFavouriteArtists, + "lastFmRecentTracks": lastFmRecentTracks, }).Parse(string(tplIn)) if err != nil { fmt.Println("Can't parse template:", err) @@ -91,6 +102,12 @@ func main() { } } + lastFMUser = os.Getenv("LASTFM_USER") + lastFMApiKey = os.Getenv("LASTFM_API_KEY") + lastFMSecret = os.Getenv("LASTFM_API_SECRET") + + lastfmapi = lastfm.New(lastFMApiKey, lastFMSecret) + w := os.Stdout if len(*write) > 0 { f, err := os.Create(*write) diff --git a/templates/lastfm.tpl b/templates/lastfm.tpl new file mode 100644 index 0000000..eec96cb --- /dev/null +++ b/templates/lastfm.tpl @@ -0,0 +1,28 @@ +### Hi there 👋 + +## Favourite albums of all time 🎶 + +{{range lastFmFavouriteAlbums 5}} +- {{.Artist.Name}} - {{.Name}} +{{- end}} + + +## Favourite artists of all time 👨‍🎤 + +{{range lastFmFavouriteArtists 5}} +- {{.Name}} ({{.PlayCount}}) +{{- end}} + + +## Favourite tracks of all time 💿 + +{{range lastFmFavouriteTracks 5}} +- {{.Artist.Name}} - {{.Name}} ({{.PlayCount}}) +{{- end}} + + +## Most recent tracks 🎺 + +{{range lastFmRecentTracks 10}} +- {{.Artist.Name}} - {{.Name}} +{{- end}} From 203b781262b2eab4d7b08393950f7bd5d6a8cea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Etzlstorfer?= Date: Thu, 9 Feb 2023 20:24:47 +0000 Subject: [PATCH 2/5] fix notation --- README.md | 33 +++++++++++++++++++++++++++++++++ lastfm.go | 24 ++++++++++++------------ main.go | 26 +++++++++++++------------- templates/lastfm.tpl | 8 ++++---- 4 files changed, 62 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index e04ad69..5047292 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,39 @@ This function requires GoodReads API key! This function requires a `LITERAL_EMAIL` and `LITERAL_PASSWORD`. +### Favourite albums of all time 🎶 + +{{range lastFmFavouriteAlbums 5}} +- {{.Artist.Name}} - {{.Name}} +{{- end}} + +This function requires last.fm User, API Key, and API Secret! + + +### Favourite artists of all time 👨‍🎤 + +{{range lastFmFavouriteArtists 5}} +- {{.Name}} ({{.PlayCount}}) +{{- end}} + +This function requires last.fm User, API Key, and API Secret! + +### Favourite tracks of all time 💿 + +{{range lastFmFavouriteTracks 5}} +- {{.Artist.Name}} - {{.Name}} ({{.PlayCount}}) +{{- end}} + +This function requires last.fm User, API Key, and API Secret! + +### Most recent tracks 🎺 + +{{range lastfmRecentTracks 10}} +- {{.Artist.Name}} - {{.Name}} +{{- end}} + +This function requires last.fm User, API Key, and API Secret! + ## Template Engine markscribe uses Go's powerful template engine. You can find its documentation diff --git a/lastfm.go b/lastfm.go index 13ece40..bc42c95 100644 --- a/lastfm.go +++ b/lastfm.go @@ -4,49 +4,49 @@ import ( "github.com/shkh/lastfm-go/lastfm" ) -func lastFmFavouriteAlbums(count int) interface{} { +func lastfmFavouriteAlbums(count int) interface{} { params := lastfm.P{ - "user": lastFMUser, + "user": lastfmUser, "limit": count, } - albums, err := lastfmapi.User.GetTopAlbums(params) + albums, err := lastfmApi.User.GetTopAlbums(params) if err != nil { panic(err) } return albums.Albums } -func lastFmFavouriteTracks(count int) interface{} { +func lastfmFavouriteTracks(count int) interface{} { params := lastfm.P{ - "user": lastFMUser, + "user": lastfmUser, "limit": count, } - tracks, err := lastfmapi.User.GetTopTracks(params) + tracks, err := lastfmApi.User.GetTopTracks(params) if err != nil { panic(err) } return tracks.Tracks } -func lastFmFavouriteArtists(count int) interface{} { +func lastfmFavouriteArtists(count int) interface{} { params := lastfm.P{ - "user": lastFMUser, + "user": lastfmUser, "limit": count, } - artists, err := lastfmapi.User.GetTopArtists(params) + artists, err := lastfmApi.User.GetTopArtists(params) if err != nil { panic(err) } return artists.Artists } -func lastFmRecentTracks(count int) interface{} { +func lastfmRecentTracks(count int) interface{} { params := lastfm.P{ - "user": lastFMUser, + "user": lastfmUser, "limit": count, } - tracks, err := lastfmapi.User.GetRecentTracks(params) + tracks, err := lastfmApi.User.GetRecentTracks(params) if err != nil { panic(err) } diff --git a/main.go b/main.go index 5d9c5b7..2e9ce3f 100644 --- a/main.go +++ b/main.go @@ -23,10 +23,10 @@ var ( goodReadsID string username string - lastfmapi *lastfm.Api - lastFMUser string - lastFMApiKey string - lastFMSecret string + lastfmApi *lastfm.Api + lastfmUser string + lastfmApiKey string + lastfmSecret string write = flag.String("write", "", "write output to") ) @@ -70,11 +70,11 @@ func main() { "now": time.Now, "contains": strings.Contains, "toLower": strings.ToLower, - /* LastFm* */ - "lastFmFavouriteAlbums": lastFmFavouriteAlbums, - "lastFmFavouriteTracks": lastFmFavouriteTracks, - "lastFmFavouriteArtists": lastFmFavouriteArtists, - "lastFmRecentTracks": lastFmRecentTracks, + /* last.fm* */ + "lastfmFavouriteAlbums": lastfmFavouriteAlbums, + "lastfmFavouriteTracks": lastfmFavouriteTracks, + "lastfmFavouriteArtists": lastfmFavouriteArtists, + "lastfmRecentTracks": lastfmRecentTracks, }).Parse(string(tplIn)) if err != nil { fmt.Println("Can't parse template:", err) @@ -102,11 +102,11 @@ func main() { } } - lastFMUser = os.Getenv("LASTFM_USER") - lastFMApiKey = os.Getenv("LASTFM_API_KEY") - lastFMSecret = os.Getenv("LASTFM_API_SECRET") + lastfmUser = os.Getenv("LASTFM_USER") + lastfmApiKey = os.Getenv("LASTFM_API_KEY") + lastfmSecret = os.Getenv("LASTFM_API_SECRET") - lastfmapi = lastfm.New(lastFMApiKey, lastFMSecret) + lastfmApi = lastfm.New(lastfmApiKey, lastfmSecret) w := os.Stdout if len(*write) > 0 { diff --git a/templates/lastfm.tpl b/templates/lastfm.tpl index eec96cb..b42979c 100644 --- a/templates/lastfm.tpl +++ b/templates/lastfm.tpl @@ -2,27 +2,27 @@ ## Favourite albums of all time 🎶 -{{range lastFmFavouriteAlbums 5}} +{{range lastfmFavouriteAlbums 5}} - {{.Artist.Name}} - {{.Name}} {{- end}} ## Favourite artists of all time 👨‍🎤 -{{range lastFmFavouriteArtists 5}} +{{range lastfmFavouriteArtists 5}} - {{.Name}} ({{.PlayCount}}) {{- end}} ## Favourite tracks of all time 💿 -{{range lastFmFavouriteTracks 5}} +{{range lastfmFavouriteTracks 5}} - {{.Artist.Name}} - {{.Name}} ({{.PlayCount}}) {{- end}} ## Most recent tracks 🎺 -{{range lastFmRecentTracks 10}} +{{range lastfmRecentTracks 10}} - {{.Artist.Name}} - {{.Name}} {{- end}} From c77c8616431607b59dd09f0ddfd625081a96c640 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 1 Mar 2023 06:36:41 +0100 Subject: [PATCH 3/5] docs: fix code blocks for last.fm examples --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5047292..1ca3bde 100644 --- a/README.md +++ b/README.md @@ -241,34 +241,41 @@ This function requires a `LITERAL_EMAIL` and `LITERAL_PASSWORD`. ### Favourite albums of all time 🎶 +``` {{range lastFmFavouriteAlbums 5}} - {{.Artist.Name}} - {{.Name}} {{- end}} +``` This function requires last.fm User, API Key, and API Secret! - ### Favourite artists of all time 👨‍🎤 +``` {{range lastFmFavouriteArtists 5}} - {{.Name}} ({{.PlayCount}}) {{- end}} +``` This function requires last.fm User, API Key, and API Secret! ### Favourite tracks of all time 💿 +``` {{range lastFmFavouriteTracks 5}} - {{.Artist.Name}} - {{.Name}} ({{.PlayCount}}) {{- end}} +``` This function requires last.fm User, API Key, and API Secret! ### Most recent tracks 🎺 +``` {{range lastfmRecentTracks 10}} - {{.Artist.Name}} - {{.Name}} {{- end}} +``` This function requires last.fm User, API Key, and API Secret! From 09753f3159a704ddd1de08d2513a3d163a113b5d Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 1 Mar 2023 06:37:34 +0100 Subject: [PATCH 4/5] chore: keep member names consistent --- lastfm.go | 9 ++++----- main.go | 29 ++++++++++++++--------------- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lastfm.go b/lastfm.go index bc42c95..bb6c8f8 100644 --- a/lastfm.go +++ b/lastfm.go @@ -5,12 +5,11 @@ import ( ) func lastfmFavouriteAlbums(count int) interface{} { - params := lastfm.P{ "user": lastfmUser, "limit": count, } - albums, err := lastfmApi.User.GetTopAlbums(params) + albums, err := lastfmClient.User.GetTopAlbums(params) if err != nil { panic(err) } @@ -22,7 +21,7 @@ func lastfmFavouriteTracks(count int) interface{} { "user": lastfmUser, "limit": count, } - tracks, err := lastfmApi.User.GetTopTracks(params) + tracks, err := lastfmClient.User.GetTopTracks(params) if err != nil { panic(err) } @@ -34,7 +33,7 @@ func lastfmFavouriteArtists(count int) interface{} { "user": lastfmUser, "limit": count, } - artists, err := lastfmApi.User.GetTopArtists(params) + artists, err := lastfmClient.User.GetTopArtists(params) if err != nil { panic(err) } @@ -46,7 +45,7 @@ func lastfmRecentTracks(count int) interface{} { "user": lastfmUser, "limit": count, } - tracks, err := lastfmApi.User.GetRecentTracks(params) + tracks, err := lastfmClient.User.GetRecentTracks(params) if err != nil { panic(err) } diff --git a/main.go b/main.go index 2e9ce3f..6ca280c 100644 --- a/main.go +++ b/main.go @@ -20,10 +20,10 @@ import ( var ( gitHubClient *githubv4.Client goodReadsClient *goodreads.Client - goodReadsID string - username string + lastfmClient *lastfm.Api - lastfmApi *lastfm.Api + goodReadsID string + username string lastfmUser string lastfmApiKey string lastfmSecret string @@ -64,27 +64,31 @@ func main() { "goodReadsCurrentlyReading": goodReadsCurrentlyReading, /* Literal.club */ "literalClubCurrentlyReading": literalClubCurrentlyReading, + /* last.fm */ + "lastfmFavouriteAlbums": lastfmFavouriteAlbums, + "lastfmFavouriteTracks": lastfmFavouriteTracks, + "lastfmFavouriteArtists": lastfmFavouriteArtists, + "lastfmRecentTracks": lastfmRecentTracks, /* Utils */ "humanize": humanized, "reverse": reverse, "now": time.Now, "contains": strings.Contains, "toLower": strings.ToLower, - /* last.fm* */ - "lastfmFavouriteAlbums": lastfmFavouriteAlbums, - "lastfmFavouriteTracks": lastfmFavouriteTracks, - "lastfmFavouriteArtists": lastfmFavouriteArtists, - "lastfmRecentTracks": lastfmRecentTracks, }).Parse(string(tplIn)) if err != nil { fmt.Println("Can't parse template:", err) os.Exit(1) } - var httpClient *http.Client gitHubToken := os.Getenv("GITHUB_TOKEN") goodReadsToken := os.Getenv("GOODREADS_TOKEN") goodReadsID = os.Getenv("GOODREADS_USER_ID") + lastfmUser = os.Getenv("LASTFM_USER") + lastfmApiKey = os.Getenv("LASTFM_API_KEY") + lastfmSecret = os.Getenv("LASTFM_API_SECRET") + + var httpClient *http.Client if len(gitHubToken) > 0 { httpClient = oauth2.NewClient(context.Background(), oauth2.StaticTokenSource( &oauth2.Token{AccessToken: gitHubToken}, @@ -93,6 +97,7 @@ func main() { gitHubClient = githubv4.NewClient(httpClient) goodReadsClient = goodreads.NewClient(goodReadsToken) + lastfmClient = lastfm.New(lastfmApiKey, lastfmSecret) if len(gitHubToken) > 0 { username, err = getUsername() @@ -102,12 +107,6 @@ func main() { } } - lastfmUser = os.Getenv("LASTFM_USER") - lastfmApiKey = os.Getenv("LASTFM_API_KEY") - lastfmSecret = os.Getenv("LASTFM_API_SECRET") - - lastfmApi = lastfm.New(lastfmApiKey, lastfmSecret) - w := os.Stdout if len(*write) > 0 { f, err := os.Create(*write) From befa1c957f69476840ba399f94221303a0967cb6 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Wed, 1 Mar 2023 06:42:14 +0100 Subject: [PATCH 5/5] chore: fix linter warning --- main.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 6ca280c..75db29d 100644 --- a/main.go +++ b/main.go @@ -25,7 +25,7 @@ var ( goodReadsID string username string lastfmUser string - lastfmApiKey string + lastfmAPIKey string lastfmSecret string write = flag.String("write", "", "write output to") @@ -85,7 +85,7 @@ func main() { goodReadsToken := os.Getenv("GOODREADS_TOKEN") goodReadsID = os.Getenv("GOODREADS_USER_ID") lastfmUser = os.Getenv("LASTFM_USER") - lastfmApiKey = os.Getenv("LASTFM_API_KEY") + lastfmAPIKey = os.Getenv("LASTFM_API_KEY") lastfmSecret = os.Getenv("LASTFM_API_SECRET") var httpClient *http.Client @@ -97,7 +97,7 @@ func main() { gitHubClient = githubv4.NewClient(httpClient) goodReadsClient = goodreads.NewClient(goodReadsToken) - lastfmClient = lastfm.New(lastfmApiKey, lastfmSecret) + lastfmClient = lastfm.New(lastfmAPIKey, lastfmSecret) if len(gitHubToken) > 0 { username, err = getUsername()