# Make an 'unique' ID for a given item, based on appropriate bot options
# Currently only suppored is bot.config['rss.show_updated']: when false,
# only the guid/link is accounted for.
- #
+
+ def block_rescue(df = nil, &block)
+ v = block.call rescue nil
+ (String === v && '' != v) ? v : nil
+ end
+
def make_uid(item)
uid = [
- (item.guid.content rescue \
- item.guid rescue \
- item.link.href rescue \
- item.link rescue ''
+ (block_rescue do item.guid.content end ||
+ block_rescue do item.guid end ||
+ block_rescue do item.link.href end ||
+ block_rescue do item.link end
)
]
if @bot.config['rss.show_updated']
- uid.push((item.content.content rescue item.description rescue nil))
- uid.unshift((item.title.content rescue item.title rescue nil))
+ uid.push(
+ block_rescue do item.content.content end ||
+ block_rescue do item.description end
+ )
+ uid.unshift(
+ block_rescue do item.title.content end ||
+ block_rescue do item.title end
+ )
end
+ # debug "taking hash of #{uid.inspect}"
uid.hash
end
fetched = fetchRss(feed, m, false)
end
return unless fetched or feed.xml
- if not fetched and feed.items
- m.reply "using old data"
- else
+ if fetched or not feed.items
parsed = parseRss(feed, m)
- m.reply "using old data" unless parsed
end
return unless feed.items
+ m.reply "using old data" unless fetched and parsed
+
title = feed.title
items = feed.items
desc = "(?)"
end
- link = item.link.href rescue item.link.chomp rescue nil
+ link = item.link.href rescue item.link rescue nil
+ link.strip! if link
category = select_nonempty((item.category.content rescue nil), (item.dc_subject rescue nil))
+ category.strip! if category
author = select_nonempty((item.author.name.content rescue nil), (item.dc_creator rescue nil), (item.author rescue nil))
+ author.strip! if author
line1 = nil
line2 = nil
end
items = []
if rss.nil?
- report_problem("#{feed} does not include RSS 1.0 or 0.9x/2.0", nil, m)
+ if xml.match(/xmlns\s*=\s*(['"])http:\/\/www.w3.org\/2005\/Atom\1/) and not defined?(RSS::Atom)
+ report_problem("#{feed.handle} @ #{feed.url} looks like an Atom feed, but your Ruby/RSS library doesn't seem to support it. Consider getting the latest version from http://raa.ruby-lang.org/project/rss/", nil, m)
+ else
+ report_problem("#{feed.handle} @ #{feed.url} doesn't seem to contain an RSS or Atom feed I can read", nil, m)
+ end
+ return nil
else
begin
rss.output_encoding = 'UTF-8'