OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / sample / rss / blend.rb
1 #!/usr/bin/env ruby
2
3 require "rss"
4
5 feeds = []
6 verbose = false
7 encoding = "UTF-8"
8
9 def error(exception)
10   mark = "=" * 20
11   mark = "#{mark} error #{mark}"
12   STDERR.puts mark
13   STDERR.puts exception.class
14   STDERR.puts exception.message
15   STDERR.puts exception.backtrace
16   STDERR.puts mark
17 end
18
19 before_time = Time.now
20 ARGV.each do |fname|
21   if fname == '-v'
22     verbose = true
23     next
24   end
25   rss = nil
26   f = File.new(fname).read
27   begin
28     ## do validate parse
29     rss = RSS::Parser.parse(f)
30   rescue RSS::InvalidRSSError
31     error($!) if verbose
32     ## do non validate parse for invalid RSS 1.0
33     begin
34       rss = RSS::Parser.parse(f, false)
35     rescue RSS::Error
36       ## invalid RSS.
37       error($!) if verbose
38     end
39   rescue RSS::Error
40     error($!) if verbose
41   end
42   if rss.nil?
43     STDERR.puts "#{fname} does not include RSS 1.0 or 0.9x/2.0"
44   else
45     begin
46       rss.output_encoding = encoding
47     rescue RSS::UnknownConversionMethodError
48       error($!) if verbose
49     end
50     feeds << rss
51   end
52 end
53 processing_time = Time.now - before_time
54
55 rss = RSS::Maker.make("1.0") do |maker|
56   maker.encoding = encoding
57   maker.channel.about = "http://example.com/blend.rdf"
58   maker.channel.title = "blended feeds"
59   maker.channel.link = "http://example.com/"
60   maker.channel.description = "blended feeds generated by RSS Parser"
61
62   feeds.each do |feed|
63     feed.items.each do |item|
64       item.setup_maker(maker.items)
65     end
66   end
67
68   maker.items.each do |item|
69     item.title ||= "UNKNOWN"
70     item.link ||= "UNKNOWN"
71   end
72
73   maker.items.do_sort = true
74   maker.items.max_size = 15
75 end
76 puts rss
77
78 STDERR.puts "Used XML parser: #{RSS::Parser.default_parser}"
79 STDERR.puts "Processing time: #{processing_time}s"