diff --git a/lib/models/music_brainz/artist.rb b/lib/models/music_brainz/artist.rb index 2cfccb8..6284fa6 100644 --- a/lib/models/music_brainz/artist.rb +++ b/lib/models/music_brainz/artist.rb @@ -30,19 +30,22 @@ module MusicBrainz @artist end - private + def self.find_by_name name + matches = self.search name + matches.length.zero? ? nil : self.find(matches.first[:mbid]) + end def self.search name artists = [] xml = Nokogiri::XML(MusicBrainz.load( - 'http://musicbrainz.org/ws/2/artist/?query='+ URI.escape(query).gsub(/\&/, '%26').gsub(/\?/, '%3F') +'~&limit=50' + 'http://musicbrainz.org/ws/2/artist/?query='+ URI.escape(name).gsub(/\&/, '%26').gsub(/\?/, '%3F') +'~&limit=50' )) xml.css('artist-list > artist').each do |a| artist = { - :name => a.css('name').text, + :name => a.first_element_child.text, :weight => 0, - :desc => a.css('disambiguation').text unless a.css('disambiguation').empty?, - :type => a.css('type').text.capitalize, + :desc => (a.css('disambiguation').text unless a.css('disambiguation').empty?), + :type => a.attr('type'), :mbid => a.attr('id') } aliases = a.css('alias-list > alias').map{ |item| item.text } diff --git a/lib/models/music_brainz/release.rb b/lib/models/music_brainz/release.rb index a52f692..97f39a1 100644 --- a/lib/models/music_brainz/release.rb +++ b/lib/models/music_brainz/release.rb @@ -6,7 +6,7 @@ module MusicBrainz def tracks if @tracks.nil? and not self.id.nil? @tracks = [] - Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/' + self.id + '?inc=recordings')).css('medium-list > medium > track-list > track').each do |r| + Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/' + self.id + '?inc=recordings&limit=100')).css('medium-list > medium > track-list > track').each do |r| @tracks << MusicBrainz::Track.parse_xml(r) end end diff --git a/lib/models/music_brainz/release_group.rb b/lib/models/music_brainz/release_group.rb index b100a3b..cd49e7d 100644 --- a/lib/models/music_brainz/release_group.rb +++ b/lib/models/music_brainz/release_group.rb @@ -6,7 +6,7 @@ module MusicBrainz def releases if @releases.nil? and not self.id.nil? @releases = [] - Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/?release-group=' + self.id)).css('release').each do |r| + Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/release/?release-group=' + self.id + '&limit=100')).css('release').each do |r| @releases << MusicBrainz::Release.parse_xml(r) end end diff --git a/lib/models/music_brainz/track.rb b/lib/models/music_brainz/track.rb index f4c6d3f..eabcbd7 100644 --- a/lib/models/music_brainz/track.rb +++ b/lib/models/music_brainz/track.rb @@ -3,7 +3,7 @@ module MusicBrainz attr_accessor :position, :recording_id, :title, :length def self.find mbid - xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/recording/' + mbid)) + xml = Nokogiri::XML(MusicBrainz.load('http://musicbrainz.org/ws/2/recording/' + mbid + '?limit=100')) self.parse_xml(xml) unless xml.nil? end diff --git a/test/test_musicbrainz.rb b/test/test_musicbrainz.rb index 88ce56f..c4286dc 100644 --- a/test/test_musicbrainz.rb +++ b/test/test_musicbrainz.rb @@ -8,6 +8,17 @@ class TestMusicbrainz < Test::Unit::TestCase end end + should "search for artists by name" do + matches = MusicBrainz::Artist.search('Kasabian') + assert_operator(0, :<, matches.length) + assert_equal("Kasabian", matches.first[:name]) + end + + should "get correct artist by name" do + @artist = MusicBrainz::Artist.find_by_name('Kasabian') + assert_equal("69b39eab-6577-46a4-a9f5-817839092033", @artist.id) + end + setup do @artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033') end