]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
Move code to get first par from a series of urls from search plugin to Utils, and...
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Tue, 6 Feb 2007 16:46:54 +0000 (16:46 +0000)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Tue, 6 Feb 2007 16:46:54 +0000 (16:46 +0000)
data/rbot/plugins/dict.rb
data/rbot/plugins/search.rb
lib/rbot/core/utils/utils.rb

index d9fafa5c774d10cf2ea124b70046a6c70aa818b6..a948fd06befc2bbfa2bc18f1642efb6aa680b982 100644 (file)
@@ -22,6 +22,7 @@ class DictPlugin < Plugin
     super\r
     @dmurl = "http://www.demauroparavia.it/"\r
     @dmwapurl = "http://wap.demauroparavia.it/index.php?lemma=%s"\r
+    @dmwaplemma = "http://wap.demauroparavia.it/lemma.php?ID=%s"\r
     @oxurl = "http://www.askoxford.com/concise_oed/%s"\r
     @chambersurl = "http://www.chambersharrap.co.uk/chambers/features/chref/chref.py/main?query=%s&title=21st"\r
   end\r
@@ -59,16 +60,23 @@ class DictPlugin < Plugin
     end\r
     entries = xml.scan(DEMAURO_LEMMA)\r
     text = word\r
+    urls = []\r
     if !entries.assoc(word) and !entries.assoc(word.upcase)\r
       return false if justcheck\r
       text += " not found. Similar words"\r
     end\r
     return true if justcheck\r
     text += ": "\r
+    n = 0\r
     text += entries[0...5].map { |ar|\r
-      "#{ar[0]} - #{ar[1].gsub(/<\/?em>/,'')}: #{@dmurl}#{ar[2]}"\r
+      n += 1\r
+      urls << @dmwaplemma % ar[2]\r
+      "#{n}. #{Bold}#{ar[0]}#{Bold} - #{ar[1].gsub(/<\/?em>/,'')}: #{@dmurl}#{ar[2]}"\r
     }.join(" | ")\r
     m.reply text\r
+\r
+    Utils.get_first_pars urls, 5, :http_util => @bot.httputil, :message => m\r
+\r
   end\r
 \r
   def is_italian?(word)\r
index e94661b014483c2f94b66384ddc73a89de8ee79c..a10853bf868ac6ec1e7ca2b7802715e33da872a2 100644 (file)
@@ -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)
index 11312e19f32df3dd4c5d7365a125d10bd073f38b..f5a6c1db5c7423544acdfa78a7d497f37e82a7df 100644 (file)
@@ -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