Changeset 261
- Timestamp:
- 05/13/06 17:32:39 (3 years ago)
- Files:
-
- 1 modified
-
trunk/tools/irc/feed.rb (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/irc/feed.rb
r259 r261 7 7 require 'yaml' 8 8 9 class FeedPlugin < Irc::Plugins::Plugin9 class TracPlugin < Irc::Plugins::Plugin 10 10 11 11 def help( plugin, topic="" ) 12 " feed plugin: periodicly notifies channels of RSS feedactivity. " +13 "' feed on <url> <elements>': reports on the elements from the feed"12 "trac plugin: periodicly notifies channels of Trac activity. " + 13 "'trac <url>': reports on a Trac" 14 14 end 15 15 … … 18 18 @feeds = {} 19 19 @period = 60 20 @bot.timer.add( @period, self ) { | feeder|21 feeder.feed20 @bot.timer.add( @period, self ) { |tracer| 21 tracer.feed 22 22 } 23 23 end 24 24 25 attr_accessor :feeds26 27 25 def feed 28 26 puts @feeds.to_yaml 29 @feeds.each {|url,args| 30 open( url ) {|page| 31 data = page.read 32 @bot.say parse( rss, args ) 33 } 27 @feeds.each {|url,params| 28 begin 29 open( url ) {|page| 30 data = page.read 31 @bot.say params[:where], parse( data, params ) 32 } 33 rescue OpenURI::HTTPError, EOFError 34 retry #:MC: is this going to be very bad? 35 end 34 36 } 35 37 end 36 38 37 def parse( data, args ) 39 DisplayString = "%s created '%s' at %s" 40 Elements = %w[ author title pubDate ] 41 42 def parse( data, params ) 38 43 begin 39 44 rss = RSS::Parser.parse( data ) … … 42 47 end 43 48 message = '' 44 args[:elements].each {|element| 45 message += rss.channel.send( element ) 49 newest = params[:last_change] 50 rss.channel.items.find_all {|item| 51 params[:last_change] < item.pubDate 52 }.sort_by {|item| item.pubDate}.each {|item| 53 newest = item.pubDate 54 message += DisplayString % Elements.map {|element| 55 value = item.send( element ) || '' 56 value = "???" if value.kind_of?(String) and value.empty? 57 value 58 } + "\n" 46 59 } 60 params[:last_change] = newest 47 61 return message 48 62 end 49 63 50 64 def feed_on( m, params ) 51 url = params[:feed] 65 puts "m is '#{m.to_yaml}'" 66 puts "params is '#{params.to_yaml}'" 67 url = params[:what] 52 68 @feeds[url] = { 53 69 :last_change => Time.at(0), 54 : elements => params[:elements]70 :where => m.channel 55 71 } 56 72 end 57 73 58 end # class FeedPlugin74 end # class TracPlugin 59 75 60 plugin = FeedPlugin.new61 plugin.map ' feed on :what :which', :action => 'feed_on'76 plugin = TracPlugin.new 77 plugin.map 'trac :what', :action => 'feed_on'
