トップ «前の日記(2007-02-18) 最新 次の日記(2007-02-23)» 編集

Route 477



2007-02-20

[Plagger][ruby] Plagger meets Ruby

この前のRuby勉強会@関西-14で発表したときの資料を公開します。

PlaggerのプラグインをRubyで書く方法について、図とか例とかを交えつつ解説する、という感じでやらせてもらいました。 30分弱。

いやー、feedalizerとかfeedtoolsとかHpricotとMechanize便利すぎという話も入れようかと 思ってたんだけど、時間的にも容量的にも余裕がなかったので残念ながらカット。

スライドのデザインは http://gift.her.jp/pp_template/ のものを使わせてもらいました。スライド作成意欲が2割くらいアップしました。 ありがとうございます。


まとめを以下に置いておきます。

RubyでPlaggerのプラグインを書こう

stdin/stdout

(1)RubyからPlaggerに入力

 - module: Subscription::Config
    config:
      feed:
        - url: "script:ruby make_feed.rb"

  - module: CustomFeed::Script

Ruby側では、フィードのXMLかYAMLを出力する

  print YAML.dump( 
    "title" => "hogehoge diary",
    "entry" => entries.map{|ent|
      { 
        "title" => ent.title,
        "author" => ent.author,
        "link" => "http://.../#{ent.id}",
        "date" => ent.date,
        "body" => ent.message.toutf8,
      }
    }) 

例:customfeed_cvslog.rb

(2)Rubyをフィルタにする

 - module: Filter::Pipe
    config:
      command: "ruby some_filter.rb"
      encoding: euc-jp

Ruby側では、HTMLを受け取ってHTMLを返す*1

例(案):Filter::RubyMan Filter::Tateyomi

(3)PlaggerからRubyへ出力

 - module: Publish::Pipe
    config:
      command: 'ruby feed_writer.rb'

Ruby側では、YAMLを受け取る(ただしパッチが必要→[Plagger] Publish::PipeがYAMLを吐けるようにしてみた)

例:publish_rubysdl.rb

*1 yamlにtext-only: 1 を付け加えれば、テキスト部分ごとに受け取ることも可能