Hatena Blog Tags

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

(はてな)
はてなきーわーどじどうりんくえー


このページは古い情報を掲載しています

このページの情報は更新されていません。新しい情報は「はてなキーワード自動リンクAPI - Hatena Developer Center」に移転しました。

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

本ドキュメントははてなキーワードにおけるAPI実装を解説するものです。主にはてなスタッフがその作成と更新を行っています。

変更履歴

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

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)
このタグの解説についてこの解説文は、すでに終了したサービス「はてなキーワード」内で有志のユーザーが作成・編集した内容に基づいています。その正確性や網羅性をはてなが保証するものではありません。問題のある記述を発見した場合には、お問い合わせフォームよりご連絡ください。