[ruby-list:46014] 複数バージョンのRubyに対応するRSS::Makerの使い方
From:
Kazuhiro NISHIYAMA <zn@...>
Date:
2009-05-13 08:50:52 UTC
List:
ruby-list #46014
西山和広です。
http://www.cozmixng.org/~rwiki/?cmd=view;name=RSS+Parser%3A%3ATutorial.ja
を参考にして RSS::Maker を使ってみたのですが、いくつかひっかかった点が
あります。
現在の対象環境がetchのruby1.8 (ruby 1.8.5)で、lenny に上げたときにも
動くようにしようと思って、いろんなバージョンで試しています。
まず、1.8.5 や 1.8.6 だとatom が生成できなくて、atom 以外で
author= が NoMethodError になりました。
これは古いバージョンだから仕方がないのかもしれません。
Tutorial.ja だと 0.91 を生成するときに
RSS::Maker.makeの第一引数を"0.91"に変更
するだけで出来るように書いてあるのですが、
maker.channel.language = "ja"
も追加しないと生成できませんでした。
1.8.5 や 1.8.6 だと atom に対応していないので、生成しないように
したかったのですが、そのまま RSS::Maker.make を呼び出すと
NoMethodError になるのが困りました。
typo が見つけにくくなるのが嫌で NoMethodError はあまり rescue したくないので、
RSS::Maker::MAKERS.include?(version)
でチェックするようにしたのですが、もっと良い方法はないのでしょうか?
atomに対応しているバージョンで生成されたatomの中をみると
dc:date が2個ずつ入っているのですが、これは問題ないのでしょうか?
最後に、これが一番困ったのですが、1.8.7 以降だと maker.image で
ひっかかって0.91 が生成できませんでした。
% cat sample-rss.rb
#!/usr/bin/ruby -Ku
# -*- coding: utf-8 -*-
require "rss"
%w"0.91 1.0 2.0 atom".each do |version|
begin
# avoid NoMethodError: undefined method `make' for nil:NilClass
next unless RSS::Maker::MAKERS.include?(version)
rss = RSS::Maker.make(version) do |maker|
maker.channel.about = "http://example.com/index.rss"
maker.channel.title = "Example"
maker.channel.description = "Example Site"
maker.channel.link = "http://example.com/"
case version
when "0.91"
maker.channel.language = "ja"
when "atom"
# avoid NoMethodError: undefined method `author=' for #<RSS::Maker::RSS09::Channel:...>
maker.channel.author = "Bob"
maker.channel.date = Time.now
end
maker.items.do_sort = true
maker.items.new_item do |item|
item.link = "http://example.com/article.html"
item.title = "Sample Article"
item.date = Time.parse("2004/11/1 10:10")
end
maker.items.new_item do |item|
item.link = "http://example.com/article2.html"
item.title = "Sample Article2"
item.date = Time.parse("2004/11/2 10:10")
end
end
rss.to_s # TODO: write to file
STDERR.puts "OK: #{version}"
rescue
STDERR.puts "NG: #{version}: #{$!}"
end
end
% ruby-1.8.6 -v sample-rss.rb
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]
OK: 0.91
OK: 1.0
OK: 2.0
% ruby-1.8.7 -v sample-rss.rb
ruby 1.8.7 (2009-04-08 patchlevel 160) [i686-linux]
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
% ruby18 -v sample-rss.rb
ruby 1.8.8dev (2009-05-09 revision 23381) [i686-linux]
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
% ruby-1.9.1 -v sample-rss.rb
ruby 1.9.1p129 (2009-05-12 revision 23411) [i686-linux]
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
% ruby-trunk -v sample-rss.rb
ruby 1.9.2dev (2009-05-11 trunk 23390) [i686-linux]
/home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content/1.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content.rb
/home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content/2.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/content.rb
/home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore/1.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore.rb
/home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore/2.0.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore.rb
/home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore/atom.rb:2: warning: loading in progress, circular require considered harmful - /home/kazu/opt/ruby-trunk/lib/ruby/1.9.1/rss/dublincore.rb
NG: 0.91: required variables of maker.image are not set: url, title
OK: 1.0
OK: 2.0
OK: atom
%
$ ruby1.8 -v sample-rss.rb
ruby 1.8.5 (2006-08-25) [i486-linux]
OK: 0.91
OK: 1.0
OK: 2.0
$
--
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)