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

105 lines
3.0 KiB
Ruby
Raw Normal View History

2011-06-22 07:23:07 +00:00
require 'open-uri'
2011-09-17 19:00:08 +00:00
require 'net/http'
2011-06-22 07:23:07 +00:00
class LastFmController < ApplicationController
2011-09-17 11:38:49 +00:00
before_filter :authorize
2011-06-22 07:23:07 +00:00
@@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?
2011-09-17 19:00:08 +00:00
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']
2011-06-22 07:23:07 +00:00
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
@res = {}
2011-06-22 22:56:32 +00:00
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,
2011-06-23 05:39:31 +00:00
:lastfm_login_url => 'http://www.last.fm/api/auth?api_key='+ @@api_key +
'&cb=http://'+ request.host << '/lastfm/connect/?sid='+ user.session.key
2011-06-22 22:56:32 +00:00
}
2011-06-22 07:23:07 +00:00
end
end
2011-06-22 22:56:32 +00:00
def listening
2011-06-22 23:44:27 +00:00
@res = {}
2011-09-17 19:00:08 +00:00
if params[:artist].nil? or params[:album].nil? or params[:name].nil?
render :json => { :status => 'bad params' }
2011-06-22 23:44:27 +00:00
return
end
2011-06-22 22:56:32 +00:00
user = User.find_by_vkid(params[:mid])
2011-06-22 23:44:27 +00:00
if user.lastfm_key.nil?
render :json => {:status => 'lastfm account is not connected', :user => user}
return
end
2011-06-22 22:56:32 +00:00
2011-09-17 19:00:08 +00:00
r = LastFM::Track.update_now_playing(
:track => params[:name].gsub(/\s/, '+').gsub(/\&/, '&amp;'),
:artist => params[:artist].gsub(/\s/, '+').gsub(/\&/, '&amp;'),
:album => params[:album].gsub(/\s/, '+').gsub(/\&/, '&amp;'),
:trackNumber => params[:position],
:mbid => params[:mbid],
:duration => params[:length],
:api_sig => true,
:sk => user.lastfm_key
)
2011-06-22 23:44:27 +00:00
2011-09-17 19:00:08 +00:00
render :json => { :status => r['error'].nil? ? 'success' : 'failed' }
2011-06-22 23:44:27 +00:00
return
2011-06-22 07:23:07 +00:00
end
2011-06-22 22:56:32 +00:00
def scrobble
2011-06-22 23:44:27 +00:00
@res = {}
2011-09-17 19:00:08 +00:00
if params[:artist].nil? or params[:album].nil? or params[:name].nil?
2011-06-22 23:44:27 +00:00
render :json => {:status => 'bad params'}
return
end
2011-06-22 22:56:32 +00:00
user = User.find_by_vkid(params[:mid])
2011-06-22 23:44:27 +00:00
if user.lastfm_key.nil?
render :json => {:status => 'lastfm account is not connected', :user => user}
return
end
2011-06-22 22:56:32 +00:00
2011-09-17 19:00:08 +00:00
r = LastFM::Track.scrobble(
:track => params[:name].gsub(/\s/, '+').gsub(/\&/, '&amp;'),
:timestamp => Time.now.utc.to_i,
:artist => params[:artist].gsub(/\s/, '+').gsub(/\&/, '&amp;'),
:album => params[:album].gsub(/\s/, '+').gsub(/\&/, '&amp;'),
:trackNumber => params[:position],
:mbid => params[:mbid],
:duration => params[:length],
:api_sig => true,
:sk => user.lastfm_key
)
2011-06-22 23:44:27 +00:00
2011-09-17 19:00:08 +00:00
render :json => { :status => r['error'].nil? ? 'success' : 'failed' }
2011-06-22 23:44:27 +00:00
return
2011-06-22 07:23:07 +00:00
end
end