概要: 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 抽出は自分の環境では意外と失敗しやすいので 時間があるときにのんびりとやる方がいいということぐらい。
ちなみに今日一日中やってました。疲れた。
#FIXME