ERB を使って RSS を JavaScript に変換する
ERB の使い方を覚えたので、ERB を使って RSS を JavaScript に変換したいです。よくある類の処理ですが、これを ERB を使ってやってみます。
#!/usr/local/bin/ruby require 'open-uri' require 'rss/1.0' require 'rss/2.0' require 'erb' module RSS::JavaScriptfy def to_html @erb = ERB.new(DATA.read, nil, "-") @erb.result(binding) end def to_js self.to_html.split("?n").collect { |line| line.gsub!(/'/, "?'") "document.writeln('#{line}');" }.join("?n") end end class RSS::RDF include RSS::JavaScriptfy end class RSS::Rss include RSS::JavaScriptfy end if ARGV.size != 1 puts "Usage: ruby rss2js.rb <url>" exit end rss = RSS::Parser::parse(open(ARGV.shift).read) puts rss.to_js __END__ <h2><a href="<%= channel.link %>"><%= channel.title %></h2> <ul> <% items.each do |item| -%> <li><a href="<%= item.link %>"><%= item.title %></a></li> <% end -%> </ul>
RSS::JavaScriptfy というモジュールを作って、その中に ERB で RSS オブジェクトを HTML に変換する to_html
、HTML string の各行を document.write
で囲む to_js
メソッドを作りました。これを RSS::RDF や RSS::Rss に Mixin しておき、実行側では取得した rss オブジェクトに対して rss.to_js
を呼ぶという仕組みです。
$ ruby rss2js.rb http://d.hatena.ne.jp/rubyo/rss > rubyo.js
として保存し、HTML からこの rubyo.js を script タグでインクルードしたところ、
と表示されました。