require 'open-uri' require 'net/http' class LastFmController < ApplicationController before_filter :authorize @@api_key = '04fda005dbf61a50af5abc3e90f111f2' @@secret = '19e70e98b291e9f15d0516925945eb1b' def connect unless params[:sid].nil? or params[:token].nil? session = Session.find_by_key(params[:sid]) unless session.nil? lastfm_api_session = LastFM::Auth.get_session(:token => params[:token], :api_sig => true) session.user.lastfm_key = lastfm_api_session["session"]['key'] session.user.lastfm_username = lastfm_api_session["session"]['name'] session.user.save render :text => '' else render :text => 'You Don\'t Fool Me' end else render :text => 'So Much Trouble In The World' end end def getinfo @res = {} user = User.find_by_vkid(params[:mid]) unless user.lastfm_key.nil? render :json => { :connected => true, :username => user.lastfm_username } else render :json => { :connected => false, :lastfm_login_url => 'http://www.last.fm/api/auth?api_key='+ @@api_key + '&cb=http://'+ request.host << '/lastfm/connect/?sid='+ user.session.key } end end def listening @res = {} if params[:artist].nil? or params[:album].nil? or params[:name].nil? render :json => { :status => 'bad params' } return end user = User.find_by_vkid(params[:mid]) if user.lastfm_key.nil? render :json => {:status => 'lastfm account is not connected', :user => user} return end r = LastFM::Track.update_now_playing( :track => params[:name], :artist => params[:artist], :album => params[:album], :trackNumber => params[:position], # :mbid => params[:mbid], :duration => params[:length], :sk => user.lastfm_key # Auth session key ) render :json => { :status => r['error'].nil? ? 'success' : 'failed' } return end def scrobble @res = {} if params[:artist].nil? or params[:album].nil? or params[:name].nil? render :json => {:status => 'bad params'} return end user = User.find_by_vkid(params[:mid]) if user.lastfm_key.nil? render :json => {:status => 'lastfm account is not connected', :user => user} return end r = LastFM::Track.scrobble( :track => params[:name], :timestamp => Time.now.utc.to_i, :artist => params[:artist], :album => params[:album], :trackNumber => params[:position], # :mbid => params[:mbid], :duration => params[:length], :sk => user.lastfm_key # Auth session key ) render :json => { :status => r['error'].nil? ? 'success' : 'failed' } return end end