From 7fa6a62c6c54e958459559235997972106ce26d6 Mon Sep 17 00:00:00 2001 From: Giuseppe Bilotta Date: Thu, 5 Apr 2007 22:20:30 +0000 Subject: [PATCH] lastfm plugin: command to compactly display next events in a requested location --- data/rbot/plugins/lastfm.rb | 61 +++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/data/rbot/plugins/lastfm.rb b/data/rbot/plugins/lastfm.rb index f2ecd053..e0fa8a3a 100644 --- a/data/rbot/plugins/lastfm.rb +++ b/data/rbot/plugins/lastfm.rb @@ -13,20 +13,33 @@ require 'open-uri' +class ::LastFmEvent + attr_accessor :url, :date, :artist, :location, :attendance + def initialize(url, date, artist, location, attendance) + @url = url + @date = date + @artist = artist + @location = location + @attendance = attendance + end +end + class LastFmPlugin < Plugin LASTFM = "http://www.last.fm" def help(plugin, topic="") case topic.intern + when :event, :events + "lastfm events in => show information on events in or near from last.fm" 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" + "lastfm album => show information on album from last.fm [not implemented yet]" else - "lastfm => lastfm data for on last.fm where in [recenttracks, topartists, topalbums, toptracks, tags, friends, neighbors]. other topics: artist, group, song, track, album" + "lastfm => lastfm data for on last.fm where in [recenttracks, topartists, topalbums, toptracks, tags, friends, neighbors]. other topics: events, artist, group, song, track, album" end end @@ -35,8 +48,49 @@ class LastFmPlugin < Plugin action = :neighbours if action == :neighbors what = params[:what] case action + when :events, :event + page = nil + begin + location = what.to_s.sub(/^in\s+/,'') + raise "wrong location #{location}" if location.empty? + esc = URI.escape(location) + page = @bot.httputil.get "#{LASTFM}/events/?findloc=#{esc}" + if page + events = Array.new + disp_events = Array.new + + # matches are: + # 1. day 2. moth 3. year 4. url_who 5. who 6. url_where 7. where 8. how_many + pre_events = page.scan(/.*?(.*?)<\/a>.*?(.*?)<\/a>.*?(.*?)<\/td>\s+<\/tr>/m) + debug pre_events.inspect + pre_events.each { |day, month, year, url_who, who, url_where, where, how_many| + date = Time.utc(year.to_i, month.to_i, day.to_i) + url = LASTFM + url_who + artist = who.ircify_html + loc = where.ircify_html + attendance = how_many.ircify_html + events << LastFmEvent.new(url, date, artist, loc, attendance) + } + debug events.inspect + + events[0..2].each { |event| + disp_events << "%s %s @ %s (%s) %s" % [event.date.strftime("%a %b, %d %Y"), event.artist, event.location, event.attendance, event.url] + } + m.reply disp_events.join(' | ') + else + m.reply "No events found in #{location}" + return + end + rescue Exception => e + m.reply "I had problems looking for events #{what.to_s}" + error e.inspect + debug e.backtrace.join("\n") + debug page[0...10*1024] if page + return + end when :artist, :group artist = what.to_s + page = nil begin esc = URI.escape(artist) page = @bot.httputil.get "#{LASTFM}/music/#{esc}" @@ -56,12 +110,13 @@ class LastFmPlugin < Plugin m.reply "%s : %s\n%s" % [title, url, wiki] else m.reply "no data found on #{artist}" + return end rescue Exception => e m.reply "I had problems looking for #{artist}" error e.inspect debug e.backtrace.join("\n") - debug page[0...10*1024] + debug page[0...10*1024] if page return end when :song, :track -- 2.32.0.93.g670b81a890