Playing a Random Album on Spotify
I still like listening to albums and sometimes want Spotify to play a random album from a playlist of albums I’ve created.
I couldn’t find anything out there that does this so I wrote myself a script to handle it instead.
Here’s a rundown if you want to use it.
First up, you’ll need a playlist with at least one track from each of the albums you want to choose from (here’s mine). Grab the ID of your playlist1, and your username and add them into the script below.
Then, you’ll need to create an app in Spotify and get your client ID and secret, add them to the script below, so you can authorise the script.
Finally, run gem install rspotify
in your default ruby2 and you should be off to the races.
Run the script with Spotify desktop app installed and it’ll open up a random album for you to press that sweet, sweet play button on ⏯.
I run the script from an Alfred workflow so I’ve got it close at hand.
Enjoy 🎷🎶
#!/usr/bin/env ruby
#/ Usage: open-random-album
#/ Open a random album in Spotify.
#/
require "rspotify"
class RandomAlbum
CLIENT_ID = "YOUR CLIENT ID"
CLIENT_SECRET = "YOUR CLIENT SECRET"
USERNAME = "YOUR USERNAME"
PLAYLIST_ID = "YOUR PLAYLIST'S ID"
def self.fetch
RSpotify.authenticate(CLIENT_ID, CLIENT_SECRET)
new.fetch
end
# Grab the albums from a playlist and choose one at random
def fetch
playlist = RSpotify::Playlist.find(USERNAME, PLAYLIST_ID)
albums_in_playlist(playlist).sample
end
private
def tracks_in_playlist(playlist)
limit = 100
offset = 0
[].tap do |result|
loop do
tracks = playlist.tracks(limit: limit, offset: offset)
break if tracks.empty?
result.concat(tracks)
offset += limit
end
end
end
def albums_in_playlist(playlist)
tracks = tracks_in_playlist(playlist)
tracks.reduce({}) do |acc, track|
acc[track.album.id] = track.album
acc
end.values
end
end
album = RandomAlbum.fetch
puts "Opening '#{album.name}' in Spotify"
system "open #{album.uri}"