From 8640f16308dce0b013af0470b926956e676ccc1a Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 28 Jan 2004 03:46:13 +0000 Subject: * lib/rss: rss library imported. [ruby-dev:22726] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- sample/rss/rss_recent.rb | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 sample/rss/rss_recent.rb (limited to 'sample/rss/rss_recent.rb') diff --git a/sample/rss/rss_recent.rb b/sample/rss/rss_recent.rb new file mode 100644 index 0000000000..3ccb4a4505 --- /dev/null +++ b/sample/rss/rss_recent.rb @@ -0,0 +1,84 @@ +#!/usr/bin/env ruby + +require "nkf" +class String + # From tdiary.rb + def shorten( len = 120 ) + lines = NKF::nkf( "-e -m0 -f#{len}", self.gsub( /\n/, ' ' ) ).split( /\n/ ) + lines[0].concat( '...' ) if lines[0] and lines[1] + lines[0] + end +end + +require "rss/parser" +require "rss/1.0" +require "rss/2.0" +require "rss/syndication" +require "rss/dublincore" + +items = [] +verbose = false + +def error(exception) + mark = "=" * 20 + mark = "#{mark} error #{mark}" + puts mark + puts exception.class + puts exception.message + puts exception.backtrace + puts mark +end +before_time = Time.now +ARGV.each do |fname| + if fname == '-v' + verbose = true + next + end + rss = nil + f = File.new(fname).read + begin + ## do validate parse + rss = RSS::Parser.parse(f) + rescue RSS::InvalidRSSError + error($!) if verbose + ## do non validate parse for invalid RSS 1.0 + begin + rss = RSS::Parser.parse(f, false) + rescue RSS::Error + ## invalid RSS. + error($!) if verbose + end + rescue RSS::Error + error($!) if verbose + end + if rss.nil? + puts "#{fname} does not include RSS 1.0 or 0.9x/2.0" + else + begin + rss.output_encoding = "euc-jp" + rescue RSS::UnknownConversionMethodError + error($!) if verbose + end + rss.items.each do |item| + if item.respond_to?(:pubDate) and item.pubDate + class << item + alias_method(:dc_date, :pubDate) + end + end + if item.respond_to?(:dc_date) and item.dc_date + items << [rss.channel, item] + end + end + end +end +processing_time = Time.now - before_time + +items.sort do |x, y| + y[1].dc_date <=> x[1].dc_date +end[0..20].each do |channel, item| + puts "#{item.dc_date.localtime.iso8601} : " << + "#{channel.title} : #{item.title}" + puts " description : #{item.description.shorten(50)}" if item.description +end + +puts "Processing Time : #{processing_time}s" -- cgit v1.2.3