summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-04-05 20:45:28 +0000
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-04-05 20:45:28 +0000
commit0eec0897dc75de79ec31a2d3fcb03dbbd18648bb (patch)
treef8f95a1e025c3c562d0653f3054e4959c683254b /data
parentf2d0e34bcc828f473fd0760d691f2828d4643b2f (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.rb81
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'