Public search & find_by_name Artist methods
This commit is contained in:
parent
05d009f3ac
commit
f0a3883e87
@ -30,19 +30,22 @@ module MusicBrainz
|
|||||||
@artist
|
@artist
|
||||||
end
|
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
|
def self.search name
|
||||||
artists = []
|
artists = []
|
||||||
xml = Nokogiri::XML(MusicBrainz.load(
|
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|
|
xml.css('artist-list > artist').each do |a|
|
||||||
artist = {
|
artist = {
|
||||||
:name => a.css('name').text,
|
:name => a.first_element_child.text,
|
||||||
:weight => 0,
|
:weight => 0,
|
||||||
:desc => a.css('disambiguation').text unless a.css('disambiguation').empty?,
|
:desc => (a.css('disambiguation').text unless a.css('disambiguation').empty?),
|
||||||
:type => a.css('type').text.capitalize,
|
:type => a.attr('type'),
|
||||||
:mbid => a.attr('id')
|
:mbid => a.attr('id')
|
||||||
}
|
}
|
||||||
aliases = a.css('alias-list > alias').map{ |item| item.text }
|
aliases = a.css('alias-list > alias').map{ |item| item.text }
|
||||||
|
@ -6,7 +6,7 @@ module MusicBrainz
|
|||||||
def tracks
|
def tracks
|
||||||
if @tracks.nil? and not self.id.nil?
|
if @tracks.nil? and not self.id.nil?
|
||||||
@tracks = []
|
@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)
|
@tracks << MusicBrainz::Track.parse_xml(r)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -6,7 +6,7 @@ module MusicBrainz
|
|||||||
def releases
|
def releases
|
||||||
if @releases.nil? and not self.id.nil?
|
if @releases.nil? and not self.id.nil?
|
||||||
@releases = []
|
@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)
|
@releases << MusicBrainz::Release.parse_xml(r)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,7 +3,7 @@ module MusicBrainz
|
|||||||
attr_accessor :position, :recording_id, :title, :length
|
attr_accessor :position, :recording_id, :title, :length
|
||||||
|
|
||||||
def self.find mbid
|
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?
|
self.parse_xml(xml) unless xml.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,6 +8,17 @@ class TestMusicbrainz < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
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
|
setup do
|
||||||
@artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
|
@artist = MusicBrainz::Artist.find('69b39eab-6577-46a4-a9f5-817839092033')
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user