⑦PHPでAmazon MWS APIで取得したXMLの色々な項目を抜き出してブラウザに表示してみる。

え~前回、PHPでAmazon MWS APIを使ってXMLから商品画像を抜き出しブラウザに表示させることができました!

パチパチパチパチ

前回を読んでいない方は、こちらからどうぞ。
⑥PHPでAmazon MWS APIで取得したXMLの商品画像を抜き出してブラウザに表示してみる。

 

前回は、商品画像を表示するだけなので簡単~思っていましたが・・・

やはり、泥沼にはまりました(笑)

なんでこんなに、つまずくのだろうと毎回思います・・・

 

しかし、今回のトライアルは色々な項目をXMLから抜き出してブラウザに表示させるだけです。

これは問題ないはず!

ここまでで少しは力がついていますからね(エッヘン)

 

そんな訳で、行ってみましょう!

具体的にやりたいこと

前回は、XMLから商品画像を抜き出しブラウザに表示しました。


画像があると、見栄えしますね~!

今回は、上の表に色々な項目を表示して、商品情報をふやしていきたいと思います。

実際のXMLで見てみますと、14行目から48行目の<AttributeSets></AttributeSets>で囲まれたところが対象項目になります。
例えば、16行目のBindingとかです。Bindingって何?ですが(笑)とりあえず表示してみます。

今回はこれだけです(笑)

 

ちなみに、私は、PHPはド素人です(笑)

出来なかったらごめんなさいということで。

では、さっそくやってみましょう!

XMLの出力結果を取り込むコードを作成する。

ここから先は完全なる自己責任となりますのであしからず(笑)

前回使用したサンプルコードは、GetMatchingProductForIdSample.php でした。

これに、少し手を加えます。

 

今回の目玉ですが、XMLを取り込むコードを、126行目を追加しました。

追加したコードですが、今回は楽勝のはずでした・・・

が・・・

くぅー!!また障害がありました(笑)

なかなか楽をさせてくれません。

すべては私の実力不足です(笑)

 

今回、はまったところは、色々な項目を出力しようとすると、商品によって有る項目と無い項目があります。

その場合、前回と同じコードでやろうとすると、出力がずれてしまうのです!参考価格にご注目ください。これが正しい出力です。

次に、ASINの順番を逆にしてみると、こうなります。これは間違いです!

参考価格に注目してください!出力場所が変わっていません!

 

という事で、今回は、この出力のずれをどう合わせるかに苦心しました。前回と同じコードは使えません!

その苦心も含めて、できたコードを見て頂けますと嬉しいです。

コードを実行した結果(先にみせます!)

では、先に結果を見てもらいましょう~!

 

はい、こちらです!

 

じゃーん!

おお~!パチパチパチパチ!拍手をください~!!

 

なんとか、がんばりましたー!!

ばかうけの項目名を抜き出してみました。

商品によって表示できる項目に違いがあるため、項目全てを表示している訳ではありません。

日本語の項目名は、推測ですので当てにしないようお願います。

 

こうして出力してみた項目名をみますと、

同じ名前が複数回でてきていたり

カントリーマアムの重さが0gだったり

キットカットの数量が60個だったり

入力されていたり、されていなかったりと

いい加減なところがあることが分かりました(笑)

 

では、苦労して作成したコードを見ていただきましょう!

作成したコード

etc_item_disp.php

こちらが、苦労してXMLから商品画像を抜き出すコードです。

自己責任となりますが、ご参考までに記載いたします。


83行目以降が、今回苦心したところになります。

 

 

Google先生に聞いてなんとか、上の記述にたどり着きました。

参考にしたサイトはこちらです。
参考 PHP で XML の内容を取得する(DOM, XPath)

 

一時はどうなるかと思いましたが、なんとか出来ました(笑)

作成したコードをご参考用にどうぞ

そのようなコードですので、完全なる自己責任でご参照ください。

いかなる責任も負いかねます。

product_image_disp.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>GetMatchingProductForId 実行結果</title>
</head>
<body>
<h1>GetMatchingProductForId 実行結果</h1>
<table border="1">
<tr><th>Status</th
><th>ASIN</th>
<th>商品画像</th>
<th>商品名</th>
<th>バインディング</th>
<th>ブランド</th>
<th>アダルト</th>
<th>商標名</th>
<th>参考価格</th>
<th>生産国</th>
<th>メーカー名</th>
<th>高さ</th>
<th>長さ</th>
<th>幅</th>
<th>重さ</th>
<th>数量</th>
<th>ProductGroup</th>
<th>Publisher</th>
<th>Scent</th>
<th>Studio</th>
</tr>

<tr><th>Status</th
><th>ASIN</th>
<th>URL</th>
<th>Title</th>
<th>Binding</th>
<th>Brand</th>
<th>IsAdultProduct</th>
<th>Label</th>
<th>Amount</th>
<th>CurrencyCode</th>
<th>Manufacturer</th>
<th>Height</th>
<th>Length</th>
<th>Width</th>
<th>Weight</th>
<th>PackageQuantity</th>
<th>ProductGroup</th>
<th>Publisher</th>
<th>Scent</th>
<th>Studio</th>
</tr>

