[Yahoo!] Yahoo! JAPANウェブ検索WebサービスAPI

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 以降で対応しました。
 

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

ナイス

この記事へのコメント

ooi
2006年08月11日 14:25
僕はLWP::Simpleを使ってます。エラーコードが拾えない欠点もあるにはありますが…
http://tatamilab.jp

この記事へのトラックバック