]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
rss plugin: provide htmlinfo filter
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 17 Mar 2008 18:14:28 +0000 (19:14 +0100)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 17 Mar 2008 18:14:28 +0000 (19:14 +0100)
data/rbot/plugins/rss.rb

index dd35978168cbf7ae328c64cbd71185f226ab4786..8f16509ec35fe32c2b4b8dd0afe40d877e73f911 100644 (file)
@@ -288,7 +288,8 @@ class RSSFeedsPlugin < Plugin
   # running substitutions against DataStream _s_ optionally joined
   # with hash _h_
   def make_stream(line1, line2, s, h={})
-    DataStream.new([line1, line2].compact.join("\n") % s.merge(h))
+    ss = s.merge(h)
+    DataStream.new([line1, line2].compact.join("\n") % ss, ss)
   end
 
   # Define default RSS filters
@@ -354,6 +355,27 @@ class RSSFeedsPlugin < Plugin
       line1 << " (by %{author})" if s[:author]
       make_stream(line1, nil, s)
     }
+
+    # Define an HTML info filter too
+    @bot.register_filter(:rss, :htmlinfo) { |s| htmlinfo_filter(s) }
+
+    # This is the output format used by the input filter
+    @bot.register_filter(:htmlinfo, @outkey) { |s|
+      line1 = "%{title}%{at}%{link}"
+      make_stream(line1, nil, s)
+    }
+  end
+
+  def htmlinfo_filter(s)
+    return nil unless s[:headers] and s[:headers]['x-rbot-location']
+    blob = RssBlob.new(s[:headers]['x-rbot-location'],"", :htmlinfo)
+    return nil unless fetchRss(blob, nil)
+    return nil unless parseRss(blob, nil)
+    output = []
+    blob.items.each { |it|
+      output << printFormattedRss(blob, it)[:text]
+    }
+    return {:title => blob.title, :content => output.join(" | ")}
   end
 
   # Display the known rss types
@@ -916,7 +938,7 @@ class RSSFeedsPlugin < Plugin
   def printFormattedRss(feed, item, opts=nil)
     debug item
     places = feed.watchers
-    handle = "::#{feed.handle}:: "
+    handle = feed.handle.empty? ? "" : "::#{feed.handle}:: "
     date = String.new
     if opts
       places = opts[:places] if opts.key?(:places)
@@ -1007,6 +1029,8 @@ class RSSFeedsPlugin < Plugin
                          :title => title, :desc => desc, :link => link,
                          :category => category, :author => author, :at => at)
 
+    return output if places.empty?
+
     places.each { |loc|
       output.to_s.each_line { |line|
         @bot.say loc, line, :overlong => :truncate