Yahoo!関連検索ワードAPIで検索キーを拡張する
2006-09-21-1
[YahooHacks]
今回の YahooHacks は、関連検索ワード API を使った、
奇をてらわない普通のハックです。
(一時的にデモを置いておきます。そのうち消えます。ご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_webunit.cgi)
■■■関連検索ワードAPIで検索キーを拡張する
「Yahoo!検索 - キーワード入力補助」(http://assist.search.yahoo.co.jp/)
では、入力した検索キーと関連する検索キーワードが表示され、
検索の手助けをしてくれます。

YDN には、このような関連キーワードを取り出す API もあります。
それが「関連検索ワードWebサービス」です。
- Yahoo!デベロッパーネットワーク - 関連検索ワード
http://developer.yahoo.co.jp/search/webunit/V1/webunitSearch.html
ということで、関連検索ワードWebサービスを使って、
検索キーを拡張しながら検索できるサンプル CGI を作ってみました。
■コード
受け取った検索キーでまず関連検索ワードを API 経由で取得します。
その後、ウェブ検索 API 経由で普通に検索します。
■Hack の実行
そのままWebサーバに置けば動作するはずです。
まず「ブログ」「ウェブ」などの一般的な検索キーを入力します。
すると検索結果と同時にフォームにプルダウン式で関連検索ワードが
表示されます。そこから選んでさらに検索できます。
検索実行例を下図に示します。

参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
- Yahoo!検索 - キーワード入力補助
http://assist.search.yahoo.co.jp/
関連書籍:
- Yahoo! Hacks
奇をてらわない普通のハックです。
(一時的にデモを置いておきます。そのうち消えます。ご了承ください。
http://chalow.net/misc/yahoohacks-samp/hack_webunit.cgi)
使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。
■■■関連検索ワードAPIで検索キーを拡張する
「Yahoo!検索 - キーワード入力補助」(http://assist.search.yahoo.co.jp/)
では、入力した検索キーと関連する検索キーワードが表示され、
検索の手助けをしてくれます。

YDN には、このような関連キーワードを取り出す API もあります。
それが「関連検索ワードWebサービス」です。
- Yahoo!デベロッパーネットワーク - 関連検索ワード
http://developer.yahoo.co.jp/search/webunit/V1/webunitSearch.html
ということで、関連検索ワードWebサービスを使って、
検索キーを拡張しながら検索できるサンプル CGI を作ってみました。
■コード
受け取った検索キーでまず関連検索ワードを API 経由で取得します。
その後、ウェブ検索 API 経由で普通に検索します。
#!/usr/bin/perl -T
use strict;
use warnings;
use Encode;
use CGI;
use LWP::Simple;
use XML::Simple;
use HTML::Template;
use URI::Escape;
binmode STDOUT, ":utf8";
my $q = new CGI;
my $key = $q->param('key') || "";
my $wu_ref = yapi_search({type => "unit", key => $key});
my @wu = map {{'String' => $_}} @$wu_ref; # for HTML::Template
my $ws_ref = yapi_search({type => "web", key => $key});
my $template = join("", <DATA>);
my $t = HTML::Template->new(scalarref => \$template,
die_on_bad_params => 0);
$t->param(key => decode('utf-8', $key));
$t->param(results => $ws_ref);
$t->param(webunits => \@wu);
print $q->header(-charset => 'UTF-8'), $t->output();
sub yapi_search {
my ($args_ref) = @_;
my $key = $args_ref->{key};
my $num = $args_ref->{num} || 10;
my $type = $args_ref->{type} || "web";
return [] unless $key;
my $ec = URI::Escape::uri_escape($key);
my %TYPE_TABLE =
("web" => "WebSearchService/V1/webSearch",
"image" => "ImageSearchService/V1/imageSearch",
"video" => "VideoSearchService/V1/videoSearch",
"unit" => "AssistSearchService/V1/webunitSearch");
my $url = "http://search.yahooapis.jp/$TYPE_TABLE{$type}"
."?appid=YahooDemo&query=$ec&results=$num";
my $yahoo_response = get($url);
my $xmlsimple = XML::Simple->new(ForceArray => [ 'Result' ]);
my $yahoo_xml = $xmlsimple->XMLin($yahoo_response);
return $yahoo_xml->{Result};
}
__DATA__
<html lang="ja">
<head>
<title>Assist Search</title>
</head>
<body>
<h1>Assist Search</h1>
<form method="get">
<input type="text" name="key" value="<TMPL_VAR name=key>">
<input type="submit" value="search">
</form>
<TMPL_IF name=webunits>
<form method="get">
<select name="key">
<TMPL_LOOP name=webunits>
<option value="<TMPL_VAR name=String>"><TMPL_VAR name=String>
</TMPL_LOOP>
</select>
<input type="submit" value="search">
</form>
</TMPL_IF>
<h2>Search Results</h2>
<TMPL_LOOP name=results>
<h3><a href="<TMPL_VAR name=Url>"><TMPL_VAR name=Title></a></h3>
<p><TMPL_VAR name=Summary></p>
</TMPL_LOOP>
</body>
</html>
■Hack の実行
そのままWebサーバに置けば動作するはずです。
まず「ブログ」「ウェブ」などの一般的な検索キーを入力します。
すると検索結果と同時にフォームにプルダウン式で関連検索ワードが
表示されます。そこから選んでさらに検索できます。
検索実行例を下図に示します。

参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
http://developer.yahoo.co.jp/
- Yahoo!検索 - キーワード入力補助
http://assist.search.yahoo.co.jp/
関連書籍:
- Yahoo! Hacks
