はてなブックマークはバックアップする機構がない(ベータ版だから?)。
ので、バックアップする perl スクリプトを作ってみた。
#!/usr/local/bin/perl
use strict;
use warnings;
use FileHandle;
use XML::Atom::Feed;
##### user config ##########################################
my $user = 'nilab';
my $prefix_filename = 'atomfeed';
my $postfix_filename = '.xml';
my $interval_time = 10;
############################################################
# hatena bokmark atom feed url
my $feed_url = "http://b.hatena.ne.jp/${user}/atomfeed";
my $counter = 1;
do{
# get atom feed
my $req = HTTP::Request->new(GET => $feed_url);
my $res = LWP::UserAgent->new->request($req)->content;
# output xml file
my $filename =
sprintf(
"%s%03d%s",
$prefix_filename, $counter, $postfix_filename);
my $fh = FileHandle->new("> $filename");
if(defined $fh){
print $fh $res;
$fh->close;
}else{
die 'Couldn\'t open the file' . $filename;
}
# output result
print STDERR "OK: ${feed_url} to ${filename}\n";
# search next feed url
my $feed = XML::Atom::Feed->new(\$res);
my @links = $feed->link;
$feed_url = 0;
for(@links){
if($_->rel eq 'next'){
$feed_url = $_->href;
}
}
$counter++;
sleep $interval_time;
}while($feed_url);
はてなブックマークフィードでは、link タグの next で次の Atom Feed の URL を拾えるところが便利。
はてなブックマークAtomAPIとは とか はてなブックマークフィード仕様とは とかを参考にしたけど、WSSE認証は実装してない(^_^;
公開されているブックマークのみバックアップ。どうせ、自分は public にしかブックマークしないし。
本当は、自分のメモを www.nilab.info にすべて蓄えておきたいのだけれど、はてなブックマークはとても便利だし、同じ機能を自前で作るのもめんどい(ソーシャルな機能はあまり必要としてないのでそれを除くとしても)。
このバックアップツールを使えば、とりあえず www.nilab.info にはてなブのデータをコピーすることが簡単になる。
いざとなれば、Atom Feed を XSL で見た目良くするとか、XSLT で HTML化するとか、タグで一覧とか、実装できる余地はある(時間と意欲は無い)。
# はてな万歳?
追記: 2006-11-04
はてブにエクスポート機能が追加された! ので、もうこの perl スクリプトは不要。
tags: zlashdot Internet Hatena Perl
Posted by NI-Lab. (@nilab)
コメント
NI-Lab.が、広いフィード仕様と、タグとか良くするとか
簡単などをコピーしたいよ♪
投稿者: BlogPetのづらねこにゃん | 2005年08月13日 19:31
さっそく、なてなの投げ銭でポイントを下さった方がいらっしゃいます。
ありがとうございます m(_ _)m
そういえば「投げ銭」とか呼んでるけど、正式名称はなんだろう。
「はてなブックマークではてなポイントを贈る」機能?
投稿者: NI-Lab. | 2005年08月16日 07:52
僕はこれを毎日回しています。
#!/bin/sh
cd "${HOME}/backup/hatena" || exit 1
alias wget='wget -T 10 -t 2 -q'
date=`date +%Y-%m-%d`
wget "http://b.hatena.ne.jp/$USER/rss" -O "${date}.rdf"
bzip2 ${date}.rdf
投稿者: Anonymous | 2005年08月16日 10:58