PerlでYahoo!Web検索サービス:XMLの解析(3)

前述した例では取得したXMLから結果数だけを取り出していましたが、今度は取得したXMLをもうちょっと詳しく解析する説明をしようと思います。

WebSearchServiceから取得したXMLから各項目を抜き出し

今度はXMLデータから検索結果毎に、全てのデータを表示していく方法を説明したいと思います。 以下にYahoo! Web Search ServiceからXMLを取得して解析するPerlスクリプトのサンプルを示します。



#!/usr/bin/perl

use LWP::Simple;
use XML::Simple;

# for warning "Wide character in print at ..."
binmode(STDOUT, ":utf8");

$appid = "testimpl";
$query = "test";

$url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=$appid&query=$query";

$response = get($url);

$xml = new XML::Simple;
$yahoo_xml = $xml->XMLin($response);

foreach $result (@{$yahoo_xml->{Result}}) {
  $title = $result->{Title};
  $summary = $result->{Summary};
  $result_url = $result->{Url};

  $click_url = $result->{ClickUrl};
  $mimetype = $result->{MimeType};
  $cache_url = $result->{Cache}{Url};
  $cache_sz = $result->{Cache}{Size};

  $mod_date = $result->{ModificationDate};
  ($sec, $min, $hour, $mday, $month, $year) = localtime($mod_date);

  # add 1 because, $month is 0 - 11
  $month++;

  # add 1900 because year starts from 0
  $year = 1900 + $year;

  print "Title  : $title\r\n";
  print "Url    : $result_url\r\n";
  print "Summary: $summary\r\n";

  print "ClickUrl: $click_url\r\n";
  print "MimeType: $mimetype\r\n";
  print "CacheUrl: $cache_url\r\n";
  print "CacheSize: $cache_sz\r\n";

  print "ModificationDate: $year/$month/$mday\r\n";

  print "\r\n";
}

exit;


上記サンプルでは、get()で取得したXMLを「$xml->XMLin($response)」で解析しています。 解析結果は「$yahoo_xml」に入っています。

上記サンプルでは、foreachを使って各検索結果の個数回の繰り返しを行っています。 上記サンプルでは、foreachを実行する度にXML解析結果から各エントリの要素を取り出しています。 取得した各エントリの中身は一度変数に代入しています。 (代入はサンプルを説明するために行っているだけで、必ずしなくてはならないわけではありません。) サンプルでは、代入した値をprintした後、次のエントリを処理しています。 全部のエントリを処理し終わるとforeachを抜けて、スクリプトは終了します。


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