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を抜けて、スクリプトは終了します。