#! /usr/local/bin/ruby ################################################################## #### feeder module, takes articles from RSS feeds end posts them #### #### Written by F. Senault (fred@lacave.net), free to use, #### redistribute, modify. #### No warranty at all, implied or whatever. Use at your own #### risk. ################################################################## $:.push(File.dirname($0)) begin require 'rubygems' rescue Exception end require 'open-uri' require 'netnntp' require 'rss2nntp' require 'feed_tools' require 'zlib' n = [] conf = RSS2NNTPConf.new() RSSArticle.loadconfig(conf) conf.feeds.each do |u, g| begin puts "Feed #{u}" if(conf[:debug]) #fdata = '' #open(u, "User-Agent" => "#{conf[:program]} v#{conf[:version]}; #{conf[:abuse]}") do |f| # f.each do |l| # if(l =~ /]*>/i) then # puts "Invalid feed #{u}" if(conf[:debug]) # fdata = '' # break # else # fdata += l # end # end #end #if(fdata != '') then #rss = FeedTools::Feed.new() #rss.url = u #rss.feed_data = fdata if u =~ /^gzip:(.*)$/ u = $1 rss = FeedTools::Feed.new() open(u) do |f| rss.feed_data = Zlib::GzipReader.new(f).read end else rss = FeedTools::Feed.open(u) end rss.items.each do |i| puts "Message #{n.length + 1} -- #{u}" if(conf[:debug]) n.push(RSSArticle.new(i, rss, u)) if(conf[:debug]) then if(conf[:verbose]) then puts n[-1].to_s else puts n[-1].to_h_light end puts '=' * 78 puts end end #end rescue Exception => e raise e if(conf[:debug]) end if(conf[:post] && n.length > 0) then puts "Posting..." if(conf[:debug]) Net::NNTP.debug = true if(conf[:debug]) Net::NNTP.start(conf[:server]) do |nntp| n.each do |a| r = nntp.check(a['Message-ID']) if(r.ok) then r = nntp.takethis(a) if(!r.ok) then puts "Takethis : #{r.to_s}" end else puts "Check : #{r.to_s}" if(conf[:debug]) end end end end n = [] end