spotifyr is an R wrapper for pulling track audio features and other information from Spotify’s Web API in bulk. By automatically batching API requests, it allows you to enter an artist’s name and retrieve their entire discography in seconds, along with Spotify’s audio features and track/album popularity metrics. You can also pull song and playlist information for a given Spotify User (including yourself!).
First, set up a Dev account with Spotify to access their Web API here. This will give you your Client ID
and Client Secret
. Once you have those, you can pull your access token into R with get_spotify_access_token()
.
The easiest way to authenticate is to set your credentials to the System Environment variables SPOTIFY_CLIENT_ID
and SPOTIFY_CLIENT_SECRET
. The default arguments to get_spotify_access_token()
(and all other functions in this package) will refer to those. Alternatively, you can set them manually and make sure to explicitly refer to your access token in each subsequent function call.
key_mode | n |
---|---|
D major | 24 |
G major | 21 |
A major | 13 |
F major | 12 |
C major | 11 |
library(lubridate)
get_my_recently_played(limit = 5) %>%
mutate(artist.name = map_chr(track.artists, function(x) x$name[1]),
played_at = as_datetime(played_at)) %>%
select(track.name, artist.name, track.album.name, played_at) %>%
kable()
track.name | artist.name | track.album.name | played_at |
---|---|---|---|
Take The Power Back | Rage Against The Machine | Rage Against The Machine - XX (20th Anniversary Special Edition) | 2020-02-15 18:18:30 |
Killing In The Name | Rage Against The Machine | Rage Against The Machine - XX (20th Anniversary Special Edition) | 2020-02-15 18:08:24 |
Bombtrack | Rage Against The Machine | Rage Against The Machine - XX (20th Anniversary Special Edition) | 2020-02-15 18:03:09 |
Testify | Rage Against The Machine | The Battle Of Los Angeles | 2020-02-15 17:59:07 |
War Within a Breath | Rage Against The Machine | The Battle Of Los Angeles | 2020-02-15 17:54:41 |
get_my_top_artists_or_tracks(type = 'artists', time_range = 'long_term', limit = 5) %>%
select(name, genres) %>%
rowwise %>%
mutate(genres = paste(genres, collapse = ', ')) %>%
ungroup %>%
kable()
name | genres |
---|---|
Radiohead | alternative rock, art rock, melancholia, oxford indie, permanent wave, rock |
Flying Lotus | afrofuturism, alternative hip hop, electronica, escape room, experimental hip hop, glitch, glitch hop, hip hop, indietronica, intelligent dance music, jazztronica, wonky |
Onra | chillhop, japanese chillhop, wonky |
Teebs | bass music, chillwave, electronica, experimental pop, indie jazz, indie r&b, indietronica, microhouse, wonky |
Pixies | alternative rock, art rock, boston rock, garage rock, modern rock, noise pop, permanent wave, rock |
get_my_top_artists_or_tracks(type = 'tracks', time_range = 'short_term', limit = 5) %>%
mutate(artist.name = map_chr(artists, function(x) x$name[1])) %>%
select(name, artist.name, album.name) %>%
kable()
name | artist.name | album.name |
---|---|---|
Testify | Rage Against The Machine | The Battle Of Los Angeles |
Guerrilla Radio | Rage Against The Machine | The Battle Of Los Angeles |
Killing In The Name | Rage Against The Machine | Rage Against The Machine - XX (20th Anniversary Special Edition) |
One for Nujabes | .Sinh | One for Nujabes |
Lantern Flies in Mist | Black Taffy | Elder Mantis |
My favorite audio feature has to be “valence,” a measure of musical positivity.
track_name | valence |
---|---|
Passover - 2007 Remaster | 0.941 |
Passover - 2007 Remaster | 0.941 |
Colony - 2007 Remaster | 0.808 |
Colony - 2007 Remaster | 0.808 |
Atrocity Exhibition - 2007 Remaster | 0.787 |
Now if only there was some way to plot joy…
This app, powered by spotifyr, allows you to visualize the energy and valence (musical positivity) of all of Spotify’s artists and playlists.
The coolest thing about making this package has definitely been seeing all the awesome stuff other people have done with it. Here are a few examples:
Exploring the Spotify API with R: A tutorial for beginners, by a beginner, Mia Smith
Sentiment analysis of musical taste: a cross-European comparison, Paul Elvers
Blue Christmas: A data-driven search for the most depressing Christmas song, Caitlin Hudon
KendRick LamaR, David K. Laing
Vilken är Kents mest deprimerande låt? (What is Kent’s most depressing song?), Filip Wästberg
Чёрное зеркало Arcade Fire (Black Mirror Arcade Fire), TheSociety
Sente-se triste quando ouve “Amar pelos dois”? Não é o único (Do you feel sad when you hear “Love for both?” You’re not alone), Rui Barros, Rádio Renascença
Using Data to Find the Angriest Death Grips Song, Evan Oppenheimer
Hierarchical clustering of David Bowie records, Alyssa Goldberg
tayloR, Simran Vatsa
Long Distance Calling: Data Science meets Post-Rock…, Sebastian Kuhn