Class: Segue::Scrobbler
- Inherits:
-
Object
show all
- Defined in:
- lib/segue/scrobbler.rb
Defined Under Namespace
Classes: SessionError, SubmissionError
Constant Summary
collapse
- SCROBBLER_URL =
"http://ws.audioscrobbler.com/2.0/"
- REQUIRED =
%i[api_key secret user].freeze
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(api_key, secret, user, session_key = nil) ⇒ Scrobbler
Returns a new instance of Scrobbler.
58
59
60
61
62
63
|
# File 'lib/segue/scrobbler.rb', line 58
def initialize(api_key, secret, user, session_key = nil)
@api_key = api_key
@secret = secret
@user = user
@session_key = session_key
end
|
Instance Attribute Details
#api_key ⇒ Object
Returns the value of attribute api_key.
65
66
67
|
# File 'lib/segue/scrobbler.rb', line 65
def api_key
@api_key
end
|
#secret ⇒ Object
Returns the value of attribute secret.
65
66
67
|
# File 'lib/segue/scrobbler.rb', line 65
def secret
@secret
end
|
#user ⇒ Object
Returns the value of attribute user.
65
66
67
|
# File 'lib/segue/scrobbler.rb', line 65
def user
@user
end
|
Class Method Details
.ask(prompt) ⇒ Object
20
21
22
23
|
# File 'lib/segue/scrobbler.rb', line 20
def self.ask(prompt)
puts prompt
gets.chomp.strip
end
|
.authorise(scrobbler) ⇒ Object
49
50
51
52
53
54
55
56
|
# File 'lib/segue/scrobbler.rb', line 49
def self.authorise(scrobbler)
scrobbler.fetch_session_key do |url|
puts "A browser will now launch to allow to authorise this application to access your lastfm account"
`open '#{url}'`
puts "Press enter when you have authorised the application"
gets
end
end
|
.blank?(attribute) ⇒ Boolean
27
28
29
|
# File 'lib/segue/scrobbler.rb', line 27
def self.blank?(attribute)
(attribute || "").empty?
end
|
.load ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/segue/scrobbler.rb', line 31
def self.load
conf = Segue::Settings.new("~/.lastfm.yml")
prompt_for_credentials(conf)
return nil if REQUIRED.any? { |key| blank?(conf[key]) }
scrobbler = new(conf[:api_key], conf[:secret], conf[:user], conf[:session])
conf[:session] ||= authorise(scrobbler)
return nil if blank?(conf[:session])
scrobbler
end
|
.prompt_for_credentials(conf) ⇒ Object
43
44
45
46
47
|
# File 'lib/segue/scrobbler.rb', line 43
def self.prompt_for_credentials(conf)
conf[:api_key] = ask("What is the api key? ") if blank?(conf[:api_key])
conf[:secret] = ask("What is the secret? ") if blank?(conf[:secret])
conf[:user] = ask("What is your lastfm username? ") if blank?(conf[:user])
end
|
Instance Method Details
#fetch_session_key {|"http://www.last.fm/api/auth/?api_key=#{api_key}&token=#{request_token}"| ... } ⇒ Object
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/segue/scrobbler.rb', line 71
def fetch_session_key
doc = lfm :get, "auth.gettoken"
request_token = doc.root.elements["token"].text
yield "http://www.last.fm/api/auth/?api_key=#{api_key}&token=#{request_token}"
doc = lfm :get, "auth.getsession", token: request_token
status = doc.root.attributes["status"]
raise SubmissionError, status unless status == "ok"
@session_key = doc.root.elements["session"].elements["key"].text
end
|
#love(artist, title, params = {}) ⇒ Object
97
98
99
|
# File 'lib/segue/scrobbler.rb', line 97
def love(artist, title, params = {})
lfm_track "track.love", artist, title, params
end
|
#now_playing(artist, title, params = {}) ⇒ Object
92
93
94
|
# File 'lib/segue/scrobbler.rb', line 92
def now_playing(artist, title, params = {})
lfm_track "track.updateNowPlaying", artist, title, params
end
|
#scrobble(artist, title, params = {}) ⇒ Object
87
88
89
|
# File 'lib/segue/scrobbler.rb', line 87
def scrobble(artist, title, params = {})
lfm_track "track.scrobble", artist, title, params
end
|
#session_key ⇒ Object
67
68
69
|
# File 'lib/segue/scrobbler.rb', line 67
def session_key
@session_key or raise SessionError, "The session key must be set or fetched"
end
|
#with_profile_url {|"http://www.last.fm/user/#{user}"| ... } ⇒ Object
82
83
84
|
# File 'lib/segue/scrobbler.rb', line 82
def with_profile_url
yield "http://www.last.fm/user/#{user}" if user
end
|