diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-05 20:45:28 +0000 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-05 20:45:28 +0000 |
commit | 0eec0897dc75de79ec31a2d3fcb03dbbd18648bb (patch) | |
tree | f8f95a1e025c3c562d0653f3054e4959c683254b /data | |
parent | f2d0e34bcc828f473fd0760d691f2828d4643b2f (diff) |
lastfm plugin: initial work on artist/track/album retrieval (only artist so far)
Diffstat (limited to 'data')
-rw-r--r-- | data/rbot/plugins/lastfm.rb | 81 |
1 files changed, 68 insertions, 13 deletions
diff --git a/data/rbot/plugins/lastfm.rb b/data/rbot/plugins/lastfm.rb index c2084186..dec9ef5d 100644 --- a/data/rbot/plugins/lastfm.rb +++ b/data/rbot/plugins/lastfm.rb @@ -1,25 +1,80 @@ -require 'open-uri' +#-- vim:sw=2:et +#++ +# +# :title: lastfm plugin for rbot +# +# Author:: Jeremy Voorhis +# Author:: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com> +# +# Copyright:: (C) 2005 Jeremy Voorhis +# Copyright:: (C) 2007 Giuseppe Bilotta +# +# License:: GPL v2 -# plugin submitted by Jeremy Voorhis (jvoorhis) +require 'open-uri' class LastFmPlugin < Plugin + + LASTFM = "http://www.last.fm" + def help(plugin, topic="") - "lastfm <function> <user> => lastfm data for <user> on last.fm where <function> in [recenttracks, topartists, topalbums, toptracks, tags, friends, neighbors]" + case topic.intern + when :artist, :group + "lastfm artist <name> => show information on artist/group <name> from last.fm" + when :song, :track + "lastfm track <name> => show information on track/song <name> from last.fm [not implemented yet]" + when :album + "lastfm album <name> => show information on album <name> from last.fm" + else + "lastfm <function> <user> => lastfm data for <user> on last.fm where <function> in [recenttracks, topartists, topalbums, toptracks, tags, friends, neighbors]. other topics: artist, group, song, track, album" + end end - def do_lastfm (m, params) - begin - if params[:action] == "neighbors" || params[:action] == "neighbours" then - params[:action]="neighbours" + def lastfm(m, params) + action = params[:action].intern + action = :neighbours if action == :neighbors + what = params[:what] + case action + when :artist, :group + artist = what.to_s + begin + esc = URI.escape(artist) + page = @bot.httputil.get "#{LASTFM}/music/#{esc}" + if page + if page.match(/<h1 class="h1artist"><a href="([^"]+)">(.*?)<\/a><\/h1>/) + url = LASTFM + $1 + title = $2 + else + raise "No URL/Title found for #{artist}" + end + + wiki = page.match(/<div class="wikiAbstract">(.*?)<\/div>/m)[1].ircify_html + m.reply "%s : %s\n%s" % [title, url, wiki] + else + m.reply "no data found on #{artist}" + end + rescue + m.reply "I had problems looking for #{artist}" + debug page + return + end + when :song, :track + m.reply "not implemented yet, sorry" + when :album + m.reply "not implemented yet, sorry" + else + return usage unless what.length == 1 + user = what.first + begin + data = open("http://ws.audioscrobbler.com/1.0/user/#{user}/#{action}.txt") + m.reply "#{action} for #{user}:" + m.reply data.to_a[0..3].map{|l| l.split(',',2)[-1].chomp}.join(", ") + rescue + m.reply "could not find #{action} for #{user} (is #{user} a user?)" end - data = open("http://ws.audioscrobbler.com/1.0/user/#{params[:user]}/#{params[:action]}.txt") - m.reply "#{params[:action]} for #{params[:user]}:" - m.reply data.to_a[0..3].map{|l| l.split(',',2)[-1].chomp}.join(", ") - rescue - m.reply "could not find #{params[:action]} for #{params[:user]} (is #{params[:user]} a user?)" end end end plugin = LastFmPlugin.new -plugin.map 'lastfm :action :user', :action => 'do_lastfm' +plugin.map 'lastfm :action *what' |