rscrobbler 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/lib/lastfm/album.rb +50 -112
  2. data/lib/lastfm/api/album.rb +140 -0
  3. data/lib/lastfm/api/artist.rb +243 -0
  4. data/lib/lastfm/api/auth.rb +35 -0
  5. data/lib/lastfm/api/chart.rb +63 -0
  6. data/lib/lastfm/api/event.rb +71 -0
  7. data/lib/lastfm/api/geo.rb +125 -0
  8. data/lib/lastfm/api/group.rb +69 -0
  9. data/lib/lastfm/api/library.rb +117 -0
  10. data/lib/lastfm/api/playlist.rb +40 -0
  11. data/lib/lastfm/api/radio.rb +41 -0
  12. data/lib/lastfm/api/tag.rb +120 -0
  13. data/lib/lastfm/api/tasteometer.rb +37 -0
  14. data/lib/lastfm/api/track.rb +272 -0
  15. data/lib/lastfm/api/user.rb +266 -0
  16. data/lib/lastfm/api/venue.rb +40 -0
  17. data/lib/lastfm/artist.rb +42 -204
  18. data/lib/lastfm/buylink.rb +34 -0
  19. data/lib/lastfm/event.rb +57 -66
  20. data/lib/lastfm/shout.rb +20 -0
  21. data/lib/lastfm/struct.rb +34 -0
  22. data/lib/lastfm/tag.rb +24 -89
  23. data/lib/lastfm/track.rb +51 -242
  24. data/lib/lastfm/venue.rb +21 -36
  25. data/lib/lastfm/wiki.rb +20 -0
  26. data/lib/rscrobbler.rb +24 -11
  27. data/test/test_album.rb +36 -0
  28. metadata +25 -45
  29. data/lib/lastfm/auth.rb +0 -35
  30. data/lib/lastfm/chart.rb +0 -63
  31. data/lib/lastfm/geo.rb +0 -125
  32. data/lib/lastfm/group.rb +0 -69
  33. data/lib/lastfm/library.rb +0 -117
  34. data/lib/lastfm/playlist.rb +0 -40
  35. data/lib/lastfm/radio.rb +0 -41
  36. data/lib/lastfm/tasteometer.rb +0 -37
  37. data/lib/lastfm/user.rb +0 -266
  38. data/test/unit/lib/lastfm/album_test.rb +0 -0
  39. data/test/unit/lib/lastfm/artist_test.rb +0 -0
  40. data/test/unit/lib/lastfm/auth_test.rb +0 -0
  41. data/test/unit/lib/lastfm/chart_test.rb +0 -0
  42. data/test/unit/lib/lastfm/event_test.rb +0 -0
  43. data/test/unit/lib/lastfm/geo_test.rb +0 -0
  44. data/test/unit/lib/lastfm/group_test.rb +0 -0
  45. data/test/unit/lib/lastfm/library_test.rb +0 -0
  46. data/test/unit/lib/lastfm/playlist_test.rb +0 -0
  47. data/test/unit/lib/lastfm/radio_test.rb +0 -0
  48. data/test/unit/lib/lastfm/tag_test.rb +0 -0
  49. data/test/unit/lib/lastfm/tasteometer_test.rb +0 -0
  50. data/test/unit/lib/lastfm/track_test.rb +0 -0
  51. data/test/unit/lib/lastfm/user_test.rb +0 -0
  52. data/test/unit/lib/lastfm/venue_test.rb +0 -0
  53. data/test/unit/lib/rscrobbler_test.rb +0 -0
@@ -0,0 +1,272 @@
1
+ module LastFM
2
+ module Api
3
+ class Track
4
+ class << self
5
+
6
+ # Add a list of user supplied tags to a track.
7
+ #
8
+ # @option params [String, required] :artist the artist name
9
+ # @option params [String, required] :track the track name
10
+ # @option params [Array, required] :tags array of tags to apply to this track. accepts a maximum of 10.
11
+ # @see http://www.last.fm/api/show?service=304
12
+ def add_tags( params )
13
+ LastFM.requires_authentication
14
+ LastFM.post( "track.addTags", params )
15
+ end
16
+
17
+ # Ban a track for the current user.
18
+ #
19
+ # @option params [String, required] :artist the artist name
20
+ # @option params [String, required] :track the track name
21
+ # @see http://www.last.fm/api/show?service=261
22
+ def ban( params )
23
+ LastFM.requires_authentication
24
+ LastFM.post( "track.ban", params )
25
+ end
26
+
27
+ # Get a list of buy Links for a track.
28
+ #
29
+ # @option params [String, required unless :mbid] :artist the artist name
30
+ # @option params [String, required unless :mbid] :track the track name
31
+ # @option params [String, required] :country a country name, as defined by ISO 3166-1
32
+ # @option params [String, optional] :mbid the musicbrainz id for the track
33
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
34
+ # @return [Array<LastFM::Buylink>] collection of links where this track can be bought or downloaded
35
+ # @see http://www.last.fm/api/show?service=431
36
+ def get_buylinks( params )
37
+ xml = LastFM.get( "track.getBuylinks", params )
38
+ [:physical, :download].each_with_object([]) do |type, buylinks|
39
+ xml.find("affiliations/#{type}s/affiliation").each do |buylink|
40
+ buylinks << LastFM::Buylink.from_xml( buylink, :type => type )
41
+ end
42
+ end
43
+ end
44
+
45
+ # Use the last.fm corrections data to check whether the supplied track has a correction to a canonical track
46
+ #
47
+ # @option params [String, required] :artist the artist name to correct
48
+ # @option params [String, required] :track the track name to correct
49
+ # @see http://www.last.fm/api/show?service=447
50
+ def get_correction( params )
51
+ LastFM.get( "track.getCorrection", params )
52
+ end
53
+
54
+ # Retrieve track metadata associated with a fingerprint id generated by the Last.fm Fingerprinter.
55
+ # Returns track elements, along with a 'rank' value between 0 and 1 reflecting the confidence for
56
+ # each match.
57
+ #
58
+ # @option params [String, required] :fingerprint_id the fingerprint id to look up
59
+ # @see http://www.last.fm/api/show?service=441
60
+ # @see https://github.com/lastfm/Fingerprinter
61
+ # @see http://blog.last.fm/2010/07/09/fingerprint-api-and-app-updated
62
+ def get_fingerprint_metadata( params )
63
+ LastFM.get( "track.getFingerPrintMetadata", params )
64
+ end
65
+
66
+ # Get the metadata for a track.
67
+ #
68
+ # @option params [String, required unless :mbid] :artist the artist name
69
+ # @option params [String, required unless :mbid] :track the track name
70
+ # @option params [String, optional] :mbid the musicbrainz id for the track
71
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
72
+ # @option params [String, optional] :username username whose playcount for, and whether they've loved, this track is to be returned in the reponse
73
+ # @return [LastFM::Track] track constructed from the metadata contained in the response
74
+ # @see http://www.last.fm/api/show?service=356
75
+ def get_info( params )
76
+ xml = LastFM.get( "track.getInfo", params )
77
+ LastFM::Track.from_xml( xml )
78
+ end
79
+
80
+ # Get shouts for a track.
81
+ #
82
+ # @option params [String, required unless :mbid] :artist the artist name
83
+ # @option params [String, required unless :mbid] :track the track name
84
+ # @option params [String, optional] :mbid the musicbrainz id for the track
85
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
86
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
87
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
88
+ # @return [Array<LastFM::Shout>] collection of shouts
89
+ # @see http://www.last.fm/api/show?service=453
90
+ def get_shouts( params )
91
+ xml = LastFM.get( "track.getShouts", params )
92
+ xml.find('shouts/shout').map do |shout|
93
+ LastFM::Shout.from_xml( shout )
94
+ end
95
+ end
96
+
97
+ # Get similar tracks for a track on Last.fm, based on listening data.
98
+ #
99
+ # @option params [String, required unless :mbid] :artist the artist name
100
+ # @option params [String, required unless :mbid] :track the track name
101
+ # @option params [String, optional] :mbid the musicbrainz id for the track
102
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
103
+ # @option params [Fixnum, optional] :limit the number of results to fetch. defaults to 50
104
+ # @return [Array<LastFM::Track>] similar tracks, ordered by similarity
105
+ # @see http://www.last.fm/api/show?service=319
106
+ def get_similar( params )
107
+ xml = LastFM.get( "track.getSimilar", params )
108
+ xml.find('similartracks/track').map do |track|
109
+ LastFM::Track.from_xml( track )
110
+ end
111
+ end
112
+
113
+ # Get the tags on a track.
114
+ #
115
+ # @option params [String, required unless :mbid] :artist the artist name
116
+ # @option params [String, required unless :mbid] :track the track name
117
+ # @option params [String, optional] :mbid the musicbrainz id for the track
118
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
119
+ # @option params [String, optional] :user if called in non-authenticated mode you must specify the user to look up
120
+ # @see http://www.last.fm/api/show?service=320
121
+ def get_tags( params )
122
+ secure = !params.include?(:user)
123
+ LastFM.requires_authentication if secure
124
+ LastFM.post( "track.getTags", params, secure )
125
+ end
126
+
127
+ # Get the top fans for a track, based on listening data.
128
+ #
129
+ # @option params [String, required unless :mbid] :artist the artist name
130
+ # @option params [String, required unless :mbid] :track the track name
131
+ # @option params [String, optional] :mbid the musicbrainz id for the track
132
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
133
+ # @see http://www.last.fm/api/show?service=312
134
+ def get_top_fans( params )
135
+ LastFM.get( "track.getTopFans", params )
136
+ end
137
+
138
+ # Get the top fans for a track, ordered by tag count.
139
+ #
140
+ # @option params [String, required unless :mbid] :artist the artist name
141
+ # @option params [String, required unless :mbid] :track the track name
142
+ # @option params [String, optional] :mbid the musicbrainz id for the track
143
+ # @option params [Boolean, optional] :autocorrect correct misspelled artist and track names to be returned in the response
144
+ # @return [Array<LastFM::Tag>] list of tags ordered by popularity
145
+ # @see http://www.last.fm/api/show?service=289
146
+ def get_top_tags( params )
147
+ xml = LastFM.get( "track.getTopTags", params )
148
+ xml.find('toptags/tag').map do |tag|
149
+ LastFM::Tag.from_xml( tag )
150
+ end
151
+ end
152
+
153
+ # Love a track for the current user.
154
+ #
155
+ # @option params [String, required] :artist the artist name
156
+ # @option params [String, required] :track the track name
157
+ # @see http://www.last.fm/api/show?service=260
158
+ def love( params )
159
+ LastFM.requires_authentication
160
+ LastFM.post( "track.love", params )
161
+ end
162
+
163
+ # Remove a user's tag from a track.
164
+ #
165
+ # @option params [String, required] :artist the artist name
166
+ # @option params [String, required] :track the track name
167
+ # @option params [String, required] :tag a single user tag to remove from this track
168
+ # @see http://www.last.fm/api/show?service=316
169
+ def remove_tag( params )
170
+ LastFM.requires_authentication
171
+ LastFM.post( "track.removeTag", params )
172
+ end
173
+
174
+ # Used to add a track-play to a user's profile. Scrobble a track, or a batch of tracks.
175
+ # Single tracks may be passed using the Object types listed, batches of tracks must be
176
+ # passed in as Arrays of each Object type. Allows up to a maximum of 50 scrobbles per
177
+ # batch. For batch scrobbles, Array indices of optional parameters must line up with
178
+ # the indicies of their corresponding tracks.
179
+ #
180
+ # @option params [String, required unless :mbid] :artist artist name
181
+ # @option params [String, required unless :mbid] :track track name
182
+ # @option params [String, optional] :mbid the musicbrainz id for the track
183
+ # @option params [Time, optional] :timestamp time the track started playing
184
+ # @option params [String, optional] :album album name
185
+ # @option params [String, optional] :album_artist album artist, if this differend from the track artist
186
+ # @option params [Fixnum, optional] :track_number track number of the track on the album
187
+ # @option params [Fixnum, optional] :duration track length, in seconds
188
+ # @option params [String, optional] :stream_id track stream id, received from the radio.getPlaylist service
189
+ # @option params [Boolean, optional] :chosen_by_user whether or not the user chose the track
190
+ # @option params [String, optional] :context sub-client version (not public, only enabled for certain api keys)
191
+ # @see http://www.last.fm/api/show?service=443
192
+ def scrobble( params )
193
+ LastFM.requires_authentication
194
+ # Tracks are passed to the service using array notation for each of the above params
195
+ array_params = {}
196
+ params.each do |hkey, hval|
197
+ hval = hval.to_i if hval.is_a?(Time)
198
+ Array(hval).each_with_index do |aval, index|
199
+ array_params["#{hkey}[#{index}]"] = aval
200
+ end
201
+ end
202
+ LastFM.post( "track.scrobble", array_params )
203
+ end
204
+
205
+ # Search for a track by track name. Returns track matches sorted by relevance.
206
+ #
207
+ # @option params [String, required] :track the track name
208
+ # @option params [String, optional] :artist narrow results based on an artist
209
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
210
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
211
+ # @return [Array<LastFM::Track>] list of tracks sorted by relevance
212
+ # @see http://www.last.fm/api/show?service=286
213
+ def search( params )
214
+ xml = LastFM.get( "track.search", params )
215
+ xml.find('results/trackmatches/track').map do |track|
216
+ LastFM::Track.from_xml( track )
217
+ end
218
+ end
219
+
220
+ # Share a track twith one or more Last.fm users or other friends.
221
+ #
222
+ # @option params [String, required] :artist the artist name
223
+ # @option params [String, required] :track the track name
224
+ # @option params [Array, required] :recipient a list of email addresses or Last.fm usernames. maximum is 10
225
+ # @option params [String, optional] :message an optional message to send. if not supplied a default message will be used
226
+ # @option params [Boolean, optional] :public optionally show in the sharing users activity feed. defaults to false
227
+ # @see http://www.last.fm/api/show?service=305
228
+ def share( params )
229
+ LastFM.requires_authentication
230
+ LastFM.post( "track.share", params )
231
+ end
232
+
233
+ # Unban a track for the current user.
234
+ #
235
+ # @option params [String, required] :artist the artist name
236
+ # @option params [String, required] :track the track name
237
+ # @see http://www.last.fm/api/show?service=449
238
+ def unban( params )
239
+ LastFM.requires_authentication
240
+ LastFM.post( "track.unban", params )
241
+ end
242
+
243
+ # Unlove a track for the current user.
244
+ #
245
+ # @option params [String, required] :artist the artist name
246
+ # @option params [String, required] :track the track name
247
+ # @see http://www.last.fm/api/show?service=440
248
+ def unlove( params )
249
+ LastFM.requires_authentication
250
+ LastFM.post( "track.unlove", params )
251
+ end
252
+
253
+ # Used to notify Last.fm that a user has started listening to a track.
254
+ #
255
+ # @option params [String, required unless :mbid] :artist artist name
256
+ # @option params [String, required unless :mbid] :track track name
257
+ # @option params [String, optional] :mbid the musicbrainz id for the track
258
+ # @option params [String, optional] :album album name
259
+ # @option params [String, optional] :album_artist album artist, if this differend from the track artist
260
+ # @option params [Fixnum, optional] :track_number track number of the track on the album
261
+ # @option params [Fixnum, optional] :duration track length, in seconds
262
+ # @option params [String, optional] :context sub-client version (not public, only enabled for certain api keys)
263
+ # @see http://www.last.fm/api/show?service=454
264
+ def update_now_playing( params )
265
+ LastFM.requires_authentication
266
+ LastFM.post( "track.updateNowPlaying", params )
267
+ end
268
+
269
+ end
270
+ end
271
+ end
272
+ end
@@ -0,0 +1,266 @@
1
+ module LastFM
2
+ module Api
3
+ class User
4
+ class << self
5
+
6
+ # Get a list of tracks by a given artist scrobbled by this user,
7
+ # including scrobble time. Can be limited to specific timeranges,
8
+ # defaults to all time.
9
+ #
10
+ # @option params [String, required] :user last.fm username to fetch the recent tracks for
11
+ # @option params [String, required] :artist the artist name to fetch tracks for
12
+ # @option params [Time, optional] :startTimestamp a unix timestamp to start at
13
+ # @option params [Time, optional] :endTimestamp a unix timestamp to end at
14
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
15
+ # @see http://www.last.fm/api/show?service=432
16
+ def get_artist_tracks( params )
17
+ LastFM.get( "user.getArtistTracks", params )
18
+ end
19
+
20
+ # Get a list of tracks banned by a user.
21
+ #
22
+ # @option params [String, required] :user last.fm username
23
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
24
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
25
+ # @see http://www.last.fm/api/show?service=448
26
+ def get_banned_tracks( params )
27
+ LastFM.get( "user.getBannedTracks", params )
28
+ end
29
+
30
+ # Get a list of upcoming events that this user is attending.
31
+ #
32
+ # @option params [String, required] :user last.fm username
33
+ # @option params [Boolean, optional] :festivalsonly whether only festivals should be returned, or all events
34
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
35
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
36
+ # @see http://www.last.fm/api/show?service=291
37
+ def get_events( params )
38
+ LastFM.get( "user.getEvents", params )
39
+ end
40
+
41
+ # Get a list of the user's friends on Last.fm.
42
+ #
43
+ # @option params [String, required] :user last.fm username
44
+ # @option params [Boolean, optional] :recenttracks whether or not to include information about friends' recent listening in the response.
45
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
46
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
47
+ # @see http://www.last.fm/api/show?service=263
48
+ def get_friends( params )
49
+ LastFM.get( "user.getFriends", params )
50
+ end
51
+
52
+ # Get information about a user profile.
53
+ #
54
+ # @option params [String, optional] :user user to fetch info for. defaults to the authenticated user
55
+ # @see http://www.last.fm/api/show?service=344
56
+ def get_info( params )
57
+ LastFM.get( "user.getInfo", params )
58
+ end
59
+
60
+ # Get a list of tracks loved by a user.
61
+ #
62
+ # @option params [String, required] :user last.fm username
63
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
64
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
65
+ # @see http://www.last.fm/api/show?service=329
66
+ def get_loved_tracks( params )
67
+ LastFM.get( "user.getLovedTracks", params )
68
+ end
69
+
70
+ # Get a list of a user's neighbours on Last.fm.
71
+ #
72
+ # @option params [String, required] :user last.fm username
73
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
74
+ # @see http://www.last.fm/api/show?service=264
75
+ def get_neighbors( params )
76
+ LastFM.get( "user.getNeighbonrs", params )
77
+ end
78
+
79
+ # Gets a list of upcoming releases based on a user's musical taste.
80
+ #
81
+ # @option params [String, required] :user last.fm username
82
+ # @option params [Boolean, optional] :userecs if true, return new releases based on artist recommendations. otherwise, it is based on their library (the default)
83
+ # @see http://www.last.fm/api/show?service=444
84
+ def get_new_releases( params )
85
+ LastFM.get( "user.getNewReleases", params )
86
+ end
87
+
88
+ # Get a list of all events a user has attended in the past.
89
+ #
90
+ # @option params [String, required] :user last.fm username
91
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
92
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
93
+ # @see http://www.last.fm/api/show?service=343
94
+ def get_past_events( params )
95
+ LastFM.get( "user.getPastEvents", params )
96
+ end
97
+
98
+ # Get the user's personal tags.
99
+ #
100
+ # @option params [String, required] :user last.fm username
101
+ # @option params [String, required] :tag the tag you're interested in
102
+ # @option params [String, required] :taggingtype the type of items which have been tagged. accepted types are 'artist', 'album', or 'track'
103
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
104
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
105
+ # @see http://www.last.fm/api/show?service=455
106
+ def get_personal_tags( params )
107
+ LastFM.get( "user.getPersonalTags", params )
108
+ end
109
+
110
+ # Get a list of a user's playlists.
111
+ #
112
+ # @option params [String, required] :user last.fm username
113
+ # @see http://www.last.fm/api/show?service=313
114
+ def get_playlists( params )
115
+ LastFM.get( "user.getPlaylists", params )
116
+ end
117
+
118
+ # Get a list of the recent Stations listened to by a user.
119
+ #
120
+ # @option params [String, required] :user last.fm username
121
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
122
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
123
+ # @see http://www.last.fm/api/show?service=414
124
+ def get_recent_stations( params )
125
+ LastFM.requires_authentication
126
+ LastFM.get( "user.getRecentStations", params, :secure )
127
+ end
128
+
129
+ # Get a list of the recent tracks listened to by a user. Also includes
130
+ # the currently playing track with the nowplaying="true" attribute if
131
+ # the user is currently listening.
132
+ #
133
+ # @option params [String, required] :user last.fm username
134
+ # @option params [Time, optional] :from display scrobbles after this time, formatted as unix UTC integer timestamp
135
+ # @option params [Time, optional] :to display scrobbles before this time, formatted as unix UTC integer timestamp
136
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
137
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
138
+ # @see http://www.last.fm/api/show?service=278
139
+ def get_recent_tracks( params )
140
+ LastFM.get( "user.getRecentTracks", params )
141
+ end
142
+
143
+ # Get Last.fm artist recommendations for a user.
144
+ #
145
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
146
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
147
+ # @see http://www.last.fm/api/show?service=388
148
+ def get_recommended_artists( params )
149
+ LastFM.requires_authentication
150
+ LastFM.get( "user.getRecommendedArtists", params, :secure )
151
+ end
152
+
153
+ # Get a paginated list of all events recommended to a user by Last.fm, based on their listening profile.
154
+ #
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
+ # @see http://www.last.fm/api/show?service=375
158
+ def get_recommended_events( params )
159
+ LastFM.requires_authentication
160
+ LastFM.get( "user.getRecommendedEvents", params, :secure )
161
+ end
162
+
163
+ # Get shouts for a user.
164
+ #
165
+ # @option params [String, required] :user last.fm username
166
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
167
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
168
+ # @see http://www.last.fm/api/show?service=401
169
+ def get_shouts( params )
170
+ LastFM.get( "user.getShouts", params, :secure )
171
+ end
172
+
173
+ # Get the top albums listened to by a user, based on an optional time period.
174
+ #
175
+ # @option params [String, required] :user last.fm username
176
+ # @option params [String, optional] :period time period over which to retrieve top albums for. accepted values are 'overall', '7day', '3month', '6month' or '12month'
177
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
178
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
179
+ # @see http://www.last.fm/api/show?service=299
180
+ def get_top_albums( params )
181
+ LastFM.get( "user.getTopAlbums", params )
182
+ end
183
+
184
+ # Get the top artists listened to by a user, based on an optional time period.
185
+ #
186
+ # @option params [String, required] :user last.fm username
187
+ # @option params [String, optional] :period time period over which to retrieve top artists for. accepted values are 'overall', '7day', '3month', '6month' or '12month'
188
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
189
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
190
+ # @see http://www.last.fm/api/show?service=300
191
+ def get_top_artists( params )
192
+ LastFM.get( "user.getTopArtists", params )
193
+ end
194
+
195
+ # Get the top tags used by a user.
196
+ #
197
+ # @option params [String, required] :user last.fm username
198
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
199
+ # @see http://www.last.fm/api/show?service=123
200
+ def get_top_tags( params )
201
+ LastFM.get( "user.getTopTags", params )
202
+ end
203
+
204
+ # Get the top tracks listened to by a user, based on an optional time period.
205
+ #
206
+ # @option params [String, required] :user last.fm username
207
+ # @option params [String, optional] :period time period over which to retrieve top tracks for. accepted values are 'overall', '7day', '3month', '6month' or '12month'
208
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
209
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
210
+ # @see http://www.last.fm/api/show?service=301
211
+ def get_top_tracks( params )
212
+ LastFM.get( "user.getTopTracks", params )
213
+ end
214
+
215
+ # Get an album chart for a user, for a given date range. Defaults to the most recent chart.
216
+ #
217
+ # @option params [String, required] :user last.fm username
218
+ # @option params [String, optional] :from date at which the chart should start. (see: User.get_weekly_chart_list)
219
+ # @option params [String, optional] :to date at which the chart should end. (see: User.get_weekly_chart_list)
220
+ # @see http://www.last.fm/api/show?service=279
221
+ def get_weekly_album_chart( params )
222
+ LastFM.get( "user.getWeeklyAlbumChart", params )
223
+ end
224
+
225
+ # Get an artist chart for a user, for a given date range. Defaults to the most recent chart.
226
+ #
227
+ # @option params [String, required] :user last.fm username
228
+ # @option params [String, optional] :from date at which the chart should start. (see: User.get_weekly_chart_list)
229
+ # @option params [String, optional] :to date at which the chart should end. (see: User.get_weekly_chart_list)
230
+ # @see http://www.last.fm/api/show?service=281
231
+ def get_weekly_artist_chart( params )
232
+ LastFM.get( "user.getWeeklyArtistChart", params )
233
+ end
234
+
235
+ # Get a list of available charts for this user, expressed as date ranges which can be sent to the chart services.
236
+ #
237
+ # @option params [String, required] :user last.fm username
238
+ # @see http://www.last.fm/api/show?service=280
239
+ def get_weekly_chart_list( params )
240
+ LastFM.get( "user.getWeeklyChartList", params )
241
+ end
242
+
243
+ # Get a track chart for a user, for a given date range. Defaults to the most recent chart.
244
+ #
245
+ # @option params [String, required] :user last.fm username
246
+ # @option params [String, optional] :from date at which the chart should start. (see: User.get_weekly_chart_list)
247
+ # @option params [String, optional] :to date at which the chart should end. (see: User.get_weekly_chart_list)
248
+ # @see http://www.last.fm/api/show?service=282
249
+ def get_weekly_track_chart( params )
250
+ LastFM.get( "user.getWeeklyTrackChart", params )
251
+ end
252
+
253
+ # Shout on a user's shoutbox.
254
+ #
255
+ # @option params [String, required] :user user to shout on
256
+ # @option params [String, required] :message message to post to the shoutbox
257
+ # @see http://www.last.fm/api/show?service=411
258
+ def shout( params )
259
+ LastFM.requires_authentication
260
+ LastFM.post( "user.shout", params )
261
+ end
262
+
263
+ end
264
+ end
265
+ end
266
+ end
@@ -0,0 +1,40 @@
1
+ module LastFM
2
+ module Api
3
+ class Venue
4
+ class << self
5
+
6
+ # Get a list of upcoming events for a venue.
7
+ #
8
+ # @option params [Fixnum, required] :venue the id for the venue to fetch event listings for
9
+ # @option params [Boolean, optional] :festivalsonly whether only festivals should be returned, or all events
10
+ # @see http://www.last.fm/api/show?service=394
11
+ def get_events( params )
12
+ LastFM.get( "venue.getEvents", params )
13
+ end
14
+
15
+ # Get a paginated list of all the events held at this venue in the past.
16
+ #
17
+ # @option params [Fixnum, required] :venue the id for the venue to fetch event listings for
18
+ # @option params [Boolean, optional] :festivalsonly whether only festivals should be returned, or all events
19
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
20
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
21
+ # @see http://www.last.fm/api/show?service=395
22
+ def get_past_events( params )
23
+ LastFM.get( "venue.getPastEvents", params )
24
+ end
25
+
26
+ # Search for a venue by venue name.
27
+ #
28
+ # @option params [String, required] :venue the venue name to search for
29
+ # @option params [String, optional] :country a country name used to limit results, as defined by ISO 3166-1
30
+ # @option params [Fixnum, optional] :page the page number to fetch. defaults to first page
31
+ # @option params [Fixnum, optional] :limit the number of results to fetch per page. defaults to 50
32
+ # @see http://www.last.fm/api/show?service=396
33
+ def search( params )
34
+ LastFM.get( "venue.search", params )
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end