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

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

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

今度はXMLデータから検索結果毎に、タイトル、URL、概要情報の3つを表示していく方法を説明したいと思います。 以下に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};

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

exit;


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

上記サンプルでは、foreachを使って各検索結果の個数回の繰り返しを行っています。 上記サンプルでは、foreachを実行する度にXML解析結果から3つの要素を取り出しています。 「$title」にはエントリのタイトル、「$result_url」にはエントリのURL、「$summary」にはエントリの概要情報を代入しています。 サンプルでは、代入した値をprintした後、次のエントリを処理しています。 全部のエントリを処理し終わるとforeachを抜けて、スクリプトは終了します。

最初の方にある「binmode(STDOUT, ":utf8");」は気になると思いますが、おまじないだと思ってください。 Yahoo!から送られてくるXML文書はUTF-8で書かれていますが、PerlでそのままUTF-8の文字列をprintすると「Wide character in print at line ...」のようなワーニングが出ることがあります。 binmode(STDOUT, "utf:8")をするとこのWarningが出なくなります。

ここでは、XMLを解析して検索結果のエントリの主要な部分だけを表示しました。 次は、もうちょっと詳しく各検索結果を解析していきたいと思います。


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