diff options
-rw-r--r-- | data/rbot/plugins/dict.rb | 10 | ||||
-rw-r--r-- | data/rbot/plugins/search.rb | 28 | ||||
-rw-r--r-- | lib/rbot/core/utils/utils.rb | 35 |
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 |