|
カテゴリ:ソフトウェア
仕事で、RubyのREXMLというXMLを扱うライブラリを使ってみたので、
RSSで広告をカットするCGIを作ってみました。 RSSのタイトルで"AD:"や"PR:"となっているRSSのアイテムを消します。 ただうまく動かないことがあるので、、、なんでだろう。 数時間で作ってみましたので、うまくうごかない場合はすみません。 使用方法は、RubyとCGIを使ってことのある方前提です。 習作なのでうまく動かなかったらすみません。 サンプルプログラムは、 http://solisart.com/rss/?uri=(RSSのURI) で動きます。 例: http://solisart.com/rss/?uri=http://slashdot.jp/slashdotjp.rss (本当はGoogle Reader上のGrease Monkeyで作りたかった) --------------------------------------------------------- #!/usr/local/bin/ruby require 'cgi' require 'open-uri' require 'rexml/document' # これはXMLで脆弱性が見つかったためのパッチです。 require 'rubygems' require "rexml-expansion-fix" cgi = CGI.new uri = cgi.params['uri'][0] rss = open(uri).read doc = REXML::Document.new(rss) # 広告のItemをリストとして取り出します adxpath_list = [] doc.elements.each("*/channel/item/title") do |element| if element.text['AD:'] or element.text['PR:'] adxpath_list << element.xpath.gsub(/\/title$/, "") end end # 広告のItemを上から何番目というのを指定するのですが、前の方から消すと順位が変わってしまいます。そのため後ろから消すことにしました。 adxpath_list.reverse.each do |xpath| REXML::XPath.first(doc, xpath).remove end # スタイルシートがローカルで指定してある場合があるとエラーになる場合があります output = doc.to_s.sub(/<\?xml-stylesheet[^>]*>/, '') cgi.out( {'type' => 'application/xml'} ) { output } --------------------------------------------------------- お気に入りの記事を「いいね!」で応援しよう
Last updated
2008.09.07 21:36:54
コメント(0) | コメントを書く
[ソフトウェア] カテゴリの最新記事
|