Hatena::Groupsubtech

NaN days

ブログを移転しています。最新の記事は motemen.hatenablog.com へどうぞ

2008-07-03

del.icio.us からはてなブックマークへデータを移行できたのではてなブックマークに移転したいと思います

| 02:57 | del.icio.us からはてなブックマークへデータを移行できたのではてなブックマークに移転したいと思います - NaN days を含むブックマーク はてなブックマーク - del.icio.us からはてなブックマークへデータを移行できたのではてなブックマークに移転したいと思います - NaN days

はてなブックマークもリニューアルする って話だし、そろそろ日本人ならはてなブックマークだろうということで id:antipop 作の del.icio.us からはてなブックマークへデータを移行する - Kentaro Kuribayashi's blog を使ってみたものの、コメントが文字化けするので id:antipop に「直してよ!」と頼んだところ「え?僕はもう使わないし自分で直してよwゲラオプス」ということだったので諦めていたのですが、突然今日やる気になってやってみたらちゃんと動いたのでこれを期にはてなブックマークに移行します。ソース中の createEntry2createEntry にするだけでした。追記読めって話ですね。あとダウンロード用の URL を変更する必要があると思います (コマンドラインから del.icio.us のバックアップをとる - NaN days - subtech)。たぶん。投稿日時が今日になってしまうのが心苦しいですが、はてな村のみなさんこれからよろしくお願いします。

http://b.hatena.ne.jp/motemen/

いちおう動いたコードを載せておきますね。ソース汚くてごめんね。酔ってるから書き直す気にならないよ。

#!/usr/bin/env perl

use strict;
use warnings;

use Encode;
use XML::Simple;
use XML::Atom::Client;
use XML::Atom::Entry;
use XML::Atom::Link;
use LWP::UserAgent;
use Path::Class qw/file/;

my $del_user    = '<del.icio.us username>';
my $del_pass    = '<del.icio.us password>';
my $hatena_user = '<hatena username>';
my $hatena_pass = '<hatena password>';

my $del_api    = 'https://api.del.icio.us/v1/posts/all';
my $hatena_api = 'http://b.hatena.ne.jp/atom/post';

my $cache = file('delicious.xml');

my $posts;

my $content = eval { $cache->slurp };
unless ($@) {
    $posts = XML::Simple::XMLin($content, ForceArray => 1);
} else {
    my $del = LWP::UserAgent->new;
       $del->credentials(
           'api.del.icio.us:443',
           'del.icio.us API',
           $del_user,
           $del_pass,
       );

    my $res = $del->get($del_api);
    $posts = XML::Simple::XMLin($res->content, ForceArray => 1);
}

my $hatena = XML::Atom::Client->new;
   $hatena->username($hatena_user);
   $hatena->password($hatena_pass);

for my $post (reverse @{$posts->{post}}) {
    my $link = XML::Atom::Link->new;
       $link->href($post->{href});
       $link->rel('related');
       $link->type('text/html');

    my $tag = '';
       $tag = '[' . join('][', split(' ', $post->{tag})) . '] ' if $post->{tag};
    my $summary = $post->{extended} ? $tag . $post->{extended} : $tag;

    my $entry = XML::Atom::Entry->new;
       $entry->title('dummy');
       $entry->add_link($link);
       $entry->summary($summary);

    $hatena->createEntry($hatena_api, $entry);
    print "posted: $post->{href}\n";
}