Changeset 261

Show
Ignore:
Timestamp:
05/13/06 17:32:39 (3 years ago)
Author:
stillflame
Message:

- much more workinging TracPlugin? out of FeedPlugin?

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/tools/irc/feed.rb

    r259 r261  
    77require 'yaml' 
    88 
    9 class FeedPlugin < Irc::Plugins::Plugin 
     9class TracPlugin < Irc::Plugins::Plugin 
    1010 
    1111    def help( plugin, topic="" ) 
    12         "feed plugin: periodicly notifies channels of RSS feed activity.  " + 
    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" 
    1414    end 
    1515 
     
    1818      @feeds = {} 
    1919      @period = 60 
    20       @bot.timer.add( @period, self ) { |feeder| 
    21         feeder.feed 
     20      @bot.timer.add( @period, self ) { |tracer| 
     21        tracer.feed 
    2222      } 
    2323    end 
    2424 
    25     attr_accessor :feeds 
    26  
    2725    def feed 
    2826      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 
    3436      } 
    3537    end 
    3638 
    37     def parse( data, args ) 
     39    DisplayString = "%s created '%s' at %s" 
     40    Elements = %w[ author title pubDate ] 
     41 
     42    def parse( data, params ) 
    3843      begin 
    3944        rss = RSS::Parser.parse( data ) 
     
    4247      end 
    4348      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" 
    4659      } 
     60      params[:last_change] = newest 
    4761      return message 
    4862    end 
    4963 
    5064    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] 
    5268      @feeds[url] = { 
    5369        :last_change => Time.at(0), 
    54         :elements => params[:elements] 
     70        :where => m.channel 
    5571      } 
    5672    end 
    5773 
    58 end # class FeedPlugin 
     74end # class TracPlugin 
    5975 
    60 plugin = FeedPlugin.new 
    61 plugin.map 'feed on :what :which', :action => 'feed_on' 
     76plugin = TracPlugin.new 
     77plugin.map 'trac :what', :action => 'feed_on'