9月
08
2008

RSSの広告カットCGI

仕事で、RubyのREXMLというXMLを扱うライブラリを使ってみたので、
RSSで広告をカットするCGIを作ってみました。

RSSのタイトルで”AD:”や”PR:”となっているRSSのアイテムを消します。
ただうまく動かないことがあるので、、、なんでだろう。
数時間で作ってみましたので、うまくうごかない場合はすみません。

使用方法は、RubyとCGIを使ってことのある方前提です。
習作なのでうまく動かなかったらすみません。

サンプルプログラムは、
https://solisart.com/rss/?uri=(RSSのURI) で動きます。

例:
https://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 }

———————————————————

Written by in: 楽天日記 | タグ:

コメントはまだありません »


コメント&トラックバック




トラックバック URL

コメントのRSS feed