lastfm 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +11 -0
- data/Gemfile.lock +42 -0
- data/README.rdoc +4 -0
- data/Rakefile +23 -24
- data/VERSION +1 -1
- data/lib/lastfm.rb +9 -2
- data/lib/lastfm/method_category/auth.rb +4 -0
- data/lib/lastfm/method_category/library.rb +5 -1
- data/lib/lastfm/util.rb +4 -0
- data/spec/fixtures/library_get_tracks.xml +20 -0
- data/spec/lastfm_spec.rb +36 -1
- metadata +64 -26
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (3.2.0)
|
5
|
+
i18n (~> 0.6)
|
6
|
+
multi_json (~> 1.0)
|
7
|
+
diff-lcs (1.1.3)
|
8
|
+
git (1.2.5)
|
9
|
+
httparty (0.8.1)
|
10
|
+
multi_json
|
11
|
+
multi_xml
|
12
|
+
i18n (0.6.0)
|
13
|
+
jeweler (1.6.4)
|
14
|
+
bundler (~> 1.0)
|
15
|
+
git (>= 1.2.5)
|
16
|
+
rake
|
17
|
+
json (1.6.5)
|
18
|
+
multi_json (1.0.4)
|
19
|
+
multi_xml (0.4.1)
|
20
|
+
rake (0.9.2.2)
|
21
|
+
rdoc (3.12)
|
22
|
+
json (~> 1.4)
|
23
|
+
rspec (2.3.0)
|
24
|
+
rspec-core (~> 2.3.0)
|
25
|
+
rspec-expectations (~> 2.3.0)
|
26
|
+
rspec-mocks (~> 2.3.0)
|
27
|
+
rspec-core (2.3.1)
|
28
|
+
rspec-expectations (2.3.0)
|
29
|
+
diff-lcs (~> 1.1.2)
|
30
|
+
rspec-mocks (2.3.0)
|
31
|
+
xml-simple (1.1.1)
|
32
|
+
|
33
|
+
PLATFORMS
|
34
|
+
ruby
|
35
|
+
|
36
|
+
DEPENDENCIES
|
37
|
+
activesupport (>= 3.0.3)
|
38
|
+
httparty
|
39
|
+
jeweler (~> 1.6.4)
|
40
|
+
rdoc
|
41
|
+
rspec (~> 2.3.0)
|
42
|
+
xml-simple
|
data/README.rdoc
CHANGED
@@ -23,6 +23,7 @@ It supports methods which require {authentication}[http://www.last.fm/api/authen
|
|
23
23
|
|
24
24
|
=== Auth
|
25
25
|
|
26
|
+
* {auth.getMobileSession}[http://www.lastfm.jp/api/show?service=266]
|
26
27
|
* {auth.getToken}[http://www.lastfm.jp/api/show?service=265]
|
27
28
|
* {auth.getSession}[http://www.lastfm.jp/api/show?service=125]
|
28
29
|
|
@@ -66,6 +67,7 @@ It supports methods which require {authentication}[http://www.last.fm/api/authen
|
|
66
67
|
=== Library
|
67
68
|
|
68
69
|
* {library.getArtists}[http://www.lastfm.jp/api/show?service=322]
|
70
|
+
* {library.getTracks}[http://www.last.fm/api/show/library.getTracks]
|
69
71
|
|
70
72
|
== Installation
|
71
73
|
|
@@ -91,6 +93,8 @@ It supports methods which require {authentication}[http://www.last.fm/api/authen
|
|
91
93
|
* {dbolson}[https://github.com/dbolson]
|
92
94
|
* {webs}[https://github.com/webs]
|
93
95
|
* {magnolia-fan}[https://github.com/magnolia-fan]
|
96
|
+
* {garyadamshannon}[https://github.com/garyadamshannon]
|
97
|
+
* {Garthex}[https://github.com/Garthex]
|
94
98
|
|
95
99
|
== Note on Patches/Pull Requests
|
96
100
|
|
data/Rakefile
CHANGED
@@ -1,36 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
2
12
|
require 'rake'
|
3
13
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
gem.authors = ["youpy"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 2.0.0"
|
14
|
-
gem.add_dependency "httparty"
|
15
|
-
gem.add_dependency "xml-simple"
|
16
|
-
gem.add_dependency "activesupport", ">= 3.0.3"
|
17
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
-
end
|
19
|
-
Jeweler::GemcutterTasks.new
|
20
|
-
rescue LoadError
|
21
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
gem.name = "lastfm"
|
17
|
+
gem.summary = %Q{A Ruby interface for Last.fm Web Services}
|
18
|
+
gem.description = %Q{A ruby interface for Last.fm web services version 2.0}
|
19
|
+
gem.email = "youpy@buycheapviagraonlinenow.com"
|
20
|
+
gem.homepage = "http://github.com/youpy/ruby-lastfm"
|
21
|
+
gem.authors = ["youpy"]
|
22
22
|
end
|
23
23
|
|
24
|
+
require 'rspec/core'
|
24
25
|
require 'rspec/core/rake_task'
|
25
|
-
|
26
|
-
|
27
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
26
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
27
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
28
28
|
end
|
29
29
|
|
30
|
-
task :
|
31
|
-
task :default => :core
|
30
|
+
task :default => :spec
|
32
31
|
|
33
|
-
require '
|
32
|
+
require 'rdoc/task'
|
34
33
|
Rake::RDocTask.new do |rdoc|
|
35
34
|
version = File.read('VERSION')
|
36
35
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.1.0
|
data/lib/lastfm.rb
CHANGED
@@ -23,7 +23,14 @@ class Lastfm
|
|
23
23
|
attr_accessor :session
|
24
24
|
|
25
25
|
class Error < StandardError; end
|
26
|
-
class ApiError < Error
|
26
|
+
class ApiError < Error
|
27
|
+
attr_reader :code
|
28
|
+
|
29
|
+
def initialize(message, code = nil)
|
30
|
+
super(message)
|
31
|
+
@code = code
|
32
|
+
end
|
33
|
+
end
|
27
34
|
|
28
35
|
def initialize(api_key, api_secret)
|
29
36
|
@api_key = api_key
|
@@ -76,7 +83,7 @@ class Lastfm
|
|
76
83
|
|
77
84
|
response = Response.new(self.class.send(http_method, '/', (http_method == :post ? :body : :query) => params).body)
|
78
85
|
unless response.success?
|
79
|
-
raise ApiError.new(response.message)
|
86
|
+
raise ApiError.new(response.message, response.error)
|
80
87
|
end
|
81
88
|
|
82
89
|
response
|
@@ -8,6 +8,10 @@ class Lastfm
|
|
8
8
|
method_for_authentication :get_session, [:token], [] do |response|
|
9
9
|
response.xml['session']
|
10
10
|
end
|
11
|
+
|
12
|
+
method_for_authentication :get_mobile_session, [:username, :authToken], [] do |response|
|
13
|
+
response.xml['session']
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
@@ -2,7 +2,11 @@ class Lastfm
|
|
2
2
|
module MethodCategory
|
3
3
|
class Library < Base
|
4
4
|
regular_method :get_artists, [:user], [[:limit, nil], [:page, nil]] do |response|
|
5
|
-
response.xml['artists']['artist']
|
5
|
+
Util.force_array(response.xml['artists']['artist'])
|
6
|
+
end
|
7
|
+
|
8
|
+
regular_method :get_tracks, [:user], [[:artist, nil], [:album, nil], [:page, nil], [:limit, nil]] do |response|
|
9
|
+
Util.force_array(response.xml['tracks']['track'])
|
6
10
|
end
|
7
11
|
end
|
8
12
|
end
|
data/lib/lastfm/util.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
<lfm status="ok">
|
2
|
+
<tracks user="RJ" page="1" perPage="50" totalPages="20">
|
3
|
+
<track rank="1">
|
4
|
+
<name>Learning to Live</name>
|
5
|
+
<playcount>44</playcount>
|
6
|
+
<tagcount>0</tagcount>
|
7
|
+
<mbid></mbid>
|
8
|
+
<url>http://www.last.fm/music/Dream+Theater/_/Learning+to+Live</url>
|
9
|
+
<streamable fulltrack="0">1</streamable>
|
10
|
+
<artist>
|
11
|
+
<name>Dream Theater</name>
|
12
|
+
<mbid>28503ab7-8bf2-4666-a7bd-2644bfc7cb1d</mbid>
|
13
|
+
<url>http://www.last.fm/music/Dream+Theater</url>
|
14
|
+
</artist>
|
15
|
+
<image size="small">...</image>
|
16
|
+
<image size="medium">...</image>
|
17
|
+
<image size="large">...</image>
|
18
|
+
</track>
|
19
|
+
</tracks>
|
20
|
+
</lfm>
|
data/spec/lastfm_spec.rb
CHANGED
@@ -107,7 +107,9 @@ XML
|
|
107
107
|
|
108
108
|
lambda {
|
109
109
|
@lastfm.request('xxx.yyy', { :foo => 'bar' }, :post)
|
110
|
-
}.should raise_error(Lastfm::ApiError, 'Invalid API key - You must be granted a valid key by last.fm')
|
110
|
+
}.should raise_error(Lastfm::ApiError, 'Invalid API key - You must be granted a valid key by last.fm') {|error|
|
111
|
+
error.code.should == 10
|
112
|
+
}
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
@@ -145,6 +147,24 @@ XML
|
|
145
147
|
session['name'].should eql('MyLastFMUsername')
|
146
148
|
session['key'].should eql('zzzyyyxxx')
|
147
149
|
end
|
150
|
+
|
151
|
+
it 'should get mobile session' do
|
152
|
+
@lastfm.should_receive(:request).
|
153
|
+
with('auth.getMobileSession', { :username => 'xxxyyyzzz', :authToken => 'xxxxAuthTokenxxxx' }, :get, true).
|
154
|
+
and_return(make_response(<<XML))
|
155
|
+
<?xml version="1.0" encoding="utf-8"?>
|
156
|
+
<lfm status="ok">
|
157
|
+
<session>
|
158
|
+
<name>MyLastFMUsername</name>
|
159
|
+
<key>zzzyyyxxx</key>
|
160
|
+
<subscriber>0</subscriber>
|
161
|
+
</session>
|
162
|
+
</lfm>
|
163
|
+
XML
|
164
|
+
session = @lastfm.auth.get_mobile_session('xxxyyyzzz', 'xxxxAuthTokenxxxx')
|
165
|
+
session['name'].should eql('MyLastFMUsername')
|
166
|
+
session['key'].should eql('zzzyyyxxx')
|
167
|
+
end
|
148
168
|
end
|
149
169
|
|
150
170
|
describe '#track' do
|
@@ -497,6 +517,21 @@ XML
|
|
497
517
|
@lastfm.library.should be_an_instance_of(Lastfm::MethodCategory::Library)
|
498
518
|
end
|
499
519
|
|
520
|
+
describe '#get_tracks' do
|
521
|
+
it 'should get the tracks\' info' do
|
522
|
+
@lastfm.should_receive(:request).with('library.getTracks', {
|
523
|
+
:user => 'test',
|
524
|
+
:artist => 'foo',
|
525
|
+
:album => 'bar',
|
526
|
+
:limit => nil,
|
527
|
+
:page => nil
|
528
|
+
}).and_return(make_response('library_get_tracks'))
|
529
|
+
tracks = @lastfm.library.get_tracks('test', 'foo', 'bar')
|
530
|
+
tracks[0]['name'].should eql('Learning to Live')
|
531
|
+
tracks.size.should == 1
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
500
535
|
describe '#get_artists' do
|
501
536
|
it 'should get the artists\' info' do
|
502
537
|
@lastfm.should_receive(:request).with('library.getArtists', {
|
metadata
CHANGED
@@ -4,9 +4,10 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
- 0
|
8
7
|
- 1
|
9
|
-
|
8
|
+
- 0
|
9
|
+
segments_generated: true
|
10
|
+
version: 1.1.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- youpy
|
@@ -14,61 +15,93 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2012-01-
|
18
|
+
date: 2012-01-23 00:00:00 +09:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
prerelease: false
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
23
|
requirements:
|
25
24
|
- - ">="
|
26
25
|
- !ruby/object:Gem::Version
|
27
26
|
segments:
|
28
|
-
- 2
|
29
|
-
- 0
|
30
27
|
- 0
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
- !ruby/object:Gem::Dependency
|
28
|
+
segments_generated: true
|
29
|
+
version: "0"
|
30
|
+
requirement: *id001
|
35
31
|
name: httparty
|
36
32
|
prerelease: false
|
37
|
-
|
33
|
+
type: :runtime
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
38
36
|
requirements:
|
39
37
|
- - ">="
|
40
38
|
- !ruby/object:Gem::Version
|
41
39
|
segments:
|
42
40
|
- 0
|
41
|
+
segments_generated: true
|
43
42
|
version: "0"
|
44
|
-
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
43
|
+
requirement: *id002
|
47
44
|
name: xml-simple
|
48
45
|
prerelease: false
|
49
|
-
|
46
|
+
type: :runtime
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
50
49
|
requirements:
|
51
50
|
- - ">="
|
52
51
|
- !ruby/object:Gem::Version
|
53
52
|
segments:
|
53
|
+
- 3
|
54
54
|
- 0
|
55
|
-
|
55
|
+
- 3
|
56
|
+
segments_generated: true
|
57
|
+
version: 3.0.3
|
58
|
+
requirement: *id003
|
59
|
+
name: activesupport
|
60
|
+
prerelease: false
|
56
61
|
type: :runtime
|
57
|
-
version_requirements: *id003
|
58
62
|
- !ruby/object:Gem::Dependency
|
59
|
-
|
63
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 2
|
69
|
+
- 3
|
70
|
+
- 0
|
71
|
+
segments_generated: true
|
72
|
+
version: 2.3.0
|
73
|
+
requirement: *id004
|
74
|
+
name: rspec
|
75
|
+
prerelease: false
|
76
|
+
type: :development
|
77
|
+
- !ruby/object:Gem::Dependency
|
78
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
segments:
|
83
|
+
- 1
|
84
|
+
- 6
|
85
|
+
- 4
|
86
|
+
segments_generated: true
|
87
|
+
version: 1.6.4
|
88
|
+
requirement: *id005
|
89
|
+
name: jeweler
|
60
90
|
prerelease: false
|
61
|
-
|
91
|
+
type: :development
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
62
94
|
requirements:
|
63
95
|
- - ">="
|
64
96
|
- !ruby/object:Gem::Version
|
65
97
|
segments:
|
66
|
-
- 3
|
67
98
|
- 0
|
68
|
-
|
69
|
-
version:
|
70
|
-
|
71
|
-
|
99
|
+
segments_generated: true
|
100
|
+
version: "0"
|
101
|
+
requirement: *id006
|
102
|
+
name: rdoc
|
103
|
+
prerelease: false
|
104
|
+
type: :development
|
72
105
|
description: A ruby interface for Last.fm web services version 2.0
|
73
106
|
email: youpy@buycheapviagraonlinenow.com
|
74
107
|
executables: []
|
@@ -81,6 +114,8 @@ extra_rdoc_files:
|
|
81
114
|
files:
|
82
115
|
- .document
|
83
116
|
- .rspec
|
117
|
+
- Gemfile
|
118
|
+
- Gemfile.lock
|
84
119
|
- LICENSE
|
85
120
|
- README.rdoc
|
86
121
|
- Rakefile
|
@@ -102,6 +137,7 @@ files:
|
|
102
137
|
- spec/fixtures/artist_get_info.xml
|
103
138
|
- spec/fixtures/geo_get_events.xml
|
104
139
|
- spec/fixtures/library_get_artists.xml
|
140
|
+
- spec/fixtures/library_get_tracks.xml
|
105
141
|
- spec/fixtures/ng.xml
|
106
142
|
- spec/fixtures/ok.xml
|
107
143
|
- spec/fixtures/track_get_correction.xml
|
@@ -135,6 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
171
|
- !ruby/object:Gem::Version
|
136
172
|
segments:
|
137
173
|
- 0
|
174
|
+
segments_generated: true
|
138
175
|
version: "0"
|
139
176
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
177
|
requirements:
|
@@ -142,6 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
179
|
- !ruby/object:Gem::Version
|
143
180
|
segments:
|
144
181
|
- 0
|
182
|
+
segments_generated: true
|
145
183
|
version: "0"
|
146
184
|
requirements: []
|
147
185
|
|