1
0
Fork 0
oldhaven/lib/tasks/artist_correct.rake

48 lines
1.6 KiB
Ruby

require 'cgi'
namespace :artist do
desc 'Find and fix uncorrect mbid'
task :correct => :environment do
Artist.where( :approved => nil ).each do |artist|
puts "Artist: "+artist.name
bh_albums = artist.albums.map{ |a| a.name.scan(/[a-zA-Z0-9]/).join() }
tmp = LastFM::Artist.get_top_albums( :artist => artist.name )['topalbums']
if tmp['album'].nil?
tmp['album'] = []
elsif tmp['album'].is_a? Hash
tmp['album'] = [tmp['album']]
end
lastfm_albums = tmp['album'].map do |a|
a['name'].scan(/[a-zA-Z0-9]/).join()
end
if (bh_albums & lastfm_albums).empty?
puts "Result: No intersection"
best_candidate = nil
best_intersection = 0
MusicBrainz::Artist.search(artist.name.gsub(/\!/, '')).each do |candidate|
candidate = MusicBrainz::Artist.find(candidate[:mbid])
candidate_albums = candidate.release_groups.map{ |a| a.title.scan(/[a-zA-Z0-9]/).join() }
if (candidate_albums & lastfm_albums).length > best_intersection
best_intersection = (candidate_albums & lastfm_albums).length
best_candidate = candidate.id
end
end
if best_candidate.nil?
puts "No better candidate found (now: "+artist.mbid.to_s+")\n\n"
artist.approved = 0
artist.save
else
puts "Better candidate found: "+best_candidate+" (now: "+artist.mbid.to_s+")\n\n"
artist.approved = 2
artist.save
end
else
artist.approved = 1
artist.save
puts "Result: OK\n\n"
end
sleep 1
end
end
end