summaryrefslogtreecommitdiff
path: root/data/rbot
diff options
context:
space:
mode:
authorYaohan Chen <hagabaka@nanomachine.STUDENT.cwru.edu>2008-03-18 12:34:49 -0400
committerYaohan Chen <hagabaka@nanomachine.STUDENT.cwru.edu>2008-03-18 12:34:49 -0400
commit19773ee72b72a74f6fe911750ae7a2337a81893d (patch)
treef4fd7c37de0d0113e2a6255f4e0cc7a28e25d5b3 /data/rbot
parentcb69e21777bac1c715ce505aeab5f2ce03ade71e (diff)
parent73f25ad4578a7fffc1608099d15a479f0af6b215 (diff)
Merge branch 'master' of ssh://ruby-rbot.org/var/git/rbot
Diffstat (limited to 'data/rbot')
-rw-r--r--data/rbot/plugins/rss.rb38
1 files changed, 32 insertions, 6 deletions
diff --git a/data/rbot/plugins/rss.rb b/data/rbot/plugins/rss.rb
index 3b790bac..8f16509e 100644
--- a/data/rbot/plugins/rss.rb
+++ b/data/rbot/plugins/rss.rb
@@ -287,8 +287,9 @@ class RSSFeedsPlugin < Plugin
# Auxiliary method used to collect two lines for rss output filters,
# 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))
+ def make_stream(line1, line2, s, 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)
@@ -977,7 +999,7 @@ class RSSFeedsPlugin < Plugin
desc = item.content_encoded.ircify_html(desc_opt)
elsif item.respond_to?(:description) && item.description
desc = item.description.ircify_html(desc_opt)
- else
+ elsif item.respond_to?(:content) && item.content
if item.content.type == "html"
desc = item.content.content.ircify_html(desc_opt)
else
@@ -986,6 +1008,8 @@ class RSSFeedsPlugin < Plugin
desc = desc.slice(0, desc_opt[:limit]) + "#{Reverse}...#{Reverse}"
end
end
+ else
+ desc = "(?)"
end
link = item.link.href rescue item.link.chomp rescue nil
@@ -1005,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
@@ -1078,13 +1104,13 @@ class RSSFeedsPlugin < Plugin
return nil
end
if rss.respond_to? :channel
- rss.channel.title ||= "Unknown"
+ rss.channel.title ||= "(?)"
title = rss.channel.title
else
title = rss.title.content
end
rss.items.each do |item|
- item.title ||= "Unknown"
+ item.title ||= "(?)"
items << item
end
end