Hatena::Grouphatenadeveloper

はてなキーワード自動リンクAPI

ja/keyword/apis/autolink

はてなキーワード自動リンクAPI

本ドキュメントに関する注意事項

本ドキュメントは、はてなキーワードにおけるキーワード自動リンクのためのAPI実装を解説するものです。

API仕様の解説

任意のテキストを送信すると、はてなキーワードを抽出し、キーワード部分を自動的にリンクして返信するAPIです。また、一部のオプションを用いると自動リンクに使われるキーワード一覧を取得することができます。APIはXML-RPC APIを用いて実装を行っており、メソッド名および指定可能な各属性は、以下の通りです。

uri
http://d.hatena.ne.jp/xmlrpc
encoding
utf8
methodName
hatena.setKeywordLink
parameters
以下を参照
  • body(string): キーワードを抽出するテキストを指定します。
  • score(int): 0〜50。キーワードスコアのしきい値を指定します。指定された値よりもスコアが大きいキーワードのみが抽出されます。省略可。
  • cname(array): キーワードのカテゴリーを指定します。指定があった場合、「一般」と指定されたカテゴリーのキーワードが抽出されます。指定が無かった場合は、全カテゴリーとなります。
    book,music,movie,web,elec,animal,anime,food,sports,game,comic,hatena,clubが指定可能です。省略可。
  • a_target(string): アンカー(a)タグのtarget属性値を指定します。省略可。例:_blank
  • a_class(string): アンカー(a)タグのclass属性値を指定します。省略可。例:keyword
  • mode(string): 値として lite を指定すると、キーワード自動リンクの結果ではなく、自動リンクに使われるキーワード一覧が返却されます。省略可

この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>

mode=lite オプションを利用した場合

<?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)

変更履歴

  • 2010年6月30日 キーワード一覧取得用オプション (mode=lite) の解説追加
  • 2008年9月3日 はてなダイアリーキーワード自動リンクAPI?から名称変更
  • 2005年4月8日 本ドキュメントに関する注意事項を追加
  • 2004年6月15日 リリース