はてなブックマークのバックアップ
はてなブックマークを使わないのはエクスポートが明示されてないからだと書いたら、APIとバックアップスクリプトの存在を指摘された。まあ、そりゃそうだ。
- http://www.nilab.info/zurazure2/archives/000098.html
- http://d.hatena.ne.jp/keyword/%a4ϤƤʥ֥å%af%a5ޡ%bc%a5%af%a5ե%a3%a1%bc%a5ɻec51cd%cd
はてなブックマークをためらう理由は別にそれだけでもないんだけど、とりあえずNI-Lab.さんのスクリプトは(というかXML::Atomが依存してるいくつかのモジュールは)うちのWin2k+ActivePerl5.8.xではうまく動かんようなので、XML::Atom::Syndicationを使ってバックアップスクリプトを書いてみた。出力まわりは適当。全件ぶっこ抜くので、毎日使うならatomfeed?date=latestのようにした方が幸せになれるかも。
#!/usr/bin/perl use 5.008; use strict; use warnings; use Time::Piece; use XML::Atom::Syndication; our $VERSION = '0.01'; my $user = 'charsbar'; my $sleep = 1; my $file = 'hatena_bookmark_backup_'.localtime->ymd; my $atom = XML::Atom::Syndication->instance or die; open my $fh, ">:encoding(shiftjis)", $file or die; my $next = "http://b.hatena.ne.jp/$user/atomfeed"; while( $next ) { my $feed = $atom->get($next) or die; $next = $feed->query('link[@rel="next"]/@href'); foreach my $entry ( $feed->query('entry') ) { print $fh "<entry>\n"; print $fh '<title>', $entry->query('title')->text_value, "</title>\n"; print $fh '<link>', $entry->query('link[@rel="related"]/@href'), "</link>\n"; print $fh '<tags>', $entry->query('id')->text_value, "</tags>\n"; if ( my $summary = $entry->query('summary')->text_value ) { print $fh "<summary>\n", $summary,"\n", "</summary>\n"; } print $fh "</entry>\n\n"; } sleep( $sleep ); } close $fh;
The module endeavors to provide developers with a package that is simple, lightweight and easy install.
というだけあって、確かにインストは楽。ただ、ちとクセがあるので、あわせてClass::XPathのPODも読んでから作業するのが吉ですね。