第3回 XML::SimpleであらゆるXML文書を料理する:作って学ぶ、今どきのWebサービス(1/2 ページ)
RSSにおけるXML::RSSのように、専用のモジュールがある場合にはそれを使えばよいのですが、そうでない場合は汎用のXMLパーサーモジュールを使ってパースすることになります。今回は、XML::Simpleを使ってあらゆるXML文書を料理できるようにしてみます。
前回まででXML::RSSによるRSSの料理方法は分かったとして、ではRSS以外のXML文書を料理する場合にはどうしたらよいのでしょう? RSSにおけるXML::RSSのように、専用のモジュールがある場合にはそれを使えばよいのですが、そうでない場合は汎用のXMLパーサーモジュール*を使ってパースすることになります。
XML文書からPerlのデータ構造を作るXML::Simple
Perlの代表的なXMLパーサーであるXML::Parserを使ってもよいのですが、ちょっとしたXML文書を処理する程度の場合にはちょっと大げさすぎます。そこでお勧めなのが、いかにもPerl的なモジュールであるXML::Simpleです。
XML::Simpleは、指定したXML文書を自動的に解析して、ハッシュやリストのリファレンスで構成されるPerlのデータ構造を作って返す便利なモジュールです。非常に使い勝手の良いモジュールで、覚えておくと何かと重宝すると思います。
XML文書の例―はてなexist API
XML::Simpleでパースする対象として、分かりやすさのためにシンプルなXML文書の例を挙げます。わたしが所属するはてなでは、はてなWebサービスとして、幾つかのWebサービスAPIを公開しています。
その中の1つに「はてなexist API」と呼ばれるAPIがあります。このAPIを用いると、任意のURLに関する幾つかの情報を知ることができます。APIのURLにHTTPのクエリパラメータで任意のURLを指定すると、幾つかの情報が入っているXML文書が返ってくるというものです*。
例えば、Yahoo! JAPAN(http://www.yahoo.co.jp/)に関する情報が知りたいとき、http://d.hatena.ne.jp/exist?mode=xml&url=http://www.yahoo.co.jp/というURLを指定します。すると、
<?xml version="1.0" ?>
<existxml>
<count name="diary">413</count>
<count name="antenna">1</count>
<count name="bookmark">177</count>
</existxml>
というXML文書が返ってきます。それぞれ、
- diary:指定したURLがはてなダイアリーで言及された回数
- antenna:指定したURLがはてなアンテナで追加されているかどうか(bool値)
- bookmark:指定したURLをはてなブックマークでブックマークしている人の数
となります。このデータをXML::Simpleでパースするプログラムを書いてみます。
はてなexist APIをXML::Simpleで料理する
例として、はてなexist APIを用い、Yahoo! JAPANが何人のはてなユーザーからブックマークされているかを調べてみましょう(リスト1)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
リスト1では、LWP::Simpleでexist APIのURLからYahoo! JAPANに関するXML文書を取得し、XML::SimpleのXMLinメソッドに渡してパースします。これでデータ構造が返ってくるので、その中からデータを取り出しています。
実行すると、次のようにブックマークしているユーザーの数が出力されます。
$ perl parser-sample01.pl
177
ここで、XML::Simpleが返却したデータ構造がどのようなものなのか分からないといじりようがないと思われた方もいると思います。こんなときは、Perlの汎用的なデータ構造dump用モジュールであるData::Dumperを使います。次のように、
use Data::Dumper;
とモジュールをuseでロードして、
my $data = $parser->XMLin($document);
warn Dumper($data);
と、Data::DumperのDumper関数を使ってwarningを出します。すると、リスト2のような結果が得られます。この結果に用いられている記号はPerlのシンタックスそのものです。ハッシュリファレンスが入れ子になっているデータ構造が見えますね。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
XMLパーサーモジュール
XMLの構造をパースし、プログラムから扱いやすい形式に変換するモジュール。
XML文書が返ってくるというものです
このように、特定のURLに対してXML文書を返すようなAPIのアーキテクチャはREST APIなどと呼ばれる。
Copyright © ITmedia, Inc. All Rights Reserved.