Pragger始めた
Rubyの勉強も兼ねてPraggerを弄ることにした。
インストール
PRagger - Tracにある通り、SubversionをインストールしてPraggerをチェックアウト。ActiveRubyも入れて動作確認。が、動かない。なぜだ!?
Rubyのライブラリコードを追うなど、試行錯誤を繰り返したが動作せず、結局ActiveRuby入れなおしたら何事も無かったかのように動いた。所要時間3時間。疲れた。
RSSを置いてないページからRSSを作る
PluginList - PRaggerまとめサイト それPraを参考にしてyamlを記述していく。
custom_feedというプラグインを使えば良いいようだ。
- captureに記事の繰り返しを含む部分を取得する正規表現を記述。
- splitに、記事と記事を分けるための正規表現を記述。
- 記事として分割された部分からtitleとlinkとして抜き出すための正規表現を記述。
- 最後にRSS::saveで保存する。
yamlはこのような感じになった。
- module: Feed::custom_feed
config:
url: http://www.insertcredit.com/
capture: <!-- Begin news segments -->(.*?)<!-- Begin sidebar segments -->
split: ^\s<table border="0" cellspacing="0" cellpadding="2" width="590">(.*?)</table>\s*?</table>\s*?<br>
title: <p id="title" align="left">(.*?)<
date: <p id="date">(.*?)</td>
link: <a href="http://www\.insertcredit\.com/(archives/\d+\.html)"><font color="#EEEEEE">\[p\]</font>
- module: RSS::save
config:
title: insert credit
about: http://www.insertcredit.com/
description: insert credit
link: http://www.insertcredit.com/
filename: insertcredit.rdf
praggerを実行すると見事にrdfファイルが作成された。ちゃんとタイトルとリンクが入ってる。
custom_feedが使いづらい
まず、linkに無駄な#が入る。普通は抽出ページからの相対パスだろうから、#が必要になるとは思えない。
次にdescription。splitで分割した後のものがそのまま入るので、すごい中途半端なHTMLタグが混入して美しくない。
そこでcustom_feedを改造することにした。
custom_feedを改造
plugin/feed/custom_feed.rbをplugin/myplugin/とでもフォルダを作成してコピー。以後、コピー先を弄る。
まずはlinkの調整。#を追加しないようにする。
mylink = config['url'] ? (config['url'] + '#' + $1) : $1
↓
mylink = config['url'] ? (config['url'] + $1) : $1
次にdescriptionで本文っぽいのを取らせたいので
if(config['description'])
description = Regexp.new(config['description'])
items.each do|i|
if i =~ description
mydescription = $1
i.instance_eval do
@description = mydescription
def description
@description
end
end
end
end
end
return items
end
ソースファイルの最後をこのような感じにする。title取得部分をコピペしてdescriptionにしただけだが。
最後にプラグイン名が同じだとアレなのでファイル名をcustom_custom_feed.rbにしてメソッド名も同様に変える。で、yamlも書き換えて完成。
- module: myplugin::custom_custom_feed
config:
url: http://www.insertcredit.com/
capture: <!-- Begin news segments -->(.*?)<!-- Begin sidebar segments -->
split: ^\s<table border="0" cellspacing="0" cellpadding="2" width="590">(.*?)</table>\s*?</table>\s*?<br>
title: <p id="title" align="left">(.*?)<
date: <p id="date">(.*?)</td>
link: <a href="http://www\.insertcredit\.com/(archives/\d+\.html)"><font color="#EEEEEE">\[p\]</font>
description: <p id="text"><font color="#EEEEEE">([\s\S]*?)</font></p>
- module: RSS::save
config:
title: insert credit
about: http://www.insertcredit.com/
description: insert credit
link: http://www.insertcredit.com/
filename: insertcredit.rdf
無事に本文の抽出に成功。んむ、美しい。出来上がったRSSはこんなかんじ。
感想
仕組みが複雑ではないので、Ruby初心者の自分にとっては勉強用として丁度良い。
WWW::mechanizeを使うことでフォーム等の操作が可能になるので、今度はそっちに挑戦するつもり。
余談
正規表現を記述する際はHTMLソースとにらめっこするわけだが、マッチするはずなのにしないなーと思ったら、ご丁寧にもFirefoxが<br>を<br />に変えてくれてました。余計なことすんな、橙パンダ。
Info
Navigation
- 関連のあるエントリ
- 2007-12-09 ニコニコ動画の動画ファイルとコメントをダウンロードするRubyスクリプト for Operaとか
- 2007-12-25 Ruby製ニコニコ動画用ダウンローダー for Operaとか
- 2006-04-13 Ruby on Railsに手を出してみた その後
- 2006-04-12 Ruby on Railsに手を出してみた
- 2008-05-05 Pragger用プラグインを追加・更新
- 新しいエントリ(日付順)
- RSSの不具合を修正
- 古いエントリ(日付順)
- キングスフィールド3 リアルタイムアタック
Comment
投稿したコメントは公開されません。サイトオーナーのみが閲覧できます。
返信等を希望する場合は、コメント内に連絡先のメールアドレスかサイトのURLを入力してください。
2007
1117