http://pragger.ikejisoft.com/

Ruby 版の Plagger みたいなもの。

データを取ってきて、処理を施して、どこかに出力するものです。

入手方法

svn co http://pragger.ikejisoft.com/svn/pragger/trunk/ pragger

pragger.rb が実行スクリプト、plugin/ はプラグインのディレクトリです。

実行サンプル

単に RSS をローカルに保存する例

sample1.yaml

- module: load_rss
  config:
    url: http://www.rsssuite.jp/rssmarketing/f602/index.rdf
- module: save_rss
  config:
    filename: /var/tmp/rssmarketing.rdf
    link: http://www.rssmarketing.jp/
    title: RSSマーケティングガイド

実行

% pragger.rb -c sample1.yaml

設定ファイルは -c オプションで設定可能。(デフォルトは config.yaml)

単語「Yahoo」で絞り込む例

grep プラグインの設定を追加

- module: load_rss
  config:
    url: http://www.rsssuite.jp/rssmarketing/f602/index.rdf
- module: grep
  config:
    regex: "Yahoo"
- module: save_rss
  config:
    filename: /var/tmp/rssmarketing.rdf
    link: http://www.rssmarketing.jp/
    title: RSSマーケティングガイド

実行の流れ

ソースコードを眺めてみる

pragger.rb 本体はとても小さい。

% wc -l pragger.rb
41 pragger.rb

本体では基本的に

eval_pragger(YAMLで与えられた設定, [])

しているだけ。

eval_pragger の中は……

def eval_pragger(command_array,data)
  command_array.inject(data) do |data, command|
    puts "exec plugin #{command["module"]}"
    $plugins[command["module"]].send(command["module"].sub(/.*::/,""), command["config"] || {}, data.dup)
  end
end

データをプラグインに入力として渡し、プラグインからの出力がそのまま次のプラグインへの入力となっている。

プラグインの作り方

foo_bar プラグインを作る場合

  • ファイル名は myplugin/foo_bar.rb
  • メソッド foo_bar(config, data) を作る
  • config が設定、data が入力データ
  • メソッド foo_bar の戻り値が次のプラグインへと渡される

詳しくは http://pragger.ikejisoft.com/wiki/HowToMakePlugin

plagger と比べてみると

  • Ruby で書かれている
  • インストールが簡単
  • プラグインはまだあまりない
  • シンプル

プラグイン間でやりとりするデータの形式が特に決まっていないようなので、 柔軟にできる反面やりづらいかもしれません。

参考

  • このエントリーをはてなブックマークに追加
エンジニア募集中です!

私たちは新しい仲間を募集しています。