This handy little bot keeps track of RSS feeds, and announces in the channel when one is updated. (note: be sure to edit the path to the datafiles) Each poller runs inside its own ruby thread, and can be run on its own independent schedule
require 'thread' require 'rss/1.0' require 'rss/2.0' require 'open-uri' require 'fileutils' require 'digest/md5' class Feeder < AutumnLeaf def watch_feed(url, title, sleepfor=300) message "Watching (#{title}) [#{url}] every #{sleepfor} seconds" feedid = Digest::MD5.hexdigest(title) Thread.new { while true begin content = "" open(url) { |s| content = s.read } rss = RSS::Parser.parse(content, false) rss.items.each { |entry| digest = Digest::MD5.hexdigest(entry.title) if !File.exist?("/tmp/.rss.#{feedid}.#{digest}") FileUtils.touch("/tmp/.rss.#{feedid}.#{digest}") message "#{entry.title} (#{title}) #{entry.link}" end sleep(2) } rescue sleep(2) end sleep(sleepfor) end } sleep(1) end def did_start_up watch_feed("http://planet.wordpress.org/rss20.xml", "planet", 600) watch_feed("http://wordpress.com/feed/", "wpcom", 300) end end