PlaggerとSubscription::BrowserHistoryで自分のWebブラウジングをトラッキング

Plaggerのプラグインである、Subscription::BrowserHistoryを作成した。これを使うと、ブラウザの履歴をPlaggerで読み込めるようになる。いまはMozilla系のブラウザにしか対応していないけど、サブクラスかけば良いようになってるので、IEやSafari向けもすぐかけるかも。

実はこれは、すでにid:sfujiwaraさんが酒日記 はてな支店 - Morkの文字コードおよび、酒日記 はてな支店 - CustomFeed::Mork頓挫で触れられていて、Plaggerのチケットの#377 (Subscription::BrowserHistory)にもなっていたネタ。参考にさせていただきました。

で、このSubscription::BrowserHistoryを使うとなにができるかというと。たとえば以下のようなYAMLが書ける。

plugins:
  - module: Subscription::BrowserHistory
    config:
      browser: Mozilla
      path: /path/to/your/history.dat

  - module: Filter::Rule
    rule:
      expression: $args->{entry}->link =~ m!^http://www\.youtube\.com/watch! 
  
  - module: Publish::Feed
    config:
      format: RSS
      dir: /path/to/xml/dir/
      filename: history.xml

このYAMLでは今回作ったプラグインでFirefoxの履歴をPlaggerの入力としている。そのあとFilter::RuleでYouTubeの動画URLのみを取り出して、RSSとして出力。つまり、自分がブラウザで見た動画を集めたRSSが作成できたというわけ。

まだあまり使ってみてないけど、このプラグインでいろんなことが可能になる。例えば、

  • 今日見た画像ファイルをiPhotoに突っ込む。
  • 今日見たYouTube動画をPodcastにしてiPodに突っ込む。
  • Search::Estrainerなどと組み合わせて、自分がこれまでに見たWebページから検索ができるようにする。

などができそう。自分が見たWebページの一覧というのは、なかなか面白いデータっぽくて、いろんな応用ができそうだなー。

ソースコードは、TracのSubscription::BrowserHistoryで見れる。
リポジトリのURIは、http://svn.douzemille.net/repos/public/plagger/trunk/my-plugins/Subscription-BrowserHistory/となっているので、使ってみたい方はどうぞ。

実はこのプラグイン、このままでは日本語が読めないという問題がある。このモジュールの機能を実現するのにFile::Morkモジュールを利用している。これはMozillaの履歴ファイルを手軽に読み込めて便利なんだけど、残念ながら日本語が扱えない。その点はマルチバイト対応のパッチを書いたのでそれを使ってもらえれば。くわしくはこちらのエントリに書いた。

今回はテストも一応かいてみたんだけれど、テスト書くとモジュールの動作を一目で把握できていいな。今回はSubscriptionってことでモジュール書いてたけど、テスト書いてみるとこれはCustomFeedの動作じゃね?と思えてきたりね。テストは以下にさらしておく。

use strict;
use t::TestPlagger;

test_plugin_deps('Subscription::BrowserHistory');
plan 'no_plan';
run_eval_expected;

__END__

=== test file
--- input config
plugins:
  - module: Subscription::BrowserHistory
    config:
      browser: Mozilla
      path: $t::TestPlagger::BaseDirURI/t/samples/history.dat

--- expected
is $context->update->feeds->[0]->title, 'Mozilla Browser History';
is $context->update->feeds->[0]->link, "file://$t::TestPlagger::BaseDirURI/t/samples/history.dat";
is $context->update->feeds->[0]->entries->[0]->title, 'Plagger - Trac';
is $context->update->feeds->[0]->entries->[0]->link, 'http://plagger.org/trac';