はてなexist API

はてなウェブサービスのひとつに、「はてなexist API」というのがあります。
任意のURLが、はてなダイアリーはてなブックマークからどれだけ言及されているか、誰かのアンテナに登録されているか否か(2値)が取得できます。
今日はこれを使ってPerlの勉強(というほどでもないけど)をしました。
くだらないことでも「やってみること」が大事なわけですので。

#!/usr/bin/perl -w                                                                                                   

use strict;
use LWP::Simple;
use XML::Simple;
use Data::Dumper;

dbmopen(my %CACHE, "exist_api_cache", 0666)
    or die "cannot open 'exist_api_cache' dbm: $!";

my $target_url = shift or die "need target url\n";
my $base_url = "http://d.hatena.ne.jp/exist?mode=xml&url=";
my $request_url = $base_url . $target_url;

$CACHE{$request_url} = get($request_url)
    unless ($CACHE{$request_url});

print "request:\n$request_url\n";
print "reaponse:\n$CACHE{$request_url}\n";
my $ref = XMLin($CACHE{$request_url});
print "Dump:\n";
print Dumper($ref);
for (keys %{$ref->{count}}) {
    print "$_: ", $ref->{count}->{$_}->{content}, "\n";
}

ポイント

  • 同じURLに対して何度もリクエストしないようにDBMハッシュを使用
  • レスポンスXMLをパースした内容をData::Dumperで出力
  • 取得した値を表示

こんだけ。
LWP::Simple::getの代わりにmirrorを使えばDBMハッシュはいらなかったんじゃないか、と今になって気づく始末。
ま、いっか。これはこれで。

    • -

LWP::Simple - simple procedural interface to LWP - metacpan.org
XML::Simple - An API for simple XML files - metacpan.org
Data::Dumper - stringified perl data structures, suitable for both printing and eval - metacpan.org