at posts/single.html

はてなブックマークから delicious への移行

delicious on firefox

こないだの GINZA TECH LOUNGE feat. OpenID の懇親会で、 delicious.com の Firefox プラグインが使いやすいって話を聞いた。 試しにインストールしてみたら、ブラウザ組み込みのブックマークを置き換えられるできで、とっても便利そう。

  • delicious.com の画面に遷移せずにブックマークできる。履歴からのタグの入力も可能
  • 登録したブックマークをタグでソートして、サイドバーに表示できる

ブックマークしたデータを後で利用するには、 delicious のほうが使いやすそうなので、試しにはてなブックマークから移行してみるよ。 はてなブックマークには「ブックマークの設定」→「ブックマークのエクスポート」でRSS/Atom/ブックマーク形式でエクスポートできる。 でも、deliciousでインポートしようとすると、RSS/Atomではエラーになって、ブックマーク形式だと日本語が文字化けしてしまう。

WebService::SyncSBS::D2Hのインストール

PerlモジュールのWebService::SyncSBS::D2Hを使えば移行できるそうなので、こっちを使ってみることに。 CPAN の使い方をすっかり忘れていたので、CPAN初級を見て復習。 以下のコマンドでインストールできる。

sudo -H cpan WebService::SyncSBS::D2H

でも、やってみたら関連モジュールが無いってエラーがでた。 先に、関連モジュールを入れて、成功。結構、時間かかったよ。

sudo -H cpan Net::Delicious
sudo -H cpan XML::Atom::Entry
sudo -H cpan WebService::SyncSBS::D2H

使い方

Del.icio.usとはてなブックマークをクロスポストを参考に以下のスクリプトを作成。

use strict;
use warnings;
use utf8;
use WebService::SyncSBS::D2H;

my $sbsync = WebService::SyncSBS::D2H->new({
                delicious_user => "kmachu",
                delicious_pass => "********",
                hatena_user => "kmachu",
                hatena_pass => "********",
                delicious_recent_num => 40,
        });
$sbsync->sync;

このツールを動かすと、はてなブックマークとdeliciousを同期してくれる…んだけど、どうも30件ほどしか同期していない。 初期の移行は、もうちょっと工夫しないとダメかな。

追記

原因判明。 WebService::SyncSBS::D2H では、はてなのフィードを http://b.hatena.ne.jp/atom/feed から取得しているんだけど、これだと最近のブクマしか取得できない仕様になってる。 代わりに、 http://b.hatena.ne.jp/dump から取得するように一時的にソースを変更した。

--- Hatena.pm.org       2005-12-01 18:43:01.000000000 +0900
+++ Hatena.pm   2008-09-14 16:45:08.000000000 +0900
@@ -15,7 +15,7 @@
 my $ep_root = 'http://b.hatena.ne.jp/atom';
 my $ep_post = $ep_root . '/post';
 my $ep_edit = $ep_root . '/edit';
-my $ep_feed = $ep_root . '/feed';
+my $ep_feed = 'http://b.hatena.ne.jp/dump';
 
 sub new {
     my $class = shift;

どちらのURLでも動くということは、XML::Atom::Clientを使う下記のサンプルプログラムを書いて確認した。

use strict;
use Data::Dumper;

my $client = XML::Atom::Client->new;
$client->username('kmachu');
$client->password('**********');

print Dumper $client->getFeed('http://b.hatena.ne.jp/atom/feed');
print Dumper $client->getFeed('http://b.hatena.ne.jp/dump');

これでデータの移行ができたので、さっきの修正を元に戻して、 cron で同期をとるようにする。

まとめ

Perlが使えるようになると、人生が豊かになると思った。 10年前の知識で止まってるからなぁ…。

追記

移行の仕方がレガシーすぎるらしい。

関連する日記