From 0eec0897dc75de79ec31a2d3fcb03dbbd18648bb Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Thu, 5 Apr 2007 20:45:28 +0000 Subject: [PATCH] lastfm plugin: initial work on artist/track/album retrieval (only artist so far) --- data/rbot/plugins/lastfm.rb | 81 +++++++++++++++++++++++++++++++------ 1 file 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 +# +# 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 => lastfm data for on last.fm where in [recenttracks, topartists, topalbums, toptracks, tags, friends, neighbors]" + case topic.intern + when :artist, :group + "lastfm artist => show information on artist/group from last.fm" + when :song, :track + "lastfm track => show information on track/song from last.fm [not implemented yet]" + when :album + "lastfm album => show information on album from last.fm" + else + "lastfm => lastfm data for on last.fm where 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(/

(.*?)<\/a><\/h1>/) + url = LASTFM + $1 + title = $2 + else + raise "No URL/Title found for #{artist}" + end + + wiki = page.match(/
(.*?)<\/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' -- 2.39.2