Search and suggestions backend
This commit is contained in:
		
							parent
							
								
									17f5edf841
								
							
						
					
					
						commit
						24ca64a945
					
				@ -7,13 +7,16 @@ class ArtistController < ApplicationController
 | 
			
		||||
    name = params[:name].gsub('%20', ' ').gsub('+', ' ')
 | 
			
		||||
    artist = Artist.find_by_name(name)
 | 
			
		||||
    unless artist
 | 
			
		||||
      mb_artist = MusicBrainzArtist.getByName(name)
 | 
			
		||||
      if mb_artist
 | 
			
		||||
      results = ArtistController.musicBrainzSearch(name)
 | 
			
		||||
      if results[0].downcase == name.downcase and results[0] != name
 | 
			
		||||
        render :json => {correct: results[0]}
 | 
			
		||||
        return
 | 
			
		||||
      elsif results[0] == name
 | 
			
		||||
        ImportController.importArtist(name)
 | 
			
		||||
        render :json => {error:'loading'}
 | 
			
		||||
        render :json => {status: 'loading'}
 | 
			
		||||
        return
 | 
			
		||||
      else
 | 
			
		||||
        render :json => {error:404}
 | 
			
		||||
        render :json => {suggestions: results}
 | 
			
		||||
        return
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
@ -49,7 +52,7 @@ class ArtistController < ApplicationController
 | 
			
		||||
  	return	render :nothing => true if autocomplete.nil?
 | 
			
		||||
  	suggestions = []
 | 
			
		||||
    autocomplete["response"]["docs"].each do |doc|
 | 
			
		||||
    	suggestions << doc["artist"] unless suggestions.include?(doc["artist"]) or doc["artist"].nil?
 | 
			
		||||
    	suggestions << doc["artist"] unless suggestions.include?(doc["artist"]) or doc["artist"].nil? or doc['restype'] != 6
 | 
			
		||||
    end
 | 
			
		||||
		render :json => {
 | 
			
		||||
			:query => params[:query],
 | 
			
		||||
@ -57,7 +60,7 @@ class ArtistController < ApplicationController
 | 
			
		||||
		}
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	def self.getLastFmAutocomplete(query)
 | 
			
		||||
	def self.getLastFmAutocomplete query
 | 
			
		||||
  	return nil if query.nil? or query.strip.empty?
 | 
			
		||||
		json = ActiveSupport::JSON.decode(open(
 | 
			
		||||
		  'http://www.last.fm/search/autocomplete' <<
 | 
			
		||||
@ -65,4 +68,17 @@ class ArtistController < ApplicationController
 | 
			
		||||
    ).read)
 | 
			
		||||
    return json.empty? ? nil : json
 | 
			
		||||
	end
 | 
			
		||||
	
 | 
			
		||||
	def self.musicBrainzSearch(query)
 | 
			
		||||
	  begin
 | 
			
		||||
	    response = ActiveSupport::JSON.decode(open('http://search.test.musicbrainz.org/ws/2/artist/?fmt=json&query='+ URI.escape(query).gsub(/\&/, '%26').gsub(/\?/, '%3F') +'~').read)
 | 
			
		||||
	    artists = []
 | 
			
		||||
	    response['artist-list']['artist'].each do |artist|
 | 
			
		||||
	      artists << artist['name']
 | 
			
		||||
	    end
 | 
			
		||||
	    return artists
 | 
			
		||||
	  rescue
 | 
			
		||||
	    return {}
 | 
			
		||||
	  end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -5,14 +5,14 @@ class ImportController < ApplicationController
 | 
			
		||||
 | 
			
		||||
    # Get artist info
 | 
			
		||||
    artist_mb_xml = open(
 | 
			
		||||
      'http://musicbrainz.org/ws/2/artist/?query='+ URI.escape(name) +'&limit=1',
 | 
			
		||||
      'http://musicbrainz.org/ws/2/artist/?query='+ URI.escape(name).gsub(/\&/, '%26').gsub(/\?/, '%3F') +'&limit=1',
 | 
			
		||||
      'User-Agent' => @@user_agent
 | 
			
		||||
    ).read
 | 
			
		||||
    artist_mb_data = artist_mb_xml.scan(/<artist.*?type=\"(.+?)\"\sid=\"([a-f0-9-]+?)\">.*?<name>(.+?)<\/name>/m)
 | 
			
		||||
    artist_lastfm_xml = open(
 | 
			
		||||
      'http://ws.audioscrobbler.com/2.0/'+
 | 
			
		||||
      '?method=artist.getinfo&api_key='+ @@lastfm_api_key +
 | 
			
		||||
      '&artist='+ URI.escape(name)
 | 
			
		||||
      '&artist='+ URI.escape(name).gsub(/\&/, '%26').gsub(/\?/, '%3F')
 | 
			
		||||
    ).read
 | 
			
		||||
    
 | 
			
		||||
    # Save artist
 | 
			
		||||
 | 
			
		||||
@ -57,5 +57,6 @@ Beathaven::Application.routes.draw do
 | 
			
		||||
  # match ':controller(/:action(/:id(.:format)))'
 | 
			
		||||
  
 | 
			
		||||
  match 'artist/autocomplete' => 'artist#autocomplete'
 | 
			
		||||
  match 'artist/search' => 'artist#search'
 | 
			
		||||
  match 'artist/(:name)/' => 'artist#data', :constraints => { :name => /[^\/]*/ }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user