#!/usr/bin/ruby require 'nntplib' require 'uudec' require 'ydec' dbname = ENV['dbname'] || 'newsgroupindex.full.db' db = SQLite3::Database.new dbname group = ARGV.shift regex = /#{ARGV.shift}/i Dir.chdir ARGV.shift if group != 'all' spec = ' where groupid=' + db.get_first_value('select id from groups where name=?', group).to_s raise 'unknown group name' if spec[-1] == ?= end artids = [] gname = {} lastsubj = '' db.execute("select id, subject, groupid from articles#{spec} order by groupid, subject") { |id, subj, gid| next if subj !~ regex if (subj = subj.gsub(/\d/, '')) != lastsubj lastsubj = subj puts subj end artids << [id.to_i, gid.to_i] gname[gid.to_i] ||= db.get_first_value('select name from groups where id=?', gid) } db.close uu = UUdecoder.new yy = Ydec.new in_uu = false in_yy = false s = NntpClient.new 'news.free.fr' curgrpid = nil artids.each { |id, gid| if gid != curgrpid s.group gname[gid] puts "\n [+] group #{gname[gid]}" curgrpid = gid end s.body(id) { |l| if in_uu in_uu = uu.parse_line l elsif in_yy in_yy = yy.parse_line l else in_uu = uu.parse_line l n_yy = yy.parse_line l if not in_uu end } } s.quit