X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fimdb.rb;h=5e4cc65ae49d2eb28d4c5bcece0baedfd0ecef7a;hb=2e6f388addc0bb9ddc0cb991af50220c1e5e64c3;hp=759e380c091d43a2d8496af53c420046f4ab97ae;hpb=340709f3efdad7ebf4f711434a450abf89e376c6;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/imdb.rb b/data/rbot/plugins/imdb.rb index 759e380c..5e4cc65a 100644 --- a/data/rbot/plugins/imdb.rb +++ b/data/rbot/plugins/imdb.rb @@ -1,8 +1,16 @@ -# IMDB plugin for RubyBot -# (c) 2005 Arnaud Cornet -# Licensed under MIT License. +#-- vim:sw=2:et +#++ +# +# :title: IMDB plugin for rbot +# +# Author:: Arnaud Cornet +# Copyright:: (C) 2005 Arnaud Cornet +# License:: MIT license +# +# Notes by Giuseppe Bilotta: +# TODO return more than one match (configurable) +# TODO why do we use CGI.unescapeHTML? shall we rely on the rbot methods? -require 'net/http' require 'cgi' require 'uri/common' @@ -16,7 +24,7 @@ class Imdb @http = @bot.httputil.get_proxy(URI.parse("http://us.imdb.com/find?q=#{str}")) @http.start begin - resp, data = @http.get("/find?q=#{str}", "User-Agent" => "Mozilla/5.0") + resp, data = @http.get("/find?q=#{str}", @bot.httputil.headers) rescue Net::ProtoRetriableError => detail head = detail.data if head.code == "301" or head.code == "302" @@ -24,7 +32,7 @@ class Imdb end end if resp.code == "200" - m = /]*)>([^<]*)<\/a>/.match(resp.body) + m = /]*)>([^<]*)<\/a>/.match(resp.body) if m url = m[1] title = m[2] @@ -39,17 +47,16 @@ class Imdb def info(rawstr) sr = search(rawstr) if !sr - puts "IMDB : search returned NIL" + debug "IMDB: search returned NIL" return nil end - resp, data = @http.get(sr, "User-Agent" => - "Mozilla/5.0 (compatible; Konqueror/3.1; Linux)") + resp, data = @http.get(sr, @bot.httputil.headers) if resp.code == "200" m = /([^<]*)<\/title>/.match(resp.body) return nil if !m title = CGI.unescapeHTML(m[1]) - m = /<b>([0-9.]+)\/10<\/b> \(([0-9,]+) votes?\)/.match(resp.body) + m = /<b>([0-9.]+)\/10<\/b>\n?\r?\s+<small>\(<a href="ratings">([0-9,]+) votes?<\/a>\)<\/small>/.match(resp.body) return nil if !m score = m[1] votes = m[2] @@ -70,16 +77,12 @@ class ImdbPlugin < Plugin "imdb <string> => search http://www.imdb.org for <string>" end - def privmsg(m) - unless(m.params && m.params.length > 0) - m.reply "incorrect usage: " + help(m.plugin) - return - end - + def imdb(m, params) + what = params[:what].to_s i = Imdb.new(@bot) - info = i.info(m.params) + info = i.info(what) if !info - m.reply "Nothing found for #{m.params}" + m.reply "Nothing found for #{what}" return nil end m.reply "#{info[1]} : #{info[0]}" @@ -88,5 +91,5 @@ class ImdbPlugin < Plugin end plugin = ImdbPlugin.new -plugin.register("imdb") +plugin.map "imdb *what"