Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
144 lines (98 sloc) 5.31 KB
LastFm
============
Read Me File contents:
17 - Example
39 - Methods
104 - Use Case
Provides some easy ways to interact with the LastFM API.
This isn't a completely comprehensive plugin,
it includes queries that I required for my site, returned as pre-formatted hashes. You could add to or remove from these to suit your needs.
There are also generic methods for a REST GET query (eg artist.topTags), an authorized REST GET query (eg artist.getTags for a user) and a REST POST query (eg artist.addTags).
* Make sure to put your api key (and secret) in config/last_fm.yml.
Example
=======
albums_controller.rb --
class AlbumsController < ApplicationController
last_fm
def show
@album = Album.find(1)
@current_events = last_fm_artists_current_events(@album.band.name)
end
end
albums/show.html.erb --
<% @current.events.each do |event %>
<p><%= event['bands] %></p>
<p><%= event['date] %></p>
<% end %>
Methods
=======
1. UNAUTHORIZED REST GET QUERY (eg album.getInfo):
get_lastfm(method,params,type)
Example:
@album = get_lastfm('album.getInfo', { :artist => 'Winning', :album=>'This Is An Ad For Cigarettes'})
returns a hash: @album['artist], @album['name'], etc. Set type to 'xml' xml instead of hash.
2. AUTHORIZED REST GET QUERY (eg getTags for by user):
get_lastfm_with_auth(method,params,type)
Example:
@tags = get_lastfm_with_auth('album.getTags',{:artist=>'Winning', :album=>'This Is An Ad For Cigarettes',:sk=>session[:lastfm_key]}
return a hash:
<% @tags['tags]['tag].each do |tag| %>
<%= tag['name] %>
<% end %>
Set to type to return xml instead of hash.
3. METHOD #4 - AUTHENTICATION PATH FOR redirects
authenticate_lastfm
Use this if lastfm session has not been created for this user. You can think of this method as a route because the method just returns a url for your redirect with your API key appended...
Example:
if session[:lastfm_key].nil?
redirect_to authenticate_lastfm
end
4. METHOD #3 - AUTHORIZED REST POST QUERY (eg album.addTags by user)
post_lastfm(method,parameters)
Example:
def add_tag
if not params[:tags].nil?
values = { :tags => params[:tags], :artist => params[:artist], :album => params[:album] }
@response = post_lastfm('album.addTags',values)
end
end
Also, there are the following specific methods that I created to get nicely pre-formatted hashes. Some of them onlny contain the data that I required, much was left out -- events is a good example. You could add to or remove from these to suit your needs.
* lastfm_album_info(artist,album)
* lastfm_artists_info(artist)
* lastfm_artists_current_events(artist,limit)
* lastfm_similar_artists(artist,limit)
* lastfm_artists_top_albums(artist,limit)
* lastfm_artists_top_tracks(artist,limit)
* lastfm_artists_top_tags(artist,limit)
* lastfm_users_weekly_artists(user,limit)
* lastfm_users_weekly_albums(user,limit)
* lastfm_users_top_artists(user, period) -- added by Dan Pickett
* lastfm_track_get_similar(track,artist,limit=10)
* lastfm_track_get_top_tags(track,artist,limit=10)
So you could call:
@yourhash = lastfm_album_info(artist,album)
Then take a look and see what's there and build a view:
@yourhash.inspect
Use Case
=======
1. You have a website that reviews psyche reissues
2. A user named Ralph signs in....
3. Ralph clicks for the 'Monte Dunn' album review
UNAUTHORIZED REST QUERY
4. In the action to show the review, you do an unauthorized lastfm query - get_lastfm(method,params_hash) - to find similar artists and pop them up as a series of list items with image, band name and a link to the last fm page
AUTHORIZED REST QUERY
5. Since Ralph has logged in I could also show the tags he has added to that album using an authorized lastfm REST get query - get_lastfm_with_auth(method,params_hash)
6. Ralph wants to add a tag to a record so he clicks on the 'add tag' link which takes him to :controller=>'album' :action=>'add_tag'
7. At this point you would pop up a form for Ralph containing the fields 'album', 'artist' and 'tag', but in order for Ralph to post that form you need to have a lastfm session for him as well.
8. So before you show Ralph the form you do a before filter or just an if statement in the method to check the session vars
9. If that filter fails, you do a redirect using the authenticate_lastfm method
10. Ralph has been redirected and arrives at lastfm, and approves you creating a session,
11. Ralph gets redirected to your callback url, which might be :controller=>'albums', :action=>'register_lastfm'
12. Your register_lastfm action calls our get_lastfm_session(token) method using token = params[:token]
13. Since the session was successfully created you redirect Ralph back to the album add tag page.
14. Ralph fills out the form, adding comma separated tags to the tags field. You have pre-filled the album and artist fields for him since you know that it's the Monte Dunn record he's addding tags to.
14. Now Ralph presses the 'submit' button and posts the form to your 'add_tag' action.
15. Your add_tag action calls our post_lastfm method which handles the post to LastFm.
16. Since the post was successful, you print a 'tag added' message so Ralph knows his tag got added.
17. The next time Ralph goes to LastFM, he'll notice that the tags he added from your site have shown up in LastFM.
Copyright (c) 2008 Gordon B. Isnor, released under the MIT license
Jump to Line
Something went wrong with that request. Please try again.