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