Home / Diary / Pragger始めた

Pragger始めた

Rubyの勉強も兼ねてPraggerを弄ることにした。

インストール

PRagger - Tracにある通り、SubversionをインストールしてPraggerをチェックアウト。ActiveRubyも入れて動作確認。が、動かない。なぜだ!?

Rubyのライブラリコードを追うなど、試行錯誤を繰り返したが動作せず、結局ActiveRuby入れなおしたら何事も無かったかのように動いた。所要時間3時間。疲れた。

RSSを置いてないページからRSSを作る

PluginList - PRaggerまとめサイト それPraを参考にしてyamlを記述していく。

custom_feedというプラグインを使えば良いいようだ。

  1. captureに記事の繰り返しを含む部分を取得する正規表現を記述。
  2. splitに、記事と記事を分けるための正規表現を記述。
  3. 記事として分割された部分からtitleとlinkとして抜き出すための正規表現を記述。
  4. 最後に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はこんなかんじ。

insertcredit.rdf

感想

仕組みが複雑ではないので、Ruby初心者の自分にとっては勉強用として丁度良い。

WWW::mechanizeを使うことでフォーム等の操作が可能になるので、今度はそっちに挑戦するつもり。

余談

正規表現を記述する際はHTMLソースとにらめっこするわけだが、マッチするはずなのにしないなーと思ったら、ご丁寧にもFirefoxが<br>を<br />に変えてくれてました。余計なことすんな、橙パンダ。

Info

関連のあるエントリ
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の不具合を修正
古いエントリ(日付順)

Comment

投稿したコメントは公開されません。サイトオーナーのみが閲覧できます。
返信等を希望する場合は、コメント内に連絡先のメールアドレスかサイトのURLを入力してください。

2007
1117

Tagsruby

最新のエントリ
注目のエントリ(はてな)
ゲーム攻略

暴満館 ~The House of Full Violence~
Powered by WordPress.
About | Contact | 新着のエントリ情報 RSS