summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/rbot/plugins/dict.rb10
-rw-r--r--data/rbot/plugins/search.rb28
-rw-r--r--lib/rbot/core/utils/utils.rb35
3 files changed, 50 insertions, 23 deletions
diff --git a/data/rbot/plugins/dict.rb b/data/rbot/plugins/dict.rb
index d9fafa5c..a948fd06 100644
--- a/data/rbot/plugins/dict.rb
+++ b/data/rbot/plugins/dict.rb
@@ -22,6 +22,7 @@ class DictPlugin < Plugin
super
@dmurl = "http://www.demauroparavia.it/"
@dmwapurl = "http://wap.demauroparavia.it/index.php?lemma=%s"
+ @dmwaplemma = "http://wap.demauroparavia.it/lemma.php?ID=%s"
@oxurl = "http://www.askoxford.com/concise_oed/%s"
@chambersurl = "http://www.chambersharrap.co.uk/chambers/features/chref/chref.py/main?query=%s&title=21st"
end
@@ -59,16 +60,23 @@ class DictPlugin < Plugin
end
entries = xml.scan(DEMAURO_LEMMA)
text = word
+ urls = []
if !entries.assoc(word) and !entries.assoc(word.upcase)
return false if justcheck
text += " not found. Similar words"
end
return true if justcheck
text += ": "
+ n = 0
text += entries[0...5].map { |ar|
- "#{ar[0]} - #{ar[1].gsub(/<\/?em>/,'')}: #{@dmurl}#{ar[2]}"
+ n += 1
+ urls << @dmwaplemma % ar[2]
+ "#{n}. #{Bold}#{ar[0]}#{Bold} - #{ar[1].gsub(/<\/?em>/,'')}: #{@dmurl}#{ar[2]}"
}.join(" | ")
m.reply text
+
+ Utils.get_first_pars urls, 5, :http_util => @bot.httputil, :message => m
+
end
def is_italian?(word)
diff --git a/data/rbot/plugins/search.rb b/data/rbot/plugins/search.rb
index e94661b0..a10853bf 100644
--- a/data/rbot/plugins/search.rb
+++ b/data/rbot/plugins/search.rb
@@ -1,3 +1,7 @@
+# vim: set sw=2 et:
+#
+# TODO: use lr=lang_<code> 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
@@ -70,28 +74,8 @@ class SearchPlugin < Plugin
first_pars = params[:firstpar] || @bot.config['google.first_par']
- idx = 0
- while first_pars > 0 and urls.length > 0
- url.replace(urls.shift)
- idx += 1
-
- # FIXME what happens if some big file is returned? We should share
- # code with the url plugin to only retrieve partial file content!
- xml = @bot.httputil.get_cached(url)
- if xml.nil?
- debug "Unable to retrieve #{url}"
- next
- end
- par = Utils.ircify_first_html_par(xml)
- if par.empty?
- debug "No first par found\n#{xml}"
- # FIXME only do this if the 'url' plugin is loaded
- par = @bot.plugins['url'].get_title_from_html(xml)
- next if par.empty?
- end
- m.reply "[#{idx}] #{par}", :overlong => :truncate
- first_pars -=1
- end
+ Utils.get_first_pars urls, first_pars, :http_util => @bot.httputil, :message => m
+
end
def wikipedia(m, params)
diff --git a/lib/rbot/core/utils/utils.rb b/lib/rbot/core/utils/utils.rb
index 11312e19..f5a6c1db 100644
--- a/lib/rbot/core/utils/utils.rb
+++ b/lib/rbot/core/utils/utils.rb
@@ -445,5 +445,40 @@ module ::Irc
end
return txt
end
+
+ # Get the first pars of the first _count_ _urls_.
+ # The pages are downloaded using an HttpUtil service passed as _opts_ :http_util,
+ # and echoed as replies to the IRC message passed as _opts_ :message.
+ #
+ def Utils.get_first_pars(urls, count, opts={})
+ idx = 0
+ msg = opts[:message]
+ while count > 0 and urls.length > 0
+ url = urls.shift
+ idx += 1
+
+ # FIXME what happens if some big file is returned? We should share
+ # code with the url plugin to only retrieve partial file content!
+ xml = opts[:http_util].get_cached(url)
+ if xml.nil?
+ debug "Unable to retrieve #{url}"
+ next
+ end
+ debug "Retrieved #{url}"
+ debug "\t#{xml}"
+ par = Utils.ircify_first_html_par(xml)
+ if par.empty?
+ debug "No first par found\n#{xml}"
+ # FIXME only do this if the 'url' plugin is loaded
+ # TODO even better, put the code here
+ # par = @bot.plugins['url'].get_title_from_html(xml)
+ next if par.empty?
+ end
+ msg.reply "[#{idx}] #{par}", :overlong => :truncate if msg
+ count -=1
+ end
+ end
+
+
end
end