WebService::Hatena::Bookmark::Liteをインストールしておく
# cpan -i WebService::Hatena::Bookmark::Lite
あとは、本家に載っているサンプルスクリプトを踏襲。これで、標準入力からURLを受けてポスト出来る。addメソッドは成功すれば文字列が帰ってくるけど、失敗するとundefが帰ってくる。
$ perl hatenabookmark.pl
http://search.cpan.org/~masartz/WebService-Hatena-Bookmark-Lite-0.03/lib/WebService/Hatena/Bookmark/Lite.pm
$VAR1 = bless( do{\(my $o = 'http://search.cpan.org/~masartz/WebService-Hatena-Bookmark-Lite-0.03/lib/WebService/Hatena/Bookmark/Lite.pm')}, 'URI::http' );
$VAR1 = 'atom/edit/20442734';
^C
#!/usr/bin/perl
use strict;
use warnings;
use WebService::Hatena::Bookmark::Lite;
my $bookmark = WebService::Hatena::Bookmark::Lite->new(
username => 'hoge',
password => 'fuga',
);
while (<STDIN>) {
print $bookmark->add(url => $_);
}
このままだとログイン情報をハードコーディングしているし、エラー処理しないし、無駄処理もするので、お色直ししておく。ログイン情報を外部ファイル(JSON)にして、標準入力がURIで無い場合にはポスト処理をしない。
$ cat $HOME/.accounts/hatena.json
{"password":"fuga","username":"hoge"}
$ perl hatenabookmark.pl --config $HOME/.accounts/hatena.json
http://search.cpan.org/~masartz/WebService-Hatena-Bookmark-Lite-0.03/lib/WebService/Hatena/Bookmark/Lite.pm
$VAR1 = bless( do{\(my $o = 'http://search.cpan.org/~masartz/WebService-Hatena-Bookmark-Lite-0.03/lib/WebService/Hatena/Bookmark/Lite.pm')}, 'URI::http' );
$VAR1 = 'atom/edit/20442734';
^C
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use URI;
use JSON;
use IO::File;
use WebService::Hatena::Bookmark::Lite;
use Getopt::Long;
my $file = '';
GetOptions('config=s' => \$file);
my $io = IO::File->new();
$io->open($file, 'r') or die $!;
my $account = decode_json(join '', $io->getlines);
$io->close;
my $bookmark = WebService::Hatena::Bookmark::Lite->new(%$account);
while (<STDIN>) {
chomp;
if ($_ ne '') {
my $uri = URI->new($_);
print Dumper $uri;
if (defined $uri->scheme && defined $uri->host) {
my $edit_ep = $bookmark->add(url => $uri);
print Dumper $edit_ep;
}
}
}
exit;