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個の結果をそれぞれ表示しています。


YouTubeで技術解説やってます!