古い記事
ランダムジャンプ
新しい記事
Yahoo!デベロッパーネットワーク (YDN) のウェブ検索 API を用いて、入力キーのウェブ検索ヒット件数だけを取り出す簡単な方法について。
ウェブサービスを用いて自然言語処理っぽいことをやろうというときの基本中の基本。

使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。


- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/
- Yahoo!デベロッパーネットワーク - 検索 - ウェブ検索
http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html

Y!API に投げるURL


http://search.yahooapis.jp/WebSearchService/V1/
webSearch?appid=YahooDemo&query=[URI ESCAPE したキー]&result=1

appid は自分で取得したものを使うこと。
(http://e.developer.yahoo.co.jp/webservices/register_application)

result は 1 にする。
これを 0 にすると 10 件返ってきてしまう。
なるべく検索結果 XML を小さくするのが効率的なのでミニマムである 1 にする。

検索結果 XML からヒット数を取り出す


XML をパーズするまでもない。正規表現で取り出すのが速い。
検索結果 XML の冒頭はこんな感じ。
<ResultSet xsi:schemaLocation="urn:yahoo:srch
http://search.yahooapis.jp/WebSearchService/V1/WebSearchResponse.xsd"
type="web" totalResultsAvailable="19700" totalResultsReturned="1"
firstResultPosition="1" ...
totalResultsAvailable が検索ヒット数なので、
正規表現「/totalResultsAvailable="(\d+)"/」を使えば OK。

Perl によるサンプルプログラム


以上を踏まえたサンプルプログラム (perl)。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use URI::Escape;

while (<>) {
    my $num = get_num($_);
    print "$num\n";
}

sub get_num {
    my ($key) = @_;
    my $ek = URI::Escape::uri_escape($key);
    my $url = "http://search.yahooapis.jp/WebSearchService/V1/".
        "webSearch?appid=YahooDemo&query=$ek&result=1";
    my $res = get($url);
    my ($num) = ($res =~ /totalResultsAvailable="(\d+)"/);
    return $num || 0;
}

実行例:
% cat a.txt
ufj
学校
六本木ヒルズ
% sample.pl a.txt
105000000
1340000000
17400000

サンプルプログラムは Perl で書いたが、
他のスクリプト言語でも簡単に書けるよ。