<?php
//--------------------------------------
// phpで結果を取得して表示する。ここから
//--------------------------------------

//----------------
//statusを取得
//----------------
$statusList = $dom->getElementsByTagName('GetMatchingProductForIdResult');


for ($i=0; $i<$statusList->length; $i++){
	echo "<tr>";

	//status
	if ($dom->getElementsByTagName("GetMatchingProductForIdResult")->item(0)){
		echo "<td>" . $dom->getElementsByTagName("GetMatchingProductForIdResult")->item(0)->getAttribute('status') . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//ASIN
	if ($dom->getElementsByTagName("ASIN")->item(0)){
		echo "<td>" . $dom->getElementsByTagName("ASIN")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	

	//商品情報を取得
	$root = $dom->getElementsByTagName("AttributeSets")->item($i);
	
	//商品画像
	if ($root->getElementsByTagName("URL")->item(0)){
		$image_path =$root->getElementsByTagName("URL")->item(0)->nodeValue;
		echo "<td>" . "<img src=$image_path />" . "</td>";
	}else{
		echo "<td>-</td>";//該当なし
	}	

	//商品名
	if ($root->getElementsByTagName("Title")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Title")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//バインディング
	if ($root->getElementsByTagName("Binding")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Binding")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//ブランド
	if ($root->getElementsByTagName("Brand")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Brand")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//アダルト
	if ($root->getElementsByTagName("IsAdultProduct")->item(0)){
		echo "<td>" . $root->getElementsByTagName("IsAdultProduct")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//商標名
	if ($root->getElementsByTagName("Label")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Label")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//参考価格
	if ($root->getElementsByTagName("Amount")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Amount")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//生産国
	if ($root->getElementsByTagName("CurrencyCode")->item(0)){
		echo "<td>" . $root->getElementsByTagName("CurrencyCode")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//メーカー名
	if ($root->getElementsByTagName("Manufacturer")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Manufacturer")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//高さ(インチからセンチに変換)
	if ($root->getElementsByTagName("Height")->item(0)){
		$tmpval = $root->getElementsByTagName("Height")->item(0)->nodeValue;
		echo "<td>" . floor($tmpval*2.54) . "㎝</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//長さ(インチからセンチに変換)
	if ($root->getElementsByTagName("Length")->item(0)){
		$tmpval = $root->getElementsByTagName("Length")->item(0)->nodeValue;
		echo "<td>" . floor($tmpval*2.54) . "㎝</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//幅(インチからセンチに変換)
	if ($root->getElementsByTagName("Width")->item(0)){
		$tmpval = $root->getElementsByTagName("Width")->item(0)->nodeValue;
		echo "<td>" . floor($tmpval*2.54) . "㎝</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}	
	
	//重さ(ポンドからグラムに変換)
	if ($root->getElementsByTagName("Weight")->item(0)){
		$tmpval = $root->getElementsByTagName("Weight")->item(0)->nodeValue;
		echo "<td>" . floor($tmpval*453.592) . "g</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}

	//数量
	if ($root->getElementsByTagName("PackageQuantity")->item(0)){
		echo "<td>" . $root->getElementsByTagName("PackageQuantity")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}		

	//ProductGroup
	if ($root->getElementsByTagName("ProductGroup")->item(0)){
		echo "<td>" . $root->getElementsByTagName("ProductGroup")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}		

	//Publisher
	if ($root->getElementsByTagName("Publisher")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Publisher")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}		

	//Scent
	if ($root->getElementsByTagName("Scent")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Scent")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}		

	//Studio
	if ($root->getElementsByTagName("Studio")->item(0)){
		echo "<td>" . $root->getElementsByTagName("Studio")->item(0)->nodeValue . "</td>";	
	}else{
		echo "<td>-</td>";//該当なし
	}		

	echo "</tr>";

}


//--------------------------------------
// phpで結果を取得して表示する。ここまで
//--------------------------------------
?>
</table>
</body>
</html>

まとめ

今回の掲題

「PHPでAmazon MWS APIで取得したXMLの色々な項目を抜き出してブラウザに表示してみる。」

は、大成功です!

 

今回は、すこしは早めに解決できたかと(笑)

毎回苦労しますねー

 

プチ成功体験が、次なるやる気を生み出しています(笑)

 

ということで、次なる課題は・・・

オペレーションコマンドの異なるカート価格と商品名/商品画像を同時にブラウザに表示してみたいと思います。

乞うご期待ねがいます!

 

また時間がかかりそうですが(笑)

ではこれにておひらき。

ご清読ありがとうございました。

ワテ

プログラムをオンラインで学ぶならUdemy(ユーデミー)がおすすめです。好きな時間に視聴できるので私も受講しています。


セール期間なら千円台でお得だぞ

カメ吉

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください