1
0
Fork 0

Public search & find_by_name Artist methods

This commit is contained in:
Gregory Eremin 2011-09-14 11:45:42 +04:00
parent 05d009f3ac
commit f0a3883e87
5 changed files with 22 additions and 8 deletions

View File

@ -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 }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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