本ドキュメントははてなキーワードにおけるAPI実装を解説するものです。主にはてなスタッフがその作成と更新を行っています。
任意のテキストを送信すると、はてなキーワードを抽出し、キーワード部分を自動的にリンクして返信するAPIです。また、一部のオプションを用いると自動リンクに使われるキーワード一覧を取得することができます。APIはXML-RPC APIを用いて実装を行っており、メソッド名および指定可能な各属性は、以下の通りです。
このAPIを用いてやり取りを行った場合のサンプルは以下のようになります。
<?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>hatena.setKeywordLink</methodName> <params> <param> <value> <struct> <member> <name>body</name> <value>はてなキーワードをリンクして!</value> </member> <member> <name>score</name> <value><i4>20</i4></value> </member> <member> <name>cname</name> <value> <array> <data> <value><string>book</string></value> <value><string>movie</string></value> </data> </array> </value> </member> <member> <name>a_target</name> <value>_blank</value> </member> <member> <name>a_class</name> <value>keyword</value> </member> </struct> </value> </param> </params> </methodCall>
<?xml version="1.0" encoding="UTF-8"?> <methodResponse> <params> <param> <value> <string><a href="http://d.hatena.ne.jp/keyword/%a4%cf%a4%c6%a4%ca%a5%ad%a1%bc%a5%ef%a1%bc%a5%c9">はてなキーワード</a>をリンクして!</string> </value> </param> </params> </methodResponse>
<?xml version="1.0" encoding="UTF-8"?> <methodCall> <methodName>hatena.setKeywordLink</methodName> <params> <param> <value> <struct> <member> <name>body</name> <value><string>はてなのブログははてなダイアリー</string></value> </member> <member> <name>mode</name> <value><string>lite</string></value> </member> <member> <name>score</name> <value><int>0</int></value> </member> </struct> </value> </param> </params> </methodCall>
<?xml version="1.0" encoding="UTF-8"?> <methodResponse> <params> <param> <value> <struct> <member> <name>wordlist</name> <value> <array> <data> <value> <struct> <member> <name>word</name> <value><string>はてなダイアリー</string></value> </member> <member> <name>score</name> <value><int>63</int></value> </member> <member> <name>refcount</name> <value><int>158</int></value> </member> <member> <name>cname</name> <value><string>hatena</string></value> </member> </struct> </value> <value> <struct> <member> <name>word</name> <value><string>ブログ</string></value> </member> <member> <name>score</name> <value><int>24</int></value> </member> <member> <name>refcount</name> <value><int>6095</int></value> </member> <member> <name>cname</name> <value><string>web</string></value> </member> </struct> </value> <value> <struct> <member> <name>word</name> <value><string>はてな</string></value> </member> <member> <name>score</name> <value><int>44</int></value> </member> <member> <name>refcount</name> <value><int>518</int></value> </member> <member> <name>cname</name> <value><string>hatena</string></value> </member> </struct> </value> </data> </array> </value> </member> </struct> </value> </param> </params> </methodResponse>
外部アプリケーションにおいて、あるテキストに対してキーワードの自動リンク処理を行う場合のPerlサンプルスクリプトは以下のようになります。
#!/usr/bin/perl -w use strict; use XMLRPC::Lite; use Jcode; my $rpc = XMLRPC::Lite->new; []$rpc->proxy('http://d.hatena.ne.jp/xmlrpc');[] my $body = 'はてなキーワードをリンクして!'; my $res = $rpc->call( 'hatena.setKeywordLink', { body => XMLRPC::Data->type('string',Jcode->new($body,'euc')->utf8), score => 20, cname => ['book','movie'], a_target => '_blank', a_class => 'keyword', } ); if (my $fault = $res->fault){ for (keys %{$fault}){ warn $_."=>".$fault->{$_}; } } else { $body = $res->result; $body =~ s/</</ig; $body =~ s/>/>/ig; $body =~ s/"/"/ig; print Jcode->new($body,'utf8')->euc; }
キーワード一覧を取得するスクリプトは以下のようになります。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Perl6::Say; use XMLRPC::Lite; my $rpc = XMLRPC::Lite->new; $rpc->proxy('http://d.hatena.ne.jp/xmlrpc'); my $body = 'はてなのブログははてなダイアリー'; my $res = $rpc->call( 'hatena.setKeywordLink', { body => XMLRPC::Data->type('string', $body), mode => 'lite', score => 0, } ); if (my $fault = $res->fault) { for (keys %{$fault}) { warn sprintf "%s => %s", $_, $fault->{$_}; } exit; } for my $w (@{$res->result->{wordlist}}) { say sprintf "%s (score: %d, refcount: %d, cname: %s)", $w->{word}, $w->{score}, $w->{refcount}, $w->{cname}; }
% perl get_keywords.pl はてなダイアリー (score: 63, refcount: 158, cname: hatena) ブログ (score: 24, refcount: 6095, cname: web) はてな (score: 44, refcount: 518, cname: hatena)