rscrobbler 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/lib/lastfm/album.rb +197 -55
- data/lib/lastfm/artist.rb +291 -48
- data/lib/lastfm/auth.rb +33 -0
- data/lib/lastfm/buylink.rb +34 -34
- data/lib/lastfm/chart.rb +61 -0
- data/lib/lastfm/event.rb +128 -62
- data/lib/lastfm/geo.rb +123 -0
- data/lib/lastfm/group.rb +67 -0
- data/lib/lastfm/library.rb +115 -0
- data/lib/lastfm/playlist.rb +38 -0
- data/lib/lastfm/radio.rb +39 -0
- data/lib/lastfm/shout.rb +20 -20
- data/lib/lastfm/struct.rb +59 -40
- data/lib/lastfm/tag.rb +144 -29
- data/lib/lastfm/tasteometer.rb +35 -0
- data/lib/lastfm/track.rb +324 -57
- data/lib/lastfm/user.rb +264 -0
- data/lib/lastfm/venue.rb +60 -25
- data/lib/lastfm/wiki.rb +20 -20
- data/lib/rscrobbler.rb +207 -214
- data/test/test_album.rb +35 -35
- metadata +20 -25
- data/lib/lastfm/api/album.rb +0 -140
- data/lib/lastfm/api/artist.rb +0 -243
- data/lib/lastfm/api/auth.rb +0 -35
- data/lib/lastfm/api/chart.rb +0 -63
- data/lib/lastfm/api/event.rb +0 -71
- data/lib/lastfm/api/geo.rb +0 -125
- data/lib/lastfm/api/group.rb +0 -69
- data/lib/lastfm/api/library.rb +0 -117
- data/lib/lastfm/api/playlist.rb +0 -40
- data/lib/lastfm/api/radio.rb +0 -41
- data/lib/lastfm/api/tag.rb +0 -120
- data/lib/lastfm/api/tasteometer.rb +0 -37
- data/lib/lastfm/api/track.rb +0 -272
- data/lib/lastfm/api/user.rb +0 -266
- data/lib/lastfm/api/venue.rb +0 -40
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTc2YTM0NGVjZWU5NzRiNWRlYzZhYjVkZTEwNmIwNzM1ZDk1NzVmYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MGJiMzZhNjRhMmMwOTJlZjkzYzE4ODQzYmJlYThhMmU2ZDYwNTIzMQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWUyODBhMWU3YmE0ZTMxYmZkNDAyOTFiZjk2NmEzMmMwMDRmYjk0M2UwMjk0
|
10
|
+
Y2I5YTVhNGY5Mzc4MGJhOTdkZTUzMmZlOWNiZjRjYzkxYjY3NDdhZGI1NTgw
|
11
|
+
NDU1M2YwMmZmMmFiYzdmZDQ4ZTEwYWZlM2ZjMWM3NDYzMDNmYTI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NmFmMzBhZDMzNTY2ZGM2MDFmNzZjZDE2NjM3YTQ2ZmU3ZTMyOGRmZDY4NjY2
|
14
|
+
Y2E3MzQ4NjM2N2JiNmE3ZjMyMjAyZjMzODE1MDU1MjYyZTk2YzQ5NDViOWRl
|
15
|
+
YWQ1MTc4ODlkODc1MjgyNjIxZDNmMzFhODFhMTQ1ZmE1ODQzMDg=
|
data/lib/lastfm/album.rb
CHANGED
@@ -1,55 +1,197 @@
|
|
1
|
-
module LastFM
|
2
|
-
|
3
|
-
# @attr [LastFM::Artist, String] artist
|
4
|
-
# @attr [Fixnum] id
|
5
|
-
# @attr [Hash] images
|
6
|
-
# @attr [Fixnum] listeners
|
7
|
-
# @attr [String] mbid
|
8
|
-
# @attr [String] name
|
9
|
-
# @attr [Fixnum] playcount
|
10
|
-
# @attr [Time] release_date
|
11
|
-
# @attr [Boolean] streamable
|
12
|
-
# @attr [Array<LastFM::Tag>] tags
|
13
|
-
# @attr [Array<LastFM::Track>] tracks
|
14
|
-
# @attr [String] url
|
15
|
-
# @attr [LastFM::Wiki] wiki
|
16
|
-
class Album < Struct.new(:artist, :id, :images, :listeners, :mbid, :name, :playcount, :release_date, :streamable, :tags, :tracks, :url, :wiki)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
1
|
+
module LastFM
|
2
|
+
|
3
|
+
# @attr [LastFM::Artist, String] artist
|
4
|
+
# @attr [Fixnum] id
|
5
|
+
# @attr [Hash] images
|
6
|
+
# @attr [Fixnum] listeners
|
7
|
+
# @attr [String] mbid
|
8
|
+
# @attr [String] name
|
9
|
+
# @attr [Fixnum] playcount
|
10
|
+
# @attr [Time] release_date
|
11
|
+
# @attr [Boolean] streamable
|
12
|
+
# @attr [Array<LastFM::Tag>] tags
|
13
|
+
# @attr [Array<LastFM::Track>] tracks
|
14
|
+
# @attr [String] url
|
15
|
+
# @attr [LastFM::Wiki] wiki
|
16
|
+
class Album < Struct.new(:artist, :id, :images, :listeners, :mbid, :name, :playcount, :release_date, :streamable, :tags, :tracks, :url, :wiki)
|
17
|
+
|
18
|
+
# API Methods
|
19
|
+
class << self
|
20
|
+
|
21
|
+
# Tag an album using a list of user supplied tags.
|
22
|
+
#
|
23
|
+
# @option params [String, required] :artist the artist name
|
24
|
+
# @option params [String, required] :album the album name
|
25
|
+
# @option params [Array, required] :tags up to 10 tags to apply to this album
|
26
|
+
# @see http://www.last.fm/api/show?service=302
|
27
|
+
def add_tags( params )
|
28
|
+
LastFM.requires_authentication
|
29
|
+
LastFM.post( "album.addTags", params )
|
30
|
+
end
|
31
|
+
|
32
|
+
# Get a list of buy links for an album.
|
33
|
+
#
|
34
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
35
|
+
# @option params [String, required unless :mbid] :album the album name
|
36
|
+
# @option params [String, required] :country a country name, as defined by ISO 3166-1
|
37
|
+
# @option params [String, optional] :mbid the musicbrainz id for the album
|
38
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
39
|
+
# @return [Array<LastFM::Buylink>] collection of links where this album can be bought or downloaded
|
40
|
+
# @see http://www.last.fm/api/show?service=429
|
41
|
+
def get_buylinks( params )
|
42
|
+
xml = LastFM.get( "album.getBuylinks", params )
|
43
|
+
[:physical, :download].each_with_object([]) do |type, buylinks|
|
44
|
+
xml.find("affiliations/#{type}s/affiliation").each do |buylink|
|
45
|
+
buylinks << LastFM::Buylink.from_xml( buylink, :type => type )
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Get the metadata for an album.
|
51
|
+
#
|
52
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
53
|
+
# @option params [String, required unless :mbid] :album the album name
|
54
|
+
# @option params [String, optional] :mbid the musicbrainz id for the album
|
55
|
+
# @option params [String, optional] :lang the language to return the biography in, expressed as an ISO 639 alpha-2 code
|
56
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
57
|
+
# @option params [String, optional] :username username whose playcount for this album is to be returned in the reponse
|
58
|
+
# @return [LastFM::Album] album constructed from the metadata contained in the response
|
59
|
+
# @see http://www.last.fm/api/show?service=290
|
60
|
+
def get_info( params )
|
61
|
+
xml = LastFM.get( "album.getInfo", params )
|
62
|
+
LastFM::Album.from_xml( xml )
|
63
|
+
end
|
64
|
+
|
65
|
+
# Get shouts for an album.
|
66
|
+
#
|
67
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
68
|
+
# @option params [String, required unless :mbid] :album the album name
|
69
|
+
# @option params [String, optional] :mbid the musicbrainz id for the album
|
70
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
71
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
72
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
73
|
+
# @return [Array<LastFM::Shout>] collection of shouts
|
74
|
+
# @see http://www.last.fm/api/show?service=450
|
75
|
+
def get_shouts( params )
|
76
|
+
xml = LastFM.get( "album.getShouts", params )
|
77
|
+
xml.find('shouts/shout').map do |shout|
|
78
|
+
LastFM::Shout.from_xml( shout )
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Get the tags applied by an individual user to an album.
|
83
|
+
#
|
84
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
85
|
+
# @option params [String, required unless :mbid] :album the album name
|
86
|
+
# @option params [String, optional] :mbid the musicbrainz id for the album
|
87
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
88
|
+
# @option params [String, optional] :user if called in non-authenticated mode you must specify the user to look up
|
89
|
+
# @see http://www.last.fm/api/show?service=317
|
90
|
+
def get_tags( params )
|
91
|
+
secure = !params.include?(:user)
|
92
|
+
LastFM.requires_authentication if secure
|
93
|
+
xml = LastFM.get( "album.getTags", params, secure )
|
94
|
+
xml.find('tags/tag').map do |tag|
|
95
|
+
LastFM::Tag.from_xml( tag )
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# Get the top tags for an album, ordered by popularity.
|
100
|
+
#
|
101
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
102
|
+
# @option params [String, required unless :mbid] :album the album name
|
103
|
+
# @option params [String, optional] :mbid the musicbrainz id for the album
|
104
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
105
|
+
# @return [Array<LastFM::Tag>] list of tags sorted by popularity
|
106
|
+
# @see http://www.last.fm/api/show?service=438
|
107
|
+
def get_top_tags( params )
|
108
|
+
xml = LastFM.get( "album.getTopTags", params )
|
109
|
+
xml.find('toptags/tag').map do |tag|
|
110
|
+
LastFM::Tag.from_xml( tag )
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# Remove a user's tag from an album.
|
115
|
+
#
|
116
|
+
# @option params [String, required] :artist the artist name
|
117
|
+
# @option params [String, required] :album the album name
|
118
|
+
# @option params [String, required] :tag a single user tag to remove from this album
|
119
|
+
# @see http://www.last.fm/api/show?service=314
|
120
|
+
def remove_tag( params )
|
121
|
+
LastFM.requires_authentication
|
122
|
+
LastFM.post( "album.removeTag", params )
|
123
|
+
end
|
124
|
+
|
125
|
+
# Search for an album by name. Returns album matches sorted by relevance.
|
126
|
+
#
|
127
|
+
# @option params [String, required] :album the album name
|
128
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
129
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
130
|
+
# @return [Array<LastFM::Album>] list of albums sorted by relevance
|
131
|
+
# @see http://www.last.fm/api/show?service=357
|
132
|
+
def search( params )
|
133
|
+
xml = LastFM.get( "album.search", params )
|
134
|
+
xml.find('results/albummatches/album').map do |album|
|
135
|
+
LastFM::Album.from_xml( album )
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# Share an album with one or more Last.fm users or other friends.
|
140
|
+
#
|
141
|
+
# @option params [String, required] :artist the artist name
|
142
|
+
# @option params [String, required] :album the album name
|
143
|
+
# @option params [Array, required] :recipient a list of email addresses or Last.fm usernames. maximum is 10
|
144
|
+
# @option params [String, optional] :message an optional message to send. if not supplied a default message will be used
|
145
|
+
# @option params [Boolean, optional] :public optionally show in the sharing users activity feed. defaults to false
|
146
|
+
# @see http://www.last.fm/api/show?service=436
|
147
|
+
def share( params )
|
148
|
+
LastFM.requires_authentication
|
149
|
+
LastFM.post( "album.share", params )
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
# Compensate for discrepancies between XML response and model attributes
|
157
|
+
alias :image= :images=
|
158
|
+
alias :title= :name=
|
159
|
+
alias :releasedate= :release_date=
|
160
|
+
alias :toptags= :tags=
|
161
|
+
|
162
|
+
def parse_node(member, node)
|
163
|
+
case member
|
164
|
+
when :artist
|
165
|
+
if node.find('*').count == 0
|
166
|
+
node.content
|
167
|
+
else
|
168
|
+
LastFM::Artist.from_xml(node)
|
169
|
+
end
|
170
|
+
when :id, :listeners, :playcount
|
171
|
+
node.content.to_i
|
172
|
+
when :images
|
173
|
+
(self.images || {}).merge(node['size'].to_sym => node.content)
|
174
|
+
when :mbid, :name, :url
|
175
|
+
node.content
|
176
|
+
when :release_date
|
177
|
+
Time.parse(node.content) rescue nil
|
178
|
+
when :streamable
|
179
|
+
node.content == '1'
|
180
|
+
when :tags
|
181
|
+
node.find('tag').map do |tag|
|
182
|
+
LastFM::Tag.from_xml(tag)
|
183
|
+
end
|
184
|
+
when :tracks
|
185
|
+
node.find('track').map do |track|
|
186
|
+
LastFM::Track.from_xml(track,
|
187
|
+
:album => self.name,
|
188
|
+
:position => track['rank'].to_i
|
189
|
+
)
|
190
|
+
end
|
191
|
+
when :wiki
|
192
|
+
LastFM::Wiki.from_xml(node)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
end
|
197
|
+
end
|
data/lib/lastfm/artist.rb
CHANGED
@@ -1,48 +1,291 @@
|
|
1
|
-
module LastFM
|
2
|
-
|
3
|
-
# @attr [Hash] images
|
4
|
-
# @attr [Fixnum] listeners
|
5
|
-
# @attr [String] mbid
|
6
|
-
# @attr [String] name
|
7
|
-
# @attr [Fixnum] playcount
|
8
|
-
# @attr [Array] similar
|
9
|
-
# @attr [Boolean] streamable
|
10
|
-
# @attr [Array] tags
|
11
|
-
# @attr [String] url
|
12
|
-
# @attr [LastFM::Wiki] wiki
|
13
|
-
class Artist < Struct.new(:images, :listeners, :mbid, :name, :playcount, :similar, :streamable, :tags, :url, :wiki)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
1
|
+
module LastFM
|
2
|
+
|
3
|
+
# @attr [Hash] images
|
4
|
+
# @attr [Fixnum] listeners
|
5
|
+
# @attr [String] mbid
|
6
|
+
# @attr [String] name
|
7
|
+
# @attr [Fixnum] playcount
|
8
|
+
# @attr [Array] similar
|
9
|
+
# @attr [Boolean] streamable
|
10
|
+
# @attr [Array] tags
|
11
|
+
# @attr [String] url
|
12
|
+
# @attr [LastFM::Wiki] wiki
|
13
|
+
class Artist < Struct.new(:images, :listeners, :mbid, :name, :playcount, :similar, :streamable, :tags, :url, :wiki)
|
14
|
+
|
15
|
+
# API Methods
|
16
|
+
class << self
|
17
|
+
|
18
|
+
# Tag an artist with one or more user supplied tags.
|
19
|
+
#
|
20
|
+
# @option params [String, required] :artist the artist name
|
21
|
+
# @option params [Array, required] :tags up to 10 tags to apply to this artist
|
22
|
+
# @see http://www.last.fm/api/show/?service=303
|
23
|
+
def add_tags( params )
|
24
|
+
LastFM.requires_authentication
|
25
|
+
LastFM.post( "artist.addTags", params )
|
26
|
+
end
|
27
|
+
|
28
|
+
# Check whether the supplied artist has a correction to a canonical artist.
|
29
|
+
#
|
30
|
+
# @option params [String, required] :artist the artist name
|
31
|
+
# @return [Array<LastFM::Artist>] list of suggestion corrections, in order of similarity
|
32
|
+
# @see http://www.last.fm/api/show/?service=446
|
33
|
+
def get_correction( params )
|
34
|
+
xml = LastFM.get( "artist.getCorrection", params )
|
35
|
+
xml.find('corrections/correction/artist').map do |correction|
|
36
|
+
LastFM::Artist.from_xml( correction )
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get a list of upcoming events for this artist.
|
41
|
+
#
|
42
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
43
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
44
|
+
# @option params [Boolean, optional] :festivalsonly whether only festivals should be returned, or all events
|
45
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
46
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
47
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
48
|
+
# @see http://www.last.fm/api/show/?service=117
|
49
|
+
def get_events( params )
|
50
|
+
xml = LastFM.get( "artist.getEvents", params )
|
51
|
+
xml.find('events/event').map do |event|
|
52
|
+
LastFM::Event.from_xml( event )
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Get images for this artist in a variety of sizes.
|
57
|
+
#
|
58
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
59
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
60
|
+
# @option params [Symbol, optional] :order sort ordering can be either :popularity (default) or :dateadded
|
61
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
62
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
63
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
64
|
+
# @see http://www.last.fm/api/show/?service=407
|
65
|
+
def get_images( params )
|
66
|
+
LastFM.get( "artist.getImages", params )
|
67
|
+
end
|
68
|
+
|
69
|
+
# Get the metadata for an artist. Includes biography.
|
70
|
+
#
|
71
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
72
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
73
|
+
# @option params [String, optional] :lang the language to return the biography in, expressed as an ISO 639 alpha-2 code
|
74
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
75
|
+
# @option params [String, optional] :username username whose playcount for this artist is to be returned in the reponse
|
76
|
+
# @return [LastFM::Artist] artist constructed from the metadata contained in the response
|
77
|
+
# @see http://www.last.fm/api/show/?service=267
|
78
|
+
def get_info( params )
|
79
|
+
xml = LastFM.get( "artist.getInfo", params )
|
80
|
+
LastFM::Artist.from_xml( xml )
|
81
|
+
end
|
82
|
+
|
83
|
+
# Get a paginated list of all the events this artist has played at in the past.
|
84
|
+
#
|
85
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
86
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
87
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
88
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
89
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
90
|
+
# @see http://www.last.fm/api/show/?service=428
|
91
|
+
def get_past_events( params )
|
92
|
+
LastFM.get( "artist.getPastEvents", params )
|
93
|
+
end
|
94
|
+
|
95
|
+
# Get a podcast of free mp3s based on an artist.
|
96
|
+
#
|
97
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
98
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
99
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
100
|
+
# @see http://www.last.fm/api/show/?service=118
|
101
|
+
def get_podcast( params )
|
102
|
+
LastFM.get( "artist.getPodcast", params )
|
103
|
+
end
|
104
|
+
|
105
|
+
# Get shouts for this artist.
|
106
|
+
#
|
107
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
108
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
109
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
110
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
111
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
112
|
+
# @return [Array<LastFM::Shout>] collection of shouts
|
113
|
+
# @see http://www.last.fm/api/show/?service=397
|
114
|
+
def get_shouts( params )
|
115
|
+
xml = LastFM.get( "artist.getShouts", params )
|
116
|
+
xml.find('shouts/shout').map do |shout|
|
117
|
+
LastFM::Shout.from_xml( shout )
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Get all the artists similar to this artist.
|
122
|
+
#
|
123
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
124
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
125
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
126
|
+
# @option params [Fixnum, optional] :limit limit the number of results to fetch
|
127
|
+
# @return [Array<LastFM::Artist>] list of similar artists
|
128
|
+
# @see http://www.last.fm/api/show/?service=119
|
129
|
+
def get_similar( params )
|
130
|
+
xml = LastFM.get( "artist.getSimilar", params )
|
131
|
+
xml.find('similarartists/artist').map do |artist|
|
132
|
+
LastFM::Artist.from_xml( artist )
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# Get the tags applied by an individual user to an artist on Last.fm. If accessed as an authenticated service
|
137
|
+
# and you don't supply a user parameter then this service will return tags for the authenticated user.
|
138
|
+
#
|
139
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
140
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
141
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
142
|
+
# @option params [String, optional] :user if called in non-authenticated mode you must specify the user to look up
|
143
|
+
# @see http://www.last.fm/api/show/?service=318
|
144
|
+
def get_tags( params )
|
145
|
+
secure = !params.include?(:user)
|
146
|
+
LastFM.requires_authentication if secure
|
147
|
+
LastFM.get( "artist.getTags", params, secure )
|
148
|
+
end
|
149
|
+
|
150
|
+
# Get the top albums for an artist, ordered by popularity.
|
151
|
+
#
|
152
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
153
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
154
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
155
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
156
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
157
|
+
# @return [Array<LastFM::Album>] top albums, ordered by popularity
|
158
|
+
# @see http://www.last.fm/api/show/?service=287
|
159
|
+
def get_top_albums( params )
|
160
|
+
xml = LastFM.get( "artist.getTopAlbums", params )
|
161
|
+
xml.find('topalbums/album').map do |album|
|
162
|
+
LastFM::Album.from_xml( album )
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
# Get the top fans for an artist on Last.fm, based on listening data.
|
167
|
+
#
|
168
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
169
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
170
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
171
|
+
# @see http://www.last.fm/api/show/?service=310
|
172
|
+
def get_top_fans( params )
|
173
|
+
LastFM.get( "artist.getTopFans", params )
|
174
|
+
end
|
175
|
+
|
176
|
+
# Get the top tags for an artist, ordered by popularity.
|
177
|
+
#
|
178
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
179
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
180
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
181
|
+
# @return [Array<LastFM::Tag>] list of tags ordered by popularity
|
182
|
+
# @see http://www.last.fm/api/show/?service=288
|
183
|
+
def get_top_tags( params )
|
184
|
+
xml = LastFM.get( "artist.getTopTags", params )
|
185
|
+
xml.find('toptags/tag').map do |tag|
|
186
|
+
LastFM::Tag.from_xml( tag )
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# Get the top tracks by an artist, ordered by popularity.
|
191
|
+
#
|
192
|
+
# @option params [String, required unless :mbid] :artist the artist name
|
193
|
+
# @option params [String, optional] :mbid the musicbrainz id for the artist
|
194
|
+
# @option params [Boolean, optional] :autocorrect transform misspelled artist names into correct artist names to be returned in the response
|
195
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
196
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
197
|
+
# @return [Array<LastFM::Track>] top tracks, ordered by popularity
|
198
|
+
# @see http://www.last.fm/api/show/?service=277
|
199
|
+
def get_top_tracks( params )
|
200
|
+
xml = LastFM.get( "artist.getTopTracks", params )
|
201
|
+
xml.find('toptracks/track').map do |track|
|
202
|
+
LastFM::Track.from_xml( track )
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
# Remove a user's tag from an artist.
|
207
|
+
#
|
208
|
+
# @option params [String, required] :artist the artist name
|
209
|
+
# @option params [String, required] :tag a single user tag to remove from this artist
|
210
|
+
# @see http://www.last.fm/api/show/?service=315
|
211
|
+
def remove_tag( params )
|
212
|
+
LastFM.requires_authentication
|
213
|
+
LastFM.post( "artist.removeTag", params )
|
214
|
+
end
|
215
|
+
|
216
|
+
# Search for an artist by name. Returns artist matches sorted by relevance.
|
217
|
+
#
|
218
|
+
# @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
|
219
|
+
# @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
|
220
|
+
# @option params [String, required] :artist the artist name
|
221
|
+
# @return [Array<LastFM::Artist>] list of artists sorted by relevance
|
222
|
+
# @see http://www.last.fm/api/show/?service=272
|
223
|
+
def search( params )
|
224
|
+
xml = LastFM.get( "artist.search", params )
|
225
|
+
xml.find('results/artistmatches/artist').map do |artist|
|
226
|
+
LastFM::Artist.from_xml( artist )
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
# Share an artist with Last.fm users or other friends.
|
231
|
+
#
|
232
|
+
# @option params [String, required] :artist the artist name
|
233
|
+
# @option params [Array, required] :recipient a list of email addresses or Last.fm usernames. maximum is 10
|
234
|
+
# @option params [String, optional] :message an optional message to send. if not supplied a default message will be used
|
235
|
+
# @option params [Boolean, optional] :public optionally show in the sharing users activity feed. defaults to false
|
236
|
+
# @see http://www.last.fm/api/show/?service=306
|
237
|
+
def share( params )
|
238
|
+
LastFM.requires_authentication
|
239
|
+
LastFM.post( "artist.share", params )
|
240
|
+
end
|
241
|
+
|
242
|
+
# Shout in this artist's shoutbox.
|
243
|
+
#
|
244
|
+
# @option params [String, required] :artist name of the artist to shout on
|
245
|
+
# @option params [String, required] :message message to post to the shoutbox
|
246
|
+
# @see http://www.last.fm/api/show/?service=408
|
247
|
+
def shout( params )
|
248
|
+
LastFM.requires_authentication
|
249
|
+
LastFM.post( "artist.shout", params )
|
250
|
+
end
|
251
|
+
|
252
|
+
end
|
253
|
+
|
254
|
+
private
|
255
|
+
|
256
|
+
# Compensate for discrepancies between XML response and model attributes
|
257
|
+
alias :image= :images=
|
258
|
+
alias :bio= :wiki=
|
259
|
+
|
260
|
+
# node with nested listeners and playcount
|
261
|
+
def stats=(node)
|
262
|
+
node.find('*').each do |child|
|
263
|
+
send(:"#{child.name}=", child)
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def parse_node(member, node)
|
268
|
+
case member
|
269
|
+
when :images
|
270
|
+
(self.images || {}).merge(node['size'].to_sym => node.content)
|
271
|
+
when :listeners, :playcount
|
272
|
+
node.content.to_i
|
273
|
+
when :name, :mbid, :url
|
274
|
+
node.content
|
275
|
+
when :similar
|
276
|
+
node.find('artist').map do |artist|
|
277
|
+
LastFM::Artist.from_xml(artist)
|
278
|
+
end
|
279
|
+
when :streamable
|
280
|
+
node.content == '1'
|
281
|
+
when :tags
|
282
|
+
node.find('tag').map do |tag|
|
283
|
+
LastFM::Tag.from_xml(tag)
|
284
|
+
end
|
285
|
+
when :wiki
|
286
|
+
LastFM::Wiki.from_xml(node)
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
end
|
291
|
+
end
|
data/lib/lastfm/auth.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module LastFM
|
2
|
+
class Auth
|
3
|
+
class << self
|
4
|
+
|
5
|
+
# Create a web service session for a user. Used for authenticating a user when the
|
6
|
+
# password can be inputted by the user. Only suitable for standalone mobile devices.
|
7
|
+
#
|
8
|
+
# @option params [String, required] :username last.fm username
|
9
|
+
# @option params [String, required] :auth_token md5 hash of the username + the password hash
|
10
|
+
# @see http://www.last.fm/api/show?service=266
|
11
|
+
def get_mobile_session( params )
|
12
|
+
LastFM.get( "auth.getMobileSession", params, :secure )
|
13
|
+
end
|
14
|
+
|
15
|
+
# Fetch a session key for a user. The third step in the authentication process.
|
16
|
+
#
|
17
|
+
# @option params [String, required] :token md5 hash returned by step 1 of the authentication process
|
18
|
+
# @see http://www.last.fm/api/show?service=125
|
19
|
+
def get_session( params )
|
20
|
+
LastFM.get( "auth.getSession", params, :secure )
|
21
|
+
end
|
22
|
+
|
23
|
+
# Fetch an unathorized request token for an API account. This is step 2 of
|
24
|
+
# the authentication process for desktop applications.
|
25
|
+
#
|
26
|
+
# @see http://www.last.fm/api/show?service=265
|
27
|
+
def get_token
|
28
|
+
LastFM.get( "auth.getToken", {}, :secure )
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|