人力検索はてなおとなり質問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日 リリース