1
0
Fork 0
oldhaven/app/controllers/artist_controller.rb

67 lines
2.1 KiB
Ruby

require 'uri'
require 'open-uri'
class ArtistController < ApplicationController
def data
data = {}
name = params[:name].gsub('%20', ' ').gsub('+', ' ')
artist = Artist.find_by_name(name)
unless artist
mb_artist = MusicBrainzArtist.getByName(name)
if mb_artist
ImportController.importArtist(name)
render :json => {error:'loading'}
return
else
render :json => {error:404}
return
end
end
data['artist'] = {name: artist.name, desc: ActionController::Base.helpers.strip_tags(artist.desc), pic: artist.pic_url}
data['albums'] = []
albums = artist.albums
albums.each do |album|
tmp_album = {name: album.name, year: album.year, pic: album.pic_url}
album_tracks = []
bonus_tracks = []
album.tracks.each do |track|
tmp_track = {name: track.name, live: track.live, acoustic: track.acoustic}
if track.length
time = (track.length / 1000).round
time_m = (time / 60).floor
time_s = time - time_m * 60
tmp_track['duration'] = time_m.to_s + ':' + (time_s < 10 ? '0' : '') + time_s.to_s
else
tmp_track['duration'] = '0:00'
end
(track.bonus == 0 ? album_tracks : bonus_tracks) << tmp_track
end
tmp_album['tracks'] = {album: album_tracks, bonus: bonus_tracks}
data['albums'] << tmp_album
end
render :json => data
end
def autocomplete
autocomplete = ArtistController.getLastFmAutocomplete(params[:query])
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?
end
render :json => {
:query => params[:query],
:suggestions => suggestions
}
end
def self.getLastFmAutocomplete(query)
return nil if query.nil? or query.strip.empty?
json = ActiveSupport::JSON.decode(open(
'http://www.last.fm/search/autocomplete' <<
'?q=' << URI.escape(query)
).read)
return json.empty? ? nil : json
end
end