2008/01/31


Web::Scraper使うときに、scraperコマンドを使って頑張る人もいれば、FirebugのDOMツリーで「XPathをコピー」とやっている人もいるでしょう。
前者の場合、端末でスクロールアウトするHTMLを見ながらXPathをこさえて間違ったらズラズラズラ…と画面が流れて行ってしまいます。後者の場合は、CLASSやID属性を使わないXPathが出来上がってしまいます。
映画に出てくるHackerの如く一発でXPathを決められればそれは素晴らしい事だと思いますが、いかんせん幾度か失敗しますよね。
で、何回もXPathを確かめられるツールが欲しいなと思い、perl-GTK2で作ってみました。

画面はこんな感じ
WebScraperHelper1
引数に「http://b.hatena.ne.jp/」を付けて起動したらこんな感じ
WebScraperHelper2
URLを変更して「Get」をクリックすれば再読み込みします。
そして、はてなブックマークトップページの「注目の動画」部分にある画像一覧を取得する為に //a[text()="注目の動画"]/../../..//img
というXPathを書いて「Update」をクリックすれば
WebScraperHelper3
こんな感じのHTMLが出来上がります。
あとはこれをWeb::Scraperのprocess部分に貼っつけるだけ。

ちなみにXPathでの属性値参照も出来ますので、はてなブックマークトップページで //meta[@http-equiv="Content-Type"]/@content
というXPathを書けば content="text/html; charset=UTF-8"
という結果が返ります。
起動にはCPANからGtk2モジュールをインストールする必要があります。HTMLのパース方法やノードの取得方法等は大体Web::Scraperと合わせていますので、Web::Scraperが動く環境にGtk2をインストールすれば動くかと思います。
また画面はLinux上で起動した物ですが、UN*Xらしい事は一切やってませんのでWindowsでも動作するかと思います。
ダウンロード:

もう少し機能を足そうかと思いましたが、今日はもうギブアップ。寝ます。
Posted at by




調べたら、BlueDotってdel.icio.us v1 API互換のAPIを公開してた。
ちゃんと調べるべきだなぁ...
ただ、Publish::Delciousではendpoint書き換えられないからパッチ書いた。
Index: lib/Plagger/Plugin/Publish/Delicious.pm
===================================================================
--- lib/Plagger/Plugin/Publish/Delicious.pm (revision 1981)
+++ lib/Plagger/Plugin/Publish/Delicious.pm (working copy)
@@ -18,10 +18,14 @@
 
 sub initialize {
     my ($self, $context, $args) = @_;
-    $self->{delicious} = Net::Delicious->new({
+    my $opt = {
         user => $self->conf->{username},
         pswd => $self->conf->{password},
-    });
+    };
+    for my $key (qw/ endpoint/) {
+        $opt->{$key} = $self->conf->{$key} if $self->conf->{$key};
+    }
+    $self->{delicious} = Net::Delicious->new($opt);
 }
 
 sub add_entry {
YAMLには - module: Publish::Delicious
  config:
    username: del.icio.us-username
    password: del.icio.us-password
    interval: 2
    post_body: 1
    endpoint: https://secure.bluedot.us/v1/
と書くと行ける!

これで、私が同期しているソーシャルブックマークは
  • Publish::Delicious
  • Publish::LivedoorClip
  • Publish::Buzzurl
  • Publish::LivedoorCilp
  • Publish::Buzzurl
  • Publish::GooBookmark
  • Publish::NiftyClip
  • Publish::Pookmark
  • Publish::YahooBookmark
  • Publish::BlueDot という名の Pubilsh::Delicious
となった。
収拾がつかなくなってきた。
こうなったらどこまでやれるか勝負だ
Posted at by




これまた適当に...
/lang/perl/plagger/lib/Plagger/Plugin/Publish/NiftyClip.pm - CodeRepos::Share - Trac
/lang/perl/plagger/lib/Plagger/Plugin/Publish/Pookmark.pm - CodeRepos::Share - Trac
NiftyClipは結構とUIが使いやすい気がした。
あと、POOKMARK Airlinesの方はjavascriptがonじゃないとログイン出来ないって事にハマりかけた。あとtwitterにポストする機能があるので、default_no_twitterという設定で無効に出来るようにした。

これで、私が同期しているソーシャルブックマークは
  • Publish::Delicious
  • Publish::LivedoorClip
  • Publish::Buzzurl
  • Publish::GooBookmark
  • Publish::NiftyClip
  • Publish::Pookmark
となった。
収拾がつかなくなってきた。
Posted at by