diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-05 14:09:23 +0000 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2007-04-05 14:09:23 +0000 |
commit | 9c98ff2e3e6dbf13eb650bff91b49b37594ca4b9 (patch) | |
tree | 3146e6396537f5710a0ac804f61157d3e6bb11c1 | |
parent | f6bcb00de79cbfecaafa8f6c6b4bfa8ffd7116d7 (diff) |
search plugin: gcalc command thanks to epitron
-rw-r--r-- | data/rbot/plugins/search.rb | 33 | ||||
-rw-r--r-- | data/rbot/plugins/search.rb-epipatch | 108 |
2 files changed, 33 insertions, 108 deletions
diff --git a/data/rbot/plugins/search.rb b/data/rbot/plugins/search.rb index 9b976886..aea6dc4c 100644 --- a/data/rbot/plugins/search.rb +++ b/data/rbot/plugins/search.rb @@ -18,6 +18,7 @@ require 'uri' Net::HTTP.version_1_2 GOOGLE_WAP_LINK = /<a accesskey="(\d)" href=".*?u=(.*?)">(.*?)<\/a>/im +GOOGLE_CALC_RESULT = %r{<p><table><tr><td><img src=/images/calc_img\.gif></td><td> </td><td nowrap><font size=\+1><b>(.+)</b></td></tr><tr><td>} class SearchPlugin < Plugin BotConfig.register BotConfigIntegerValue.new('google.hits', @@ -37,6 +38,8 @@ class SearchPlugin < Plugin case topic when "search", "google" "#{topic} <string> => search google for <string>" + when "gcalc" + "gcalc <equation> => use the google calculator to find the answer to <equation>" when "wp" "wp [<code>] <string> => search for <string> on Wikipedia. You can select a national <code> to only search the national Wikipedia" else @@ -92,6 +95,35 @@ class SearchPlugin < Plugin end + def gcalc(m, params) + what = params[:words].to_s + searchfor = URI.escape(what).sub('+','%2B') + + debug "Getting gcalc thing: #{searchfor.inspect}" + url = "http://www.google.com/search?q=#{searchfor}" + + begin + html = @bot.httputil.get(url) + rescue => e + m.reply "error googlecalcing #{what}" + return + end + + debug "#{html.size} bytes of html recieved" + + results = html.scan(GOOGLE_CALC_RESULT) + debug "results: #{results.inspect}" + + if results.length != 1 + m.reply "couldn't calculate #{what}" + return + end + + result = results[0][0].ircify_html + debug "replying with: #{result.inspect}" + m.reply "#{result}" + end + def wikipedia(m, params) lang = params[:lang] site = "#{lang.nil? ? '' : lang + '.'}wikipedia.org" @@ -108,6 +140,7 @@ plugin = SearchPlugin.new plugin.map "search *words", :action => 'google' plugin.map "google *words", :action => 'google' +plugin.map "gcalc *words", :action => 'gcalc' plugin.map "wp :lang *words", :action => 'wikipedia', :requirements => { :lang => /^\w\w\w?$/ } plugin.map "wp *words", :action => 'wikipedia' diff --git a/data/rbot/plugins/search.rb-epipatch b/data/rbot/plugins/search.rb-epipatch deleted file mode 100644 index 5ead2074..00000000 --- a/data/rbot/plugins/search.rb-epipatch +++ /dev/null @@ -1,108 +0,0 @@ -require 'uri' - -Net::HTTP.version_1_2 - -GOOGLE_WAP_LINK = /<a accesskey="(\d)" href=".*?u=(.*?)">(.*?)<\/a>/im -GOOGLE_CALC_RESULT = %r{<p><table><tr><td><img src=/images/calc_img\.gif></td><td> </td><td nowrap><font size=\+1><b>(.+)</b></td></tr><tr><td>} - -class SearchPlugin < Plugin - def help(plugin, topic="") - case topic - when "search" - "search <string> => search google for <string>" - when "google" - "google <string> => search google for <string>" - when "gcalc" - "gcalc <equation> => use the google calculator to find the answer to <equation>" - when "wp" - "wp [<code>] <string> => search for <string> on Wikipedia. You can select a national <code> to only search the national Wikipedia" - else - "search <string> (or: google <string>) => search google for <string> | wp <string> => search for <string> on Wikipedia | gcalc <equation> => use google calculator to calculate <equation>" - end - end - - def google(m, params) - what = params[:words].to_s - searchfor = URI.escape what - # This method is also called by other methods to restrict searching to some sites - if params[:site] - site = "site:#{params[:site]}+" - else - site = "" - end - # It is also possible to choose a filter to remove constant parts from the titles - # e.g.: "Wikipedia, the free encyclopedia" when doing Wikipedia searches - filter = params[:filter] || "" - - url = "http://www.google.com/wml/search?q=#{site}#{searchfor}" - - begin - wml = @bot.httputil.get_cached(url) - rescue => e - m.reply "error googling for #{what}" - return - end - results = wml.scan(GOOGLE_WAP_LINK) - if results.length == 0 - m.reply "no results found for #{what}" - return - end - results = results[0...3].map { |res| - n = res[0] - t = Utils.decode_html_entities res[2].gsub(filter, '').strip - u = URI.unescape res[1] - "#{n}. #{Bold}#{t}#{Bold}: #{u}" - }.join(" | ") - - m.reply "Results for #{what}: #{results}" - end - - def gcalc(m, params) - what = params[:words].to_s - searchfor = URI.escape(what).sub('+','%2B') - - puts "Getting gcalc thing: #{searchfor.inspect}" - url = "http://www.google.com/search?q=#{searchfor}" - - begin - html = @bot.httputil.get_cached(url) - rescue => e - m.reply "error googlecalcing #{what}" - return - end - - puts "#{html.size} bytes of html recieved" - - results = html.scan(GOOGLE_CALC_RESULT) - puts "results: #{results.inspect}" - - if results.length != 1 - m.reply "couldn't calculate #{what}" - #puts html - return - end - - result = results[0][0] - result.gsub!("<font size=-2> </font>", ",") - puts "replying with: #{result.inspect}" - m.reply "#{result}" - end - - def wikipedia(m, params) - lang = params[:lang] - site = "#{lang.nil? ? '' : lang + '.'}wikipedia.org" - params[:site] = site - params[:filter] = / - Wikipedia.*$/ - return google(m, params) - end - -end - -plugin = SearchPlugin.new - -plugin.map "search *words", :action => 'google' -plugin.map "google *words", :action => 'google' -plugin.map "gcalc *words", :action => 'gcalc' -plugin.map "wp :lang *words", :action => 'wikipedia', :requirements => { :lang => /^\w\w\w?$/ } -plugin.map "wp *words", :action => 'wikipedia' - |