97 lines
2.6 KiB
Ruby
97 lines
2.6 KiB
Ruby
require 'open-uri'
|
|
require 'lastfm'
|
|
|
|
class LastFmController < ApplicationController
|
|
|
|
@@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 = Lastfm.new(@@api_key, @@secret)
|
|
lastfm.session = lastfm.auth.get_session(params[:token])
|
|
session.user.lastfm_key = lastfm.session['key']
|
|
session.user.lastfm_username = lastfm.session['name']
|
|
session.user.save
|
|
render :text => '<script>window.close();</script>'
|
|
else
|
|
render :text => 'You Don\'t Fool Me'
|
|
end
|
|
else
|
|
render :text => 'So Much Trouble In The World'
|
|
end
|
|
end
|
|
|
|
def getinfo
|
|
return unless authorized?
|
|
@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
|
|
return unless authorized?
|
|
@res = {}
|
|
|
|
if params[:artist].nil? or params[:album].nil? or params[:track].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
|
|
|
|
lastfm = Lastfm.new(@@api_key, @@secret)
|
|
lastfm.session = user.lastfm_key
|
|
r = lastfm.track.update_now_playing(params[:artist], params[:track])
|
|
|
|
render :json => {:status => r ? 'success' : 'failed'}
|
|
return
|
|
end
|
|
|
|
def scrobble
|
|
return unless authorized?
|
|
@res = {}
|
|
|
|
if params[:artist].nil? or params[:album].nil? or params[:track].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
|
|
|
|
lastfm = Lastfm.new(@@api_key, @@secret)
|
|
lastfm.session = user.lastfm_key
|
|
r = lastfm.track.scrobble(params[:artist], params[:track], params[:album], Time.now.utc.to_i)
|
|
|
|
render :json => {:status => r ? 'success' : 'failed', time: Time.now.utc}
|
|
return
|
|
end
|
|
|
|
def self.api_key
|
|
@@api_key
|
|
end
|
|
|
|
end
|