え~前回、PHPでAmazon MWS APIを使ってXMLから色々な項目を抜き出しブラウザに表示させることができました!
パチパチパチパチ
前回を読んでいない方は、こちらからどうぞ。
⑦PHPでAmazon MWS APIで取得したXMLの色々な項目を抜き出してブラウザに表示してみる。
前回は、色々な項目を表示するだけなので、すぐに終わると思っていましたが・・・
なかなかどうして、一筋縄ではいきませんでした(笑)
しかし、今回は大丈夫のはず!
何故なら、カート価格と商品名を一緒にブラウザ表示させるだけです。
それぞれの課題はすでにクリア済ですので、あとは一緒に表示する処理を考えます。
そんな訳で、行ってみましょう!
目次
具体的にやりたいこと
以前のカート価格の表示はこちら。
そして、こちらは、商品名と商品画像です。
今回は、うえのふたつの表をひとつにまとめたいと思います。
今回はこれだけです(笑)
ちなみに、私は、PHPはド素人です(笑)
出来なかったらごめんなさいということで。
では、さっそくやってみましょう!
XMLの出力結果を取り込むコードを作成する。
今回は、連想配列をつかってやってみます。
これが、ややこしくて、時間がかかりました(笑)
色々と試行錯誤の末、何とか動くようになりました。
連想配列で参考にしたサイトはこちらです。
参考
連想配列の操作 サンプル
そんな理由で、ここから先は完全なる自己責任となりますのであしからず(笑)
さて今回は、オペレーションコマンドを2つ使いますので、サンプルコードも2つ使います。
前回使用したサンプルコードは、GetMatchingProductForIdSample.php でした。
今回は、カート価格を取得するサンプルコード、GetCompetitivePricingForASINSample.php を久しぶりに使います。
ではまずは、以前の『カート価格を取得する』サンプルコードに少し手を加えます。GetCompetitivePricingForASINSample.php
90行目は、商品名と商品画像URLを連想配列に入れて返り値としています。
129行目は今回の目玉です!XMLから連想配列に取り込むコードになります。
130行目は、商品名と商品画像URLを連想配列に入れて返り値としています。
つぎに『商品名と商品画像URLを取得する』前回のサンプルコード に少し手を加えます。
GetMatchingProductForIdSample.php
84行目、前回はASINをコードに直書きしていましたので、今回はコメントアウトします。
代わりに、85行目から87行目にASIN入力フォームからの値を取り込むコードを追加します。
91行目は、商品名と商品画像URLを連想配列に入れて返り値としています。
129行目は今回の目玉です!XMLから連想配列に取り込むコードになります。
130行目は、商品名と商品画像URLを連想配列に入れて返り値としています。
という事で、今回は、連想配列に苦しめられました(笑)
その苦心も含めて、できたコードを見て頂けますと嬉しいです。
コードを実行した結果(先にみせます!)
では、先に結果を見てもらいましょう~!
はい、こちらです!
じゃーん!
おお~!パチパチパチパチ!拍手をください~!!
なんとか、がんばりましたー!!
これで最低限の体裁が整った気がします。
ようやくここまでたどり着きました!
では、苦労して作成したコードを見ていただきましょう!
作成したコード
今回は、細かいコードをたくさんつくりました。
入力フォーム
これですね↓
input_asin_textarea_form.html
すでにサンプル用のASINを入力済です(笑)
メインコード
ASINを入力すると、実行されるコードです。
ここから色々な処理を実行し、結果を表示します。
cart_price_and_product_name_disp.php
31行目から47行目で、連想配列のASINをキーにしてカート価格、商品名、商品画像を表示します。
カート価格を連想配列に格納するコード
cart_price_arr.php
33行目が、連想配列で、ASINをキーに、カート価格を格納しています。
商品名と商品画像URLを連想配列に格納するコード
product_image_arr.php
40行目が、連想配列で、ASINをキーに、商品名と商品画像URLを格納しています。
修正する数が多くて、一苦労でしたがなんとか出来ました。
作成したコードをご参考用にどうぞ
そのようなコードですので、完全なる自己責任でご参照ください。
いかなる責任も負いかねます。
入力フォーム
<meta charset="utf-8">
<form action="GetCompetitivePricingForASINSample.php" method="post">
<p>ASIN入力フォーム<br>
<textarea name="asin" cols="15" rows="5">
B00TRUOD5C
B01MSK1R3O
B0035ESZBY
</textarea>
<br><input type="submit">
</form>
メインコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>GetCompetitivePricingForASIN & GetMatchingProductForId 実行結果</title>
</head>
<body>
<h1>GetCompetitivePricingForASIN & GetMatchingProductForId 実行結果</h1>
<table border="1">
<tr><th>ASIN</th><th>商品画像</th><th>商品名</th><th>カート価格</th></tr>
<?php
////////////////////////////////////////
// phpで結果を取得して表示する。ここから
////////////////////////////////////////
//--------------------------------------
//カート価格を連想配列に格納
//--------------------------------------
require_once dirname(__FILE__) . '/GetCompetitivePricingForASINSample.php';
$cart_arr = $array;
//--------------------------------------
//商品名、画像URLを連想配列に格納
//--------------------------------------
require dirname(__FILE__) . '/GetMatchingProductForIdSample.php';
$product_arr = $array;
//--------------------------------------
//カート価格、商品名/商品画像を表示する。
//--------------------------------------
foreach($array as $key=>$value){
echo "<tr>";
//ASIN
echo "<td>" . $key . "</td>";
//商品画像
$image_path = $product_arr[$key]["URL"];
echo "<td>" . "<img src=$image_path />" . "</td>";
//商品名
echo "<td>" . $product_arr[$key]["Title"] . "</td>";
//カート価格
$tmpval = $cart_arr[$key]["LandedPrice"];
echo "<td>" . floor($tmpval) . "円</td>";
echo "</tr>";
}
////////////////////////////////////////
// phpで結果を取得して表示する。ここまで
////////////////////////////////////////
?>
</table>
</body>
</html>
カート価格を連想配列に格納するコード
<?php
//--------------------------------------
// phpで結果を取得して連想配列に格納する。
//--------------------------------------
//----------------
//statusを取得
//----------------
$statusList = $dom->getElementsByTagName('GetCompetitivePricingForASINResult');
//入力した分ループ処理
for ($i=0; $i<$statusList->length; $i++){
//ASIN
if ($dom->getElementsByTagName("ASIN")->item($i)){
$ASIN = $dom->getElementsByTagName("ASIN")->item($i)->nodeValue;
}else{
$ASIN = '';
}
//商品情報を取得
$root = $dom->getElementsByTagName("CompetitivePricing")->item($i);
//カート価格
if ($root->getElementsByTagName("LandedPrice")->item(0)){
$tmpval = $root->getElementsByTagName("LandedPrice")->item(0);
$LandedPrice = $tmpval->getElementsByTagName("Amount")->item(0)->nodeValue;
}else{
$LandedPrice = '';
}
//連想配列に格納
$array["$ASIN"] = array("LandedPrice"=>$LandedPrice);
}
?>
商品名と商品画像URLを連想配列に格納するコード
<?php
//--------------------------------------
// phpで結果を取得して連想配列に格納する。
//--------------------------------------
//----------------
//statusを取得
//----------------
$statusList = $dom->getElementsByTagName('GetMatchingProductForIdResult');
//入力した分ループ処理
for ($i=0; $i<$statusList->length; $i++){
//ASIN
if ($dom->getElementsByTagName('GetMatchingProductForIdResult')->item($i)){
$tmp = $dom->getElementsByTagName('GetMatchingProductForIdResult')->item($i);
$ASIN = $tmp->getElementsByTagName("ASIN")->item(0)->nodeValue;
}else{
$ASIN = '';
}
//商品情報を取得
$root = $dom->getElementsByTagName("AttributeSets")->item($i);
//商品画像
if ($root->getElementsByTagName("URL")->item(0)){
$URL = $root->getElementsByTagName("URL")->item(0)->nodeValue;
}else{
$URL = '';
}
//商品名
if ($root->getElementsByTagName("Title")->item(0)){
$Title = $root->getElementsByTagName("Title")->item(0)->nodeValue;
}else{
$Title = '';
}
//連想配列に格納
$array["$ASIN"] = array("URL"=>$URL, "Title"=>$Title);
}
?>
まとめ
今回の掲題
「PHPでAmazon MWS APIで取得したカート価格と商品名を同時にブラウザに表示してみる。」
は、大成功です!
今回は、連想配列に苦労しました~
まあ、動作したので良しとしておきました(笑)
プチ成功体験が、次なるやる気を生み出しています(笑)
ということで、次なる課題は・・・
いよいよ、データベースに挑戦してみようと思います!
乞うご期待ねがいます!
また時間がかかりそうですが(笑)
ではこれにておひらき。
ご清読ありがとうございました。
ワテ
カメ吉
コメント失礼します。⑦までは上手くいったのですが、この⑧を同じように動かしたらエラーが発生してしまいます。textarea_to_arr.phpの14行目の}部分がエラーとなりました。何か原因は分かれば教えてください。
よろしくお願い申し上げます。
青山さん、コメントありがとうございます。
確認いたします。明日には返信できるかと思います。
よろしくお願いいたします。
青山さん、お待たせいたしました。
確認してみましたが、私の環境ではエラーになりませんでした。
お力になれずに申し訳ありません。