メインコンテンツまでスキップ

人力検索はてなおとなり質問API

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

本ドキュメントは、人力検索はてなにおける『人力検索はてなおとなり質問API』の実装を解説するためのものです。

API仕様の解説

質問本文を送信すると、キーワード抽出の後人力検索はてなの質問データベースを検索し、似た質問を返信するAPIです。

APIはXML-RPC APIを用いて実装を行っており、メソッド名および指定可能な各属性は、以下の通りです。

uri

http://q.hatena.ne.jp/xmlrpc

encoding

utf8

methodName

question.getSimilarQuestion

parameters

以下を参照

  • content (string): 検索する質問本文を指定します。
  • threshold (int): キーワード重複のしきい値を指定します。省略可能でデフォルトは2です。
  • limit (int): 出力する質問の最大数を指定します。省略可能でデフォルトは5です。

リクエスト

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>question.getSimilarQuestion</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>content</name>
<value><string>代官山付近でおいしいランチを食べられるお店を教えてください。</string></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

レスポンス

<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>qid</name>
<value><int>1108690883</int></value>
</member>
<member>
<name>content</name>
<value><string>渋谷、代官山、恵比寿近辺のランチで
あなたの超お気に入りのお店を教えて下さい。ただし、もちろんたくさん行ったことのあるお店をお願いします。</string></value>
</member>
<member>
<name>uri</name>
<value><string>http://q.hatena.ne.jp/1108690883</string></value>
</member>
</struct>
</value>
<value>
<struct>
<member>
<name>qid</name>
<value><int>1063560945</int></value>
</member>
<member>
<name>content</name>
<value><string>以前王様のブランチで古着屋のローズ???という店が代官山?に出店すると聞いた記憶があるのですが、いつ出来るのでしょうか?できれば正確な場所もお願いします。</string></value>
</member>
<member>
<name>uri</name>
<value><string>http://q.hatena.ne.jp/1063560945</string></value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>

サンプルプログラム

外部アプリケーションにおいて、文章から似た質問を検索するサンプルスクリプトは以下のようになります。

Perl 版

#!/usr/bin/perl
use strict;
use warnings;
use XMLRPC::Lite;
use utf8;
binmode STDOUT, ':utf8';

my $content = '代官山付近でおいしいランチを食べられるお店を教えてください。';

my $res = XMLRPC::Lite
->new
->proxy('http://q.hatena.ne.jp/xmlrpc')
->call(
'question.getSimilarQuestion',
{
content => XMLRPC::Data->type( 'string', $content ),
threshold => 2,
limit => 5,
});

if ( my $fault = $res->fault ) {
warn "$_ => $fault->{$_}" for ( keys %$fault );
}
else {
for ( @{$res->result} ) {
printf "%9s : %s\n", 'qid', $_->{qid};
printf "%9s : %s\n", 'uri', $_->{uri};
printf "%9s : %s\n", 'content', $_->{content};
print "----\n";
}
}

exit;

Ruby 版

文字コードはutf8で保存して実行する必要があります。

#!/usr/bin/env ruby

require 'uri'
require 'xmlrpc/client'

module Hatena
module Question
class SimilarSearch
SERVICE_URI = 'http://q.hatena.ne.jp/xmlrpc'
def initialize
uri = URI SERVICE_URI
@server = XMLRPC::Client.new uri.host, uri.request_uri
end

def search(content, options = {})
options = {
:content => content,
:threshold => 2,
:limit => 5
}.update options

@server.call 'question.getSimilarQuestion', options
end
end
end
end

if $0 == __FILE__
$KCODE = "u"
require 'pp'
similar = Hatena::Question::SimilarSearch.new
similar.search('代官山付近でおいしいランチを食べられるお店を教えてください。', :limit => 3 ).each do |result|
pp result
end
end

変更履歴

  • 2006年 3月23日 ドキュメント公開
  • 2006年 3月13日 リリース