カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

Plagger使ってブラウザからオートディスカバリ

概要: Plaggerを使ってブラウザのブックマークや履歴からFeedの一覧を取得する


ブラウザのブックマークや履歴から見てるんだけど購読してないFeedを探すべく、 最速インターフェース研究会のma.laさんのYAPC::Asia 2007 LTの発表資料 ブラウザ履歴からオートディスカバリで紹介されていることと 似たようなことをPlaggerでやってみた。

設定はこんな感じ。

Browser2OPML.yaml ( globalは省略 )

plugins:
  - module: Aggregator::Simple
    rule:
      expression: |
        (
          $args->{'feed'}->url !~ m{^http}
          || $args->{'feed'}->url =~ m{\.(?:zip|lzh|rar|jpg|png|gif|css|js)$}
        )
        ? 0
        : 1 ;
  - module: Subscription::Bookmarks
    config:
      browser: Mozilla
      path: "bookmarks.htmlへのパス"
  - module: Subscription::BrowserHistory
    config:
      browser: Mozilla
      path: "history.datへのパス"
  - module: Filter::Rule
    rule:
      module: Deduped
      path: /tmp/var.db
  - module: Publish::OPML
    config:
      filename: /path/to/firefox.opml

まず最初にAggregator::Simpleにruleを指定して、bookmarkletとzipとかFeedと関係のないファイルを除外する。 除外するファイルについてはもう少し増やした方がいいかもしれない。

あとブックマークと履歴にもよるけど、結構な量ページを取得することになるので、 のAggregator::Simple使うんじゃなくて、Aggregator::Xangoとかを使ったほうがよさげ。

じゃあなんでAggregator::Simple使ってるかというと、 自分の環境(Windows XP + ActivePerl)ではAggregator::XangoやAggregator::Asyncあたりは うまく動かせなかったため。

で、次に常用しているブラウザがFirefoxなので、Firefoxのブックマークと履歴を購読するように、 Subscription::BookmarksとSubscription::BrowserHistoryを設定。

そのあとFilter::RuleにRule::Dedupedを指定して重複したエントリを削除。 Filter::Ruleはエントリが空のFeedを削除するので、結果として重複したFeedは削除される。たぶん。

で、最後にPublish::OPMLでOPMLを出力するに設定して、あとは実行するだけ。

で、やってみたんだけどAggregator::Xangoあたりがうまいこと動作させられず、Aggregaroe::Simpleでやってたのと、 FeedがおかしいのかPlaggerがエラー吐いて止まったり(自分の環境では再現する)、 大容量のファイルを取得しようとしてCPU使用率100%になったりする度にやり直してたので、 実際には作業するのに6時間ぐらいはかかった。

あと、ブックマークからの抽出はうまくいくと思うんだけど、履歴からの抽出はPlaggerが止まったりすることがあるので、 実際に抽出するときにはブックマークと履歴は分けたほうがいいかもしれない。

ちなみに、ブックマークからの抽出はうまくいったんだけど、 履歴からの抽出が一時間ぐらい動いていて途中でエラー吐いて止まった(orz)ため実際には成功してない。

とりあえずやってみてわかったことは履歴からのFeed抽出は自分の環境では意外と失敗しやすいので 時間があるときにのんびりとやる方がいいということぐらい。

ちなみに今日一日中やってました。疲れた。