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