X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fsearch.rb;h=9b9768860ba1b17df978da7717b7308781b1ea48;hb=cec3f257a65f86a45d27e9ba8fcad347d0bd4e31;hp=a498d47fa29da06997864f9365af28ca780671ed;hpb=43ac960aa89e5a02291fe875627dac88ae7fda34;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/search.rb b/data/rbot/plugins/search.rb index a498d47f..9b976886 100644 --- a/data/rbot/plugins/search.rb +++ b/data/rbot/plugins/search.rb @@ -1,3 +1,18 @@ +#-- vim:sw=2:et +#++ +# +# :title: Google and Wikipedia search plugin for rbot +# +# Author:: Tom Gilbert (giblet) +# Author:: Giuseppe "Oblomov" Bilotta +# +# Copyright:: (C) 2002-2005 Tom Gilbert +# Copyright:: (C) 2006 Tom Gilbert, Giuseppe Bilotta +# Copyright:: (C) 2006-2007 Giuseppe Bilotta + +# TODO:: use lr=lang_ or whatever is most appropriate to let google know +# it shouldn't use the bot's location to find the preferred language + require 'uri' Net::HTTP.version_1_2 @@ -5,16 +20,27 @@ Net::HTTP.version_1_2 GOOGLE_WAP_LINK = /(.*?)<\/a>/im class SearchPlugin < Plugin + BotConfig.register BotConfigIntegerValue.new('google.hits', + :default => 3, + :desc => "Number of hits to return from Google searches") + BotConfig.register BotConfigIntegerValue.new('google.first_par', + :default => 0, + :desc => "When set to n > 0, the bot will return the first paragraph from the first n search hits") + BotConfig.register BotConfigIntegerValue.new('wikipedia.hits', + :default => 3, + :desc => "Number of hits to return from Wikipedia searches") + BotConfig.register BotConfigIntegerValue.new('wikipedia.first_par', + :default => 1, + :desc => "When set to n > 0, the bot will return the first paragraph from the first n wikipedia search hits") + def help(plugin, topic="") case topic - when "search" - "search => search google for " - when "google" - "google => search google for " + when "search", "google" + "#{topic} => search google for " when "wp" "wp [] => search for on Wikipedia. You can select a national to only search the national Wikipedia" else - "search (or: google ) => search google for | wp => search for on Wikipedia" + "search (or: google ) => search google for | wp => search for on Wikipedia" end end @@ -33,9 +59,11 @@ class SearchPlugin < Plugin url = "http://www.google.com/wml/search?q=#{site}#{searchfor}" + hits = params[:hits] || @bot.config['google.hits'] begin - wml = @bot.httputil.get_cached(url) + wml = @bot.httputil.get(url) + raise unless wml rescue => e m.reply "error googling for #{what}" return @@ -45,21 +73,33 @@ class SearchPlugin < Plugin m.reply "no results found for #{what}" return end - results = results[0...3].map { |res| + urls = Array.new + results = results[0...hits].map { |res| n = res[0] t = Utils.decode_html_entities res[2].gsub(filter, '').strip u = URI.unescape res[1] + urls.push(u) "#{n}. #{Bold}#{t}#{Bold}: #{u}" }.join(" | ") - m.reply "Results for #{what}: #{results}" + m.reply "Results for #{what}: #{results}", :split_at => /\s+\|\s+/ + + first_pars = params[:firstpar] || @bot.config['google.first_par'] + + return unless first_pars > 0 + + Utils.get_first_pars urls, first_pars, :message => m + end def wikipedia(m, params) lang = params[:lang] site = "#{lang.nil? ? '' : lang + '.'}wikipedia.org" + debug "Looking up things on #{site}" params[:site] = site params[:filter] = / - Wikipedia.*$/ + params[:hits] = @bot.config['wikipedia.hits'] + params[:firstpar] = @bot.config['wikipedia.first_par'] return google(m, params) end end