high booster 小型水槽でアクアリウム トップ
  1. high booster-小型水槽でアクアリウム-
  2. コラム一覧
  3. rakuten webserviceを使う「第2回 XMLからのデータ抽出」

rakuten webserviceを使う「第2回 XMLからのデータ抽出」

前回の内容は以下のページを参照ください。
今回は、第1回で紹介した方法で取得したXMLから各種データを抽出する方法を紹介します。
PHP5が使える環境を前提に記載していますが、基本的には他の言語でも同様のことが出来る関数などが準備されていると思いますので、そこは利用する環境に置き換えて読んでいただければ幸いです。

PHPでXMLをパース(parse)する

XMLをパースするというのは、XMLを解析してパーツに分割することを言います。

PHP5では、XMLをパースする便利な関数としてPHP5ではsimplexml_load_file()やsimplexml_load_string()などが提供されています。 今回はsimplexml_load_string関数を利用します。

XMLファイルの取得

まず、パーすするXMLファイルを取得します。これは、file_get_contents("楽天商品ランキングAPIのURL")で取得が出来ます。

以下のコードで、変数[string]に楽天商品ランキングAPIから取得したXMLデータが格納されます。

$req = "http://api.rakuten.co.jp/rws/2.0/rest?operation=ItemRanking&version=2009-04-15&developerId=[デベロッパーID]&affiliateId=[アフィリエイトID]&genreId=[カテゴリID]";
$string = file_get_contents($req);

本来であれば、この変数[string]をsimplexml_load_string関数に渡してあげればXMLの解析が出来るはずなのですが、 取得したXML内に以下のようなXMLの要素名に「:(コロン)」が含まれるものがあります。

<itemRanking:ItemRanking xmlns:itemRanking="http://api.rakuten.co.jp/rws/rest/ItemRanking/2009-04-15">


どうやら、simplexml_load_string関数では、このような「:」を含む要素名を持つXMLはうまく処理できないようです。
本来、このような場合はPHPの正規表現を用いてXMLパースをするべきなのですが、せっかくsimplexml_load_string関数のような 便利な関数が用意されているのに使わないのはもったいないです。

なので、simplexml_load_string関数が使えるように、「:」を他の文字に変換してからsimplexml_load_string関数に渡すようにします。
$req = "http://api.rakuten.co.jp/rws/2.0/rest?operation=ItemRanking&version=2009-04-15&developerId=[デベロッパーID]&affiliateId=[アフィリエイトID]&genreId=[カテゴリID]";
$string = preg_replace('/:/','_',file_get_contents($req));
$xml = simplexml_load_string($string) or die("XMLパースエラー");


2行目のpreg_replace関数で「:」を「_(アンダーバー)」に変換しています。
3行目のsimplexml_load_string関数でXMLのパースをしています。

これで、XMLからデータを抽出する準備が整いました。 あとは、データを抽出し加工するだけです。

XMLからのデータ抽出は簡単です。
例えば、楽天商品ランキングAPIから取得したXMLデータから商品のタイトルを取得したい場合、 以下のようにすれば変数[str]に商品タイトルが格納されます。
$str = $xml->Body->itemRanking_ItemRanking->Item->itemName;


また、複数の商品データがある場合は、以下のようにすれば順々に商品データにアクセスしていきます。
foreach ($xml->Body->itemRanking_ItemRanking->Item as $item) {
  echo "商品名:".$item->itemName."\n";
}


これまで説明した内容のまとめとして、取得したXMLから商品画像と商品名を表示するサンプルコードを紹介します。
<?php

$req="http://api.rakuten.co.jp/rws/2.0/rest?operation=ItemRanking&version=2009-04-15&developerId=[デベロッパーID]&affiliateId=[アフィリエイトID]&genreId=[カテゴリID]";

$string = preg_replace('/:/','_',file_get_contents($req));

$xml = simplexml_load_string($string) or die("XMLパースエラー");

$output = "<table>n";
foreach ($xml->Body->itemRanking_ItemRanking->Item as $item) {

  $output.= "<tr><td><img src='" . preg_replace('/http_/','http:',$item->smallImageUrl) . "'></td>";
  $output.= "<td>商品名:".$item->itemName</td></tr>";

} 

$output .= "</table>n";

echo $output;

?>

上記コードをそのまま実行すると、文字エンコードがXMLのエンコード(UTF-8)のまま出力されると思います。
必要であれば、出力を他のエンコード(sjisやeuc-jp)に変更する関数を通してから出力するようにするとよいと思います。

次回はこれを汎用的に利用するために、javascript化(?)する方法を紹介します。

rakuten webserviceを使う「第2回 XMLからのデータ抽出」をはてなブックマークに追加 rakuten webserviceを使う「第2回 XMLからのデータ抽出」をYahoo!ブックマークに追加

2009年7月 9日 18:44 | コメント(0)

関連するページ


コラム 一覧に戻る>>

【PR】

コメントしてみる

気軽にコメントしてみてください。コメントしてもらえるととてもうれしいです。

管理人も愛用しているお勧めアイテム

スポンサードリンク

アンケート(テスト中)

アクセスランキング(コラム)

人気コラム一覧

アクセスランキング(Blogエントリー)

人気エントリー一覧

このサイトについて

  • 趣味のアクアリウム、音楽、iPod Touchの話題をメインに紹介しています。 気軽にコメント、トラックバックしてください!もちろんリンクフリーです。相互リンクも大歓迎です。

    この日記のはてなブックマーク数



最近のコメント

検索

Powered by
Movable Type 4.21-ja

GT-lolipop Rental Server


カレンダー

2010年5月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
あわせて読みたいブログパーツ