[Yahoo!] Yahoo! JAPANウェブ検索WebサービスAPI
<<
作成日時 : 2006/08/10 00:34
>>
ブログ気持玉 0 /
トラックバック 0 /
コメント 1
Google Web Search APIと同じように、日本のYahoo!もウェブ検索のAPIを提供しています。
検索クエリを application/x-www-form-urlencoded 形式で投げると、検索結果が XML で返ります。
以下のようなプログラムで、Perlからカンタンに検索できます。
#!/usr/bin/perl
use strict;
use HTTP::Lite;
use XML::TreePP;
&search_yahoo();
sub search_yahoo {
my $APIURL = 'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch';
my $APIID = 'xxxxxxxx';
my $USER_AGENT = 'kawa.net ';
my $QUERY = '検索フレーズ';
my $query = {};
$query->{appid} = $APIID;
$query->{query} = $QUERY;
$query->{type} = 'all'; # or 'any'
$query->{format} = 'html';
$query->{start} = 1;
$query->{results} = 10;
$query->{language} = 'ja';
$query->{country} = 'jp';
my $body = &www_form_urlencode( $query );
my $tpp = XML::TreePP->new();
$tpp->set( user_agent => $USER_AGENT );
$tpp->set( force_array => [qw( Result )] );
my( $tree, $xml ) = $tpp->parsehttp( POST => $APIURL, $body ) or return;
# print STDERR $xml;
return unless ref $tree;
return unless ref $tree->{ResultSet};
return unless ref $tree->{ResultSet}->{Result};
foreach my $item ( @{$tree->{ResultSet}->{Result}} ) {
print "Url=", $item->{Url}, "\n";
print "Title=", $item->{Title}, "\n";
my( $day, $mon, $year ) = (localtime($item->{ModificationDate}))[3,4,5];
my $date = sprintf( "%04d-%02d-%02d", $year+1900, $mon+1, $day );
print "ModificationDate=", $item->{ModificationDate}, " ($date)\n";
}
}
sub www_form_urlencode {
my $hash = shift;
my $list = [];
foreach my $key ( sort keys %$hash ) {
my $val = $hash->{$key};
$key =~ s/([\&\=\;\s\+])/sprintf("%%%02X",ord($1))/ge;
$val =~ s/([\&\=\;\s\+])/sprintf("%%%02X",ord($1))/ge;
push( @$list, $key."=".$val );
}
my $text = join( "&", @$list );
$text;
}
検索サービスの利用には、アプリケーションごとのAPI IDの登録が必要なので、
Yahoo! JAPANに会員登録してから、こちらでAPI IDを登録して下さい。
その上で、適当な $QUERY の値を入れて検索実行すると、
Url=http://japan.cnet.com/news/media/trackback/0,2000054598,20093918,00.htm
Title=リクルート、地域情報検索サービス「ドコイク?」をリニューアル - CNET Japan
ModificationDate=1154358000 (2006-08-01) の形式で検索結果を表示します。
日本語キーワードも、UTF-8 でそのまま検索できます。
1日50,000回まで検索できるとのことなので、Googleより使いやすいかも。
詳しい仕様は http://developer.yahoo.co.jp/search/web/V1/webSearch.html (日本語)
※HTTP::Liteなら動くけど、LWP::UserAgentを使うとうまく結果が返らない。
→リクエストContent-Typeの問題だった模様。LWPを使うと自動では付与されない。
XML::TreePP バージョン 0.18 以降で対応しました。
|