Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@spudtrooper
Created October 2, 2011 17:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spudtrooper/1257664 to your computer and use it in GitHub Desktop.
Save spudtrooper/1257664 to your computer and use it in GitHub Desktop.
Creates a playlist for every artist in your library -- since the Roku app doesn't have browsing by artists.
#!/usr/bin/env ruby
#
# Creates a playlist for every artist in your library -- since the
# Roku app doesn't have browsing by artists. The following need to be
# in the ENV:
#
# export RDIO_KEY=...
# export RDIO_SECRET=...
#
# You have to install the rdio gem, too.
#
require 'rubygems'
require 'rdio'
def main(args)
# Save all the argument, because we use gets for the PIN
argv = []
argv << args.shift while not args.empty?
# Always use the current user because we could pass other arguments
user = Rdio::User.current
# Turn off the warning for not finding symbols...It's quite annoying
Rdio::log_couldnt_find_symbols = false
artists = []
if argv.empty?
#
# Collect all the artists for this user for no args
#
start = 0
count = 10
while true
all = user.artists_in_collection start,count
break if not all or all.empty?
artists += all
puts "Found #{all.length} artists, have #{artists.length}"
start += count
end
else
#
# Otherwise, we assume the arguments are artist URLs
#
argv.each do |arg|
all = []
begin
artist = Rdio::Artist.from_url arg
all << artist if artist
rescue Exception => e
puts "Couldn't get artist #{arg} from url"
puts e
end
if all.empty?
begin
artist = Rdio::Artist.from_short_code arg
all << artist if artist
rescue Exception => e
puts "Couldn't get artist #{arg} from short code"
puts e
end
end
if all.empty?
begin
all = Rdio::Artist.search arg,nil,['name']
rescue Exception => e
puts e
end
end
artists += all
puts "Found #{all.length} artists, have #{artists.length}"
end
end
# Go over all the artists, create a new playlist for each
artists.each do |artist|
name = artist.name
desc = "#{artist.name} All"
tracks = user.tracks_for_artist_in_collection artist
pl = Rdio::Playlist.create name,desc,tracks
next if not pl
puts "Added '#{pl.name}' with #{tracks.length} tracks"
end
end
main ARGV
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment