PerlでYahoo!Web検索サービス:1〜1000まで結果を取得する
前述した例では、検索結果のうちの最初の10個だけを取得していました。 ここでは、1〜1000番目まで全部の検索結果を取得する方法を説明したいと思います。
サンプル
以下にYahoo! Web Search Serviceを使って1〜1000番までの検索結果を取得する方法を説明したいと思います。
#!/usr/bin/perl
use LWP::Simple;
use XML::Simple;
# for warning "Wide character in print at ..."
binmode(STDOUT, ":utf8");
$appid = "testimpl";
$query = "geek";
$start = 1;
$results = 50;
for ($i=0; $i<20; $i++) {
if ($start + $results - 1 >= 1000) {
if ($start >= 1000) {
last;
} else {
$results = 1000 - $start;
}
}
$url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=$appid&query=$query";
$url .= "&results=$results&start=$start";
print "start = $start\r\n";
$response = get($url);
$xml = new XML::Simple;
$yahoo_xml = $xml->XMLin($response);
$num = $start;
foreach $result (@{$yahoo_xml->{Result}}) {
$result_url = $result->{Url};
print "$num\r\n";
print "$result_url\r\n";
$num++;
}
$start += 50;
}
exit;
Yahoo!Web検索APIでは、1番目から1000番目までの検索結果を取得できます。 上記サンプルでは、YahooへのQuery回数を減らすために一回につき50個の返答を要求しています。 検索結果は1000個目までを取得したいので50個の結果を20回要求しています。 ただし、最後の一回は50個要求すると1001個目まで要求してしまってエラーになるので、for文の最初で調整しています。 for文の先頭での調整方法はもっと良いやり方があると思いますが、一応、サンプルということで、ちょっと回りくどい方法にしてみました。
foreach文はYahooから返って来る50個の結果をそれぞれ表示しています。