del.icio.usでプライベートブックマークする方法の 説明が間違ってました
ネット上の説明をみつつ実際にやって確認していたのですが、どうも勘違いして出来たと思い込んでいたようです。
正しいやり方は、プライベートブックマークをする専用のbookmarkletを作ってくれる http://sandbox.sourcelabs.com/priv.at/ のページにて bookmarklet を作成し、それを使ってブックマークを行なうことでプライベートなブックマークを作ることができます。
んで、なぜそんなことができるのかというと、上記のbookmarkletを作成してくれるサイトの方が private.bookmarks というユーザアカウントを取得して、そのユーザアカウントにて for:username ( username はあなたの del.icio.us アカウント)というタグでブックマークすることにより、http://del.icio.us/for/usernameでのみブックマークを閲覧することができるようになるということですね。for:username の機能をうまく利用した技です。
手間はちょっとかかるけど、同じことをアナログでやれば、このサイトのbookmarkletを使わずとも同じことができると思います。まったく違う別アカウントを作成して、そのアカウントでブックマークをして、タグを「for:本当のdel.icio.usアカウント」にすればよいわけです。
これで削除などが自由にできるプライベートブックマークができるということですね。正確にはプライベートではないですが…。
ここまで書いたついでに、上記のサイトがやっていることと同じことをするプログラムを書いたので晒しておきます。たいしたロジックではありませんし、エラーハンドリングもやってないので、その辺はご了承下さい。
使い方は、「http://example.com/foo.cgi?title=foobar&url=http://foo.example.com/」といった感じに url と title のクエリを渡せば、priv_usernameで指定したユーザのブックマークに 「for:real_username」 というタグでブックマークをすることができます。
#!/usr/local/bin/perl
use strict;
use CGI;
use HTTP::Cookies;
use URI;
use URI::QueryParam;
use WWW::Mechanize;
use constant DELICIOUS => sub { 'http://del.icio.us' . shift };
my $real_username = 'realusername';
my $priv_username = 'privusername';
my $priv_password = 'privpassword';
my $q = new CGI;
do_post();
sub do_post {
my $url = $q->param('url');
my $title = $q->param('title');
if ($url) {
my $cookie_jar = HTTP::Cookies->new(
file => '/tmp/del.icio.us_cookie.jar',
autosave => 1,
);
my $mech = WWW::Mechanize->new(cookie_jar => $cookie_jar);
$mech->agent_alias('Windows IE 6');
$mech->get(DELICIOUS->()); # get top page
$mech->get(DELICIOUS->('/login')); # get login page
$mech->submit_form( # do login
form_number => 1,
fields => { user_name => $priv_username, password => $priv_password },
);
my $uri = URI->new(DELICIOUS->("/$priv_username"));
$uri->query_form_hash({ title => $title, url => $url, v => 3 });
$mech->get($uri->as_string); # get to post page
my $fields = $mech->content =~ /originally posted/ ? {
url => $url,
description => $title || undef,
notes => undef,
tags => "for:$real_username",
} : {
oldurl => $url,
url => $url,
description => $title || undef,
notes => undef,
tags => "for:$real_username",
date => $mech->value('date'),
};
$mech->submit_form( # post url
form_number => 1,
fields => $fields,
);
}
else { done('You must specify url.') }
done();
}
sub done {
my $msg = shift || 'Private Bookmark Done';
print $q->header;
print <<"HTML";
<html>
$msg
</html>
HTML
;
}