はてなブックマークAtomAPIを使ってプロクシ回避してブックマークできた!

先日終了したかに見えたある仕事ですが2ヶ月間の別プロジェクトを手伝うことになりました。で、問題になるのが、メールとブックマーク環境。メールは先日見つけたGmail-Liteでどうにかなっていて、問題はブックマーク。こちらのとおりはてな関係がほぼ駄目なんですが、閲覧禁止は100歩譲って認めるとしても(帰ってから見れるし)、ブックマークが出来ないのは痛いなあということで困ってました。

どうしようかと思って、そうかと気づいたのが、はてなブックマークAtomAPIを使って自分サーバ経由でブックマークすれば、プロキシでの規制に引っかからないのだということです。今頃気づくなよ、という感じですが。

で、サーバ側のソースがこれ。「自 Blog のエントリを自動的にブックマークすることにより、ソーシャルブックマーク最適化を施す - Kentaro Kuribayashi's blog」をかなりそのまま参考にしました。ありがとうございます。

#!/usr/bin/perl

use strict;
use warnings;

use XML::Atom::Client;
use XML::Atom::Entry;
use XML::Atom::Link;
use CGI;

my $username = 'hoge';
my $password = 'hogehoge';

my $atompost = "http://b.hatena.ne.jp/atom/post";

my $q = CGI->new;

my $url = $q->param('url');
my $comment = '';

my $api = XML::Atom::Client->new;
$api->username($username);
$api->password($password);

my $link = XML::Atom::Link->new;
$link->href($url);
$link->rel('related');
$link->type('text/html');

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

$api->createEntry($atompost, $entry);

print "Content-Type:text/html\n\n";
print "<html><body>add $url </body></html>";

debianだとCPANXML::Atomいれるのに、XML::SAXあたりが上手く入らず落ちてしまうという現象が発生してなんだか大変だったのですが*1、どうにか解決し、無事動きました。よかった。

あとブックマークレットも作らなくては、ということで、こんなかんじです。簡単ですが。

javascript:void(window.open('http://yourserver.com/bkmkadd.cgi?url='+location.href))

これで一応ブックマーク環境は確保できたので、めでたしめでたしなのでした。

*1:CPANからではなく、apt-getからlibxml-sax-perlを入れる必要があったようですが、実行すると/usr/bin/update-perl-sax-parsersでXML::SAXのsava_parsers_debian()というメソッドを呼び出していて、そんなメソッドはないと怒られてしまい...というかんじで。こちらを見てなんちゃっての解決しました