1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#-- 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
require 'open-uri'
class LastFmPlugin < Plugin
LASTFM = "http://www.last.fm"
def help(plugin, topic="")
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 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.ircify_html
else
raise "No URL/Title found for #{artist}"
end
wiki = "This #{action} doesn't have a description yet. You can help by writing it: #{url}/+wiki?action=edit"
if page.match(/<div class="wikiAbstract">(.*?)<\/div>/m)
wiki = $1.ircify_html
end
m.reply "%s : %s\n%s" % [title, url, wiki]
else
m.reply "no data found on #{artist}"
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]
return
end
when :song, :track
m.reply "not implemented yet, sorry"
when :album
m.reply "not implemented yet, sorry"
else
return usage(m) 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
end
end
end
plugin = LastFmPlugin.new
plugin.map 'lastfm :action *what'
|