Public search & find_by_name Artist methods
This commit is contained in:
parent
05d009f3ac
commit
f0a3883e87
@ -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 }
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user