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