class MonkeyMusic::Generate::Runner
Public Class Methods
new()
click to toggle source
# File lib/monkey_music_generate/runner.rb, line 8 def initialize OptionParser.new do |opts| opts.banner = 'Usage: monkeymusic-generate [options]' opts.on('-g', '--generate TOPLIST_FILE', 'Generate a user from a toplist file.') do |user| @toplist_file = File.join(Dir.getwd, user) end opts.on('-o', '--out OUT_FILE', 'The file to dump a generated user to.') do |file| @out_file = File.join(Dir.getwd, file) end opts.on('-k', '--app-key KEY', 'Path to libspotify application key.') do |key| @spotify_appkey_file = File.join(Dir.getwd, key) end opts.on('-a', '--account ACCOUNT', 'Username for a Spotify premium account.') do |account| @spotify_account = account end opts.on('-w', '--password PASSWORD', 'Password for a Spotify premium account.') do |password| @spotify_password = password end opts.on_tail('-h', '--help', 'Show this message.') do puts opts exit end end.parse! end
Public Instance Methods
run()
click to toggle source
# File lib/monkey_music_generate/runner.rb, line 50 def run if generate_user? # Create user user = User.new # Connect to libspotify #Hallon.load_timeout = 0 session = Hallon::Session.initialize(IO.read(@spotify_appkey_file)) session.login!(@spotify_account, @spotify_password) # Load toplists puts "Loading toplists from #{@toplist_file}..." toplist_loader = ToplistLoader.new(@toplist_file) toplist_loader.load_for_user!(user) # Generate recommendations puts "Loading recommendations..." loaded_toplists = toplist_loader.loaded_toplists recommendation_loader = RecommendationLoader.new(loaded_toplists) recommendation_loader.load_for_user!(user) ## Disconnect from libspotify session.logout! # Evaluate recommendations puts "Evaluating recommendations..." score_system = ScoreSystem.new score_system.evaluate_user_recommendations!(user) # Dump and print the user File.open(@out_file, 'w') do |f| # Clean out all commas before writing f.write(user.dump.gsub(',', '')) end puts "=====" puts "DONE!" puts "=====" puts "Loaded tracks:" user.recommendations.group_by(&:tier).sort.each do |k,v| puts "#Tier #{k}:\t#{v.length}" end end end
Private Instance Methods
generate_user?()
click to toggle source
# File lib/monkey_music_generate/runner.rb, line 90 def generate_user? (defined? @toplist_file) && (defined? @out_file) && (defined? @spotify_appkey_file) && (defined? @spotify_account) && (defined? @spotify_password) end