⑨PHPでAmazon MWS APIで取得した商品情報をMySQL(DB)に登録してみる。

え~前回は、PHPでAmazon MWS APIを使ってカート価格と商品名を一度に表示できました!

パチパチパチパチ

前回を読んでいない方は、こちらからどうぞ。
⑧PHPでAmazon MWS APIで取得したカート価格と商品名を同時にブラウザに表示してみる。

 

前回は、連想配列に苦労しましたが、今回は、いよいよデータベースに挑戦します!

ASINで取得したカート価格、商品名、商品画像URLを登録してみようと思います。

 

どれくらい登録できるのか、わくわくします!

 

ASINは自力で収集しないといけませんが(笑)

 

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

具体的にやりたいこと

前回は、カート価格、商品名、商品画像を表示しました。うえの項目は、ブラウザに表示しただけです。

新しいASINを入力すると、せっかく取得した商品情報は消えてしまいます。

これでは勿体ないので、取得した情報をDBに保存しよう!

というのが今回の主旨になります。

 

保存するDBは、XAMPPでダウンロードしたMySQLになります。

わたしも、ド素人なので詳しくはわかりません(笑)

 

当然、Google先生に聞きます。

以前、参考サイトで紹介しましたこちらを、読み返します。
参考 データベースとSQL

このサイトは、本当にわかりやすくて有難いです!

DBの作り方は、上のサイトをご参照ください。

 

では、行ってみましょう!

DBテーブルの作成

まずは、カート価格や商品名を、DBのどこに格納するかを決めたいと思います。

とりあえず、適当に以下の名前を付けてみました。


データベース名:amz

テーブル名:asins

—以下、レコードの項目名—

ASIN:ASIN

商品画像:URL

商品名:Title

カート価格:LandedPrice


で、うえで決めたものを、実際につくったものがこちらになります。

参考サイトをみて、手入力してつくりました。

主キー(プライマリーキー)をASINにしています。

これで、ASINが二重登録されないように出来ますし、ASINと各項目を紐づけできます。

これで、DBの格納先は決まりました。

あとは、実際にDBに格納してみるだけです!

では、コードを作成していきます。

DBに格納するコードの作成について

DBに格納するコード自体は、それほど難しくはありません。

と言ってもド素人ですので、Google先生に聞きながら相当の時間をかけて調べています(笑)

 

今回の肝は、商品情報のはいった配列を無事に受け取れるかどうかです。

この商品情報配列さえ受け取れれば、DBに格納するのは全く問題ありません!

 

しかし、困ったことは・・・

DBに手をだすとファイル数が増えてきて、紹介するのが大変になりました(笑)

XMLから商品情報を取得するコードについて

え~前回までのコードを使いまわしてチョチョイで行けるかと思いましたが・・・

試行錯誤の末、色々と直さないといけない箇所がありました。

 

具体的に言いますと、

XMLにASINは存在しているのに、商品情報がないケースがありました。

つまり、ASINはX個に対して、商品情報が(X – 1)個なわけです。

これで前回のコードを使うと、取得情報がずれてしまいました。(はい、考慮不足です!)

このバグは致命的ですね。商品名「ばかうけ」になるはずが、なぜか「キットカット」になるのですから(汗)

 

今回のコードは、そのずれが起きないように修正しています。
(もしかすると別の条件で、ずれるケースがまだあるかもしれません)

作成したコードを流れに沿って紹介

私も混乱しそうなので、流れに沿って順番にコードを紹介していきたいと思います。

まずは、ASINを入力するフォームですね。

沢山入力できるように長くしてみました(笑)

t_add.php

ASINを入力して追加ボタンをクリックしますと、一連の処理が始まります!

今回のメインコードです!
add.php


11,46,47行目では全体の処理時間を計測しています。
どれくらい時間がかかるか気になりますねー!

4,5,33,36行目は、今回の目玉です!DBに格納するコードになります。

50,51行目は、DBに登録したものを一覧表示するコードです。
今回は処理時間を表示させたいのでコメントアウトしています。

 

さて、今回はASINを一回にどれくらい投入するか決めなくてはいけません。
これまでは、大量に処理をさせなかったので気にしていませんでした(笑)

公式サイトによりますと
参考 Amazon MWS商品APIセクションについて知っておくべきこと

GetCompetitivePricingForASIN オペレーションは

このオペレーションで、カート価格を抽出しています。

 

GetMatchingProductForId オペレーションは

このオペレーションで、商品名を抽出しています。

 

一回に投入できる最大は、どちらも20個です。

しかし、回復レートが異なります。
遅い方だと20個再処理をするのに4秒待つ必要があります。

今回は、遅い方に合わせて、5個ずつ処理させてみたいと思います。

 

もくろみとしては、GetCompetitivePricingForASINの回復中にGetMatchingProductForIdを実行させる。

つまり、お互いの回復時間を使って、ループ処理をさせるのが理想的かと思いました(浅い?)

計測してみないと分かりませんので、試してみたいと思います。

 

今回の目玉のコードのひとつ目です。

add_prc_to_db.php


8,46,47行目ではカート価格取得からDBに格納するまでのタイムを計測しています。

20行目が、カート価格のXMLを取得するオペレーションコードです。
 お馴染みのものですが、今回はXMLを配列に格納した$domを返り値にする修正をしています。

26行目が、XMLからカート価格を抜き出して連想配列に格納するコードです。
 以前は20行目のオペレーションコード内に入っていたものを外に抜き出しました。

31行目から43行目が、今回の目玉のカート価格をDBに格納するコードです。
 連想配列からASINをキーにしてカート価格を取り出してDBに格納しています。
DBにASINが存在しない場合は、新規登録します。
DBに重複するASINがある場合は、カート価格を更新します。

 

今回の目玉のコードのもうひとつ目です。

add_prd_to_db.php


8,52,53行目では商品名、画像URL取得からDBに格納するまでのタイムを計測しています。

20行目が、商品名、画像URLのXMLを取得するオペレーションコードです。
 お馴染みのものですが、今回はXMLを配列に格納した$domを返り値にする修正をしています。

26行目が、XMLから商品名、画像URLを抜き出して連想配列に格納するコードです。
 以前は20行目のオペレーションコード内に入っていたものを外に抜き出しました。

31行目から49行目が、今回の目玉の商品名、画像URLをDBに格納するコードです。
 連想配列からASINをキーにして商品名、画像URLを取り出してDBに格納しています。
DBにASINが存在しない場合は、新規登録します。
DBに重複するASINがある場合は、商品名、画像URLを更新します。
43行目は、商品名にシングルクォーテーションが入っていると、
DBに登録できなかったのでバックスラッシュを入れるようにしました。
まあ、レアケースかもしれません。例えばこんなの、μ’s(ミューズ)。

 

ザックリと概要はこんな感じです。
全コードは、下の方に置いておきますので、完全なる自己責任でご参照ください。

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

コードを実行した結果

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

まずは、テストASINを適当に300個集めました。
この中には、Amazonサイトで検索しても商品自体が存在していないものを含んでいます。
また、重複したASINもはいっています。

まだDBには何も登録されていません。

では、ASINを入力して送信ボタンをクリックしてみます。


すいません、今回はモザイクで(笑)

 

ではASIN300個の処理を開始します。

開始そうそう、300個のASINが256個になりました(笑)

入力時のチェックで重複しているASINをはじくようにしています。

44個も重複していました(笑)

そして、ASIN5個の計測結果は

カート価格を取得してDBに格納するタイムは、約1.6秒

商品名、画像URLを取得してDBに格納するタイムは、1.1秒

各処理で1秒を超えてますので、回復レートの1秒5個をクリアしています。

これなら、sleepなどで待機する必要はなく連続でループ処理できます。

 


こちらは、ERROR ASINが空白になっています。
これは、ASINが取得できない場合に出力されます。

1件取得ができないと、処理時間が1秒を下回ります。
この場合は、sleepなどの待機処理が必要になるかも(今回はしませんが・・・)

 

最後の処理は、ASINが1個だけでした。1個でも0.6秒もかかるのですねー!

両処理を足して1.3秒。微妙なところですが、sleep処理はなくてもいける?

回復していなければ、データが返ってこないということなら、今回はデータが返ってきているので問題ないのかも・・・

さて、全体のタイムは、約88秒でした。

256個処理しましたので、1個あたり0.34秒ほどかかったことになります。

1時間で10,588件を処理できる計算になります。

 

もう少しまともなコードを書ければ、もっと早いのでしょうけど・・・

まあ、1万件を超えそうなのでよしとしましょう(笑)

 

今回の目的のDBへの登録をみてみましょう!

 

はい、こちらです!

 

じゃーん!

248個登録されました~

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

 

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

 

モザイクですいません(笑)

 

DBの登録内容をブラウザに表示するコードもつくってみました!

こちらがその結果です!(モザイクですいません)

全て確認したところ、問題なく表示されていました。


お馴染みの「ばかうけ」もDBに登録してみました(笑)

カート価格の0円は、カート価格が表示されないケースのものです。

例えば、売り切れの場合などです。

 

はい、今回はここまでとなります。

まとめ

今回は、先にまとめさせていただきます。

作成したコードは、このまとめの後ろの方に掲載しました。

 

今回の掲題

「PHPでAmazon MWS APIで取得した商品情報をMySQL(DB)に登録してみる。」

は、大成功です!

 

今回もまた時間がかかりました~

苦労したところを沢山言いたいところですが

まあ、動作したので良しとしておきます(笑)

 

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

 

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

他サイトの最低価格を取得してみたいと思います。

乞うご期待ねがいます!

 

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

ではこれにておひらき。

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

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

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

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

入力フォーム

t_add.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>商品追加</title>
</head>
<body>
	<form action="add.php" method="post">
		<p>ASIN入力フォーム<br>
			<textarea name="asin"  rows="30" cols="15"></textarea>
		<br><input type="submit" name="submit" value="追加">
	</form>
	<a href="index.php">一覧に戻る</a> 
</body>
</html>

メインコード

add.php

<?php
//関数の読み込み
require_once 'mws_func.php';
require_once 'add_prc_to_db.php';
require_once 'add_prd_to_db.php';

//入力フォームから送信をクリックされたら処理
if (@$_POST['submit']) {

	//全体の処理時間を計測
	$time_start = microtime(true);

	//入力フォームの値を配列に格納。
	require 'textarea_to_arr.php';
	
	//デバッグ/計測用
	echo "入力数(重複を除去):" . count($array) . "件<br>";
	
	//初期値
	$input_asin=[];//一時的に配列を格納
	$max_cnt=5;//5件ごとに処理
	
	//入力分ループ処理
	for ($i=0; $i<count($array); $i++){
	
		//5件分を配列に格納
		array_push($input_asin, $array[$i]);
		
		//5件ごとに処理を実行 || 最後の処理を実行。
		if(($i+1)%$max_cnt==0 || $i==count($array)-1){

			//DBにカート価格を格納
			add_prc_to_db($input_asin);

			//DBに商品情報を格納
			add_prd_to_db($input_asin);
			
			//sleep(1);

			//初期化
			$input_asin=[];
		}
	}

	//全体の処理時間を計測
	$time = microtime(true) - $time_start;
	echo "全体のタイム:{$time} 秒<br>";

	//管理画面を表示
	//header('Location: index.php');
	//exit();
}
require 't_add.php';
?>

入力フォームの値を配列に格納。

textarea_to_arr.php
<?php
	//改行コードを含む文字列
	$str = htmlspecialchars($_POST['asin']);
	
	//改行コードを置換してLF改行コードに統一
	$str = str_replace(array("\r\n","\r"), "\n", $str);
	
	//LF改行コードで配列に格納
	$tbl = explode("\n", $str);
	
	//配列の空要素を削除する
	$tbl = array_filter($tbl, "strlen");

	//空白を削除する。
	$array=[];
	for ($i=0; $i<count($tbl); $i++){
		$str = trim($tbl[$i]);
		//エクセルからASINをコピー時の空白を除去
		$str = str_replace( "\xc2\xa0", "", $str );
		array_push($array, $str);
	}
	//配列の重複を削除
	$tbl=array_unique($array);
	
	//キー振り直し
	$array = array_values($tbl);
?>

DBにカート価格を格納

add_prc_to_db.php
<?php
//----------------------------------------
// XMLからカート価格を抜き出してDBに格納
//----------------------------------------
function add_prc_to_db($input_asin){

	//カート価格取得からDBに格納するまでのタイムを計測
	$time_start = microtime(true);

	//関数の読み込み
	require_once 'common.php';
	require_once 'xml_prc_to_arr.php';

	//DBに接続
	$pdo = connect();
	
	//--------------------------------------
	//カート価格のXMLを取得
	//--------------------------------------
	require 'GetCompetitivePricingForASINSample.php';
	
	//--------------------------------------
	//XMLからカート価格を連想配列に格納
	//--------------------------------------
	$array=[];//初期化
	$array=xml_prc_to_arr($dom);
	
	//--------------------------------------
	//DBに格納
	//--------------------------------------
	foreach($array as $key=>$value){
	
		//ASIN
		$ASIN = $key;
		
		//カート価格
		$LandedPrice = $array[$key]['LandedPrice'];
		
		//DBにASINが無ければ新規追加。有れば各項目を更新。
		$pdo->query("INSERT INTO asins (ASIN,LandedPrice) VALUES
		 ('$ASIN',$LandedPrice) ON DUPLICATE KEY
		 	 UPDATE LandedPrice=\"$LandedPrice\"");
	}
	
	//カート価格取得からDBに格納するまでのタイムを計測
	$time = microtime(true) - $time_start;
	echo "カート価格取得からDBに格納するまでのタイム:{$time} 秒<br>";
}
?>

カート価格のXMLを取得

GetCompetitivePricingForASINSample.php
<?php
/*******************************************************************************
 * Copyright 2009-2018 Amazon Services. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 *
 * You may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at: http://aws.amazon.com/apache2.0
 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the 
 * specific language governing permissions and limitations under the License.
 *******************************************************************************
 * PHP Version 5
 * @category Amazon
 * @package  Marketplace Web Service Products
 * @version  2011-10-01
 * Library Version: 2017-03-22
 * Generated: Thu Oct 11 10:46:02 PDT 2018
 */

/**
 * Get Competitive Pricing For ASIN Sample
 */

require_once('.config.inc.php');

/************************************************************************
 * Instantiate Implementation of MarketplaceWebServiceProducts
 *
 * AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY constants
 * are defined in the .config.inc.php located in the same
 * directory as this sample
 ***********************************************************************/
// More endpoints are listed in the MWS Developer Guide
// North America:
//$serviceUrl = "https://mws.amazonservices.com/Products/2011-10-01";
// Europe
//$serviceUrl = "https://mws-eu.amazonservices.com/Products/2011-10-01";
// Japan
$serviceUrl = "https://mws.amazonservices.jp/Products/2011-10-01";
// China
//$serviceUrl = "https://mws.amazonservices.com.cn/Products/2011-10-01";


 $config = array (
   'ServiceURL' => $serviceUrl,
   'ProxyHost' => null,
   'ProxyPort' => -1,
   'ProxyUsername' => null,
   'ProxyPassword' => null,
   'MaxErrorRetry' => 3,
 );

 $service = new MarketplaceWebServiceProducts_Client(
        AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY,
        APPLICATION_NAME,
        APPLICATION_VERSION,
        $config);

/************************************************************************
 * Uncomment to try out Mock Service that simulates MarketplaceWebServiceProducts
 * responses without calling MarketplaceWebServiceProducts service.
 *
 * Responses are loaded from local XML files. You can tweak XML files to
 * experiment with various outputs during development
 *
 * XML files available under MarketplaceWebServiceProducts/Mock tree
 *
 ***********************************************************************/
 // $service = new MarketplaceWebServiceProducts_Mock();

/************************************************************************
 * Setup request parameters and uncomment invoke to try out
 * sample for Get Competitive Pricing For ASIN Action
 ***********************************************************************/
 // @TODO: set request. Action can be passed as MarketplaceWebServiceProducts_Model_GetCompetitivePricingForASIN
 $request = new MarketplaceWebServiceProducts_Model_GetCompetitivePricingForASINRequest();
 $request->setSellerId(MERCHANT_ID);
 
 $request->setMarketplaceId(MARKETPLACE_ID);
 $asinList = new MarketplaceWebServiceProducts_Model_ASINListType();
 $asinList->setASIN( $input_asin );
 $request->setAsinList($asinList); 
 
 
 // object or array of parameters
 $dom=invokeGetCompetitivePricingForASIN($service, $request);

XMLからカート価格を連想配列に格納

<code>xml_prc_to_arr.php</code>
<?php
//-------------------------------------------------------------
// XMLからカート価格を抜き出して連想配列に格納する。
//-------------------------------------------------------------
function xml_prc_to_arr($dom){

	//配列の初期化
	$array=[];

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

	//入力した分ループ処理
	for ($i=0; $i<$statusList->length; $i++){

		//パスを設定
		$root = $dom->getElementsByTagName('GetCompetitivePricingForASINResult')->item($i);

		//ASIN
		$node = $root->getElementsByTagName("ASIN")->item(0);
		if (! $node == NULL ){
			$ASIN = $root->getElementsByTagName("ASIN")->item(0)->nodeValue;
		}else{
			$ASIN = '';	
		}
		
		//ASINが取得できたら処理
		if ( $ASIN ){
			//商品情報を取得
			$node = $root->getElementsByTagName("CompetitivePricing")->item(0);
			if (! $node == NULL ){
				
				//パスを設定
				$rt2 = $root->getElementsByTagName("CompetitivePricing")->item(0);
				
				//カート価格
				$node = $rt2->getElementsByTagName("LandedPrice")->item(0);
				if (! is_null($node)){
					$rt3 = $rt2->getElementsByTagName("LandedPrice")->item(0);
					$LandedPrice = $rt3->getElementsByTagName("Amount")->item(0)->nodeValue;
				}else{
					$LandedPrice = '0';
				}
				
				//連想配列に格納
				$array["$ASIN"] = array("LandedPrice"=>$LandedPrice);
				
				//デバッグ用
				echo "SUCCESS ASIN:" . $ASIN . "<br>";
				
			}
		}else{
			//デバッグ用
			echo "ERROR ASIN:" . $ASIN . "<br>";
		}
	}
	//作成した連想配列を戻す。
	return($array);
}
?>

DBに商品情報を格納

add_prd_to_db.php
<?php
//--------------------------------------------
// XMLから商品名、画像URLを抜き出してDBに格納
//--------------------------------------------
function add_prd_to_db($input_asin){

	//商品名、画像URL取得からDBに格納するまでのタイムを計測
	$time_start = microtime(true);

	//関数の読み込み
	require_once 'common.php';
	require_once 'xml_prd_to_arr.php';
	
	//DBに接続
	$pdo = connect();

	//--------------------------------------
	//商品名、画像URLのXMLを取得
	//--------------------------------------
	require 'GetMatchingProductForIdSample.php';
	
	//--------------------------------------
	//XMLから商品名、画像URLを連想配列に格納
	//--------------------------------------
	$array=[];//初期化
	$array=xml_prd_to_arr($dom);

	//--------------------------------------
	//DBに格納
	//--------------------------------------
	foreach($array as $key=>$value){
	
		//ASIN
		$ASIN = $key;
		
		//商品画像
		$URL = $array[$key]['URL'];
		
		//商品名
		$Title = $array[$key]['Title'];
		
		//特殊文字を置換しないとDBに登録されない
		$Title = str_replace(array("'"), "\'", $Title);
		
		//DBにASINが無ければ新規追加。有れば各項目を更新。
		$pdo->query("INSERT INTO asins (ASIN,URL,Title) VALUES
			 ('$ASIN','$URL','$Title') ON DUPLICATE KEY
			 	 UPDATE URL='$URL', Title='$Title'");
	}
	
	//商品名、画像URL取得からDBに格納するまでのタイムを計測
	$time = microtime(true) - $time_start;
	echo "商品名、画像URL取得からDBに格納するまでのタイム:{$time} 秒<br>";
}
?>

商品名、画像URLのXMLを取得

GetMatchingProductForIdSample.php
<?php
/*******************************************************************************
 * Copyright 2009-2018 Amazon Services. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 *
 * You may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at: http://aws.amazon.com/apache2.0
 * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the 
 * specific language governing permissions and limitations under the License.
 *******************************************************************************
 * PHP Version 5
 * @category Amazon
 * @package  Marketplace Web Service Products
 * @version  2011-10-01
 * Library Version: 2017-03-22
 * Generated: Thu Oct 11 10:46:02 PDT 2018
 */

/**
 * Get Matching Product For Id Sample
 */

require_once('.config.inc.php');

/************************************************************************
 * Instantiate Implementation of MarketplaceWebServiceProducts
 *
 * AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY constants
 * are defined in the .config.inc.php located in the same
 * directory as this sample
 ***********************************************************************/
// More endpoints are listed in the MWS Developer Guide
// North America:
//$serviceUrl = "https://mws.amazonservices.com/Products/2011-10-01";
// Europe
//$serviceUrl = "https://mws-eu.amazonservices.com/Products/2011-10-01";
// Japan
$serviceUrl = "https://mws.amazonservices.jp/Products/2011-10-01";
// China
//$serviceUrl = "https://mws.amazonservices.com.cn/Products/2011-10-01";


 $config = array (
   'ServiceURL' => $serviceUrl,
   'ProxyHost' => null,
   'ProxyPort' => -1,
   'ProxyUsername' => null,
   'ProxyPassword' => null,
   'MaxErrorRetry' => 3,
 );

 $service = new MarketplaceWebServiceProducts_Client(
        AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY,
        APPLICATION_NAME,
        APPLICATION_VERSION,
        $config);

/************************************************************************
 * Uncomment to try out Mock Service that simulates MarketplaceWebServiceProducts
 * responses without calling MarketplaceWebServiceProducts service.
 *
 * Responses are loaded from local XML files. You can tweak XML files to
 * experiment with various outputs during development
 *
 * XML files available under MarketplaceWebServiceProducts/Mock tree
 *
 ***********************************************************************/
 // $service = new MarketplaceWebServiceProducts_Mock();

/************************************************************************
 * Setup request parameters and uncomment invoke to try out
 * sample for Get Matching Product For Id Action
 ***********************************************************************/
 // @TODO: set request. Action can be passed as MarketplaceWebServiceProducts_Model_GetMatchingProductForId
 $request = new MarketplaceWebServiceProducts_Model_GetMatchingProductForIdRequest();
 $request->setSellerId(MERCHANT_ID);
 
 $request->setMarketplaceId(MARKETPLACE_ID);
 $request->setIdType("ASIN");
 $asinList = new MarketplaceWebServiceProducts_Model_IdListType();
 $asinList->setId( $input_asin );
 $request->setIdList($asinList);
 
 // object or array of parameters
 $dom=invokeGetMatchingProductForId($service, $request);

XMLから商品名、画像URLを連想配列に格納

xml_prd_to_arr.php
<?php
//-------------------------------------------------------------
// XMLから商品名、商品画像URLを抜き出して連想配列に格納する。
//-------------------------------------------------------------
function xml_prd_to_arr($dom){

	//配列の初期化
	$array=[];

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

	//入力した分ループ処理
	for ($i=0; $i<$statusList->length; $i++){

		//パスを設定
		$root = $dom->getElementsByTagName('GetMatchingProductForIdResult')->item($i);

		//ASIN
		$node = $root->getElementsByTagName("ASIN")->item(0);
		if (! $node == NULL ){
			$ASIN = $root->getElementsByTagName("ASIN")->item(0)->nodeValue;
		}else{
			$ASIN = '';
		}

		//ASINが取得できたら処理
		if ( $ASIN ){

			//商品情報を取得
			$node = $root->getElementsByTagName("AttributeSets")->item(0);
			if (! $node == NULL ){
				
				//パスを設定
				$rt2 = $root->getElementsByTagName("AttributeSets")->item(0);
			
				//商品画像
				$node = $rt2->getElementsByTagName("URL")->item(0);
				if (! $node == NULL ){
					$URL = $rt2->getElementsByTagName("URL")->item(0)->nodeValue;
				}else{
					$URL = '';
				}	
				
				//商品名
				$node = $rt2->getElementsByTagName("Title")->item(0);
				if (! is_null($node) ){
					$Title = $rt2->getElementsByTagName("Title")->item(0)->nodeValue;
				}else{
					$Title = '';
				}	
				
				//連想配列に格納
				$array["$ASIN"] = array("URL"=>$URL, "Title"=>$Title);
				
				//デバッグ用
				echo "SUCCESS ASIN:" . $ASIN . "<br>";
			
			}
		}else{
			//デバッグ用
			echo "ERROR ASIN:" . $ASIN . "<br>";
		}
	}
	//作成した連想配列を戻す。
	return($array);
}
?>

MWSオペレーション関数

mws_func.php
<?php
  function invokeGetCompetitivePricingForASIN(MarketplaceWebServiceProducts_Interface $service, $request)
  {
      try {
        $response = $service->GetCompetitivePricingForASIN($request);

        //echo ("Service Response\n");
        //echo ("=============================================================================\n");

        $dom = new DOMDocument();
        $dom->loadXML($response->toXML());
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
        //echo $dom->saveXML();
        //echo("ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n");

     } catch (MarketplaceWebServiceProducts_Exception $ex) {
        //echo("Caught Exception: " . $ex->getMessage() . "\n");
        //echo("Response Status Code: " . $ex->getStatusCode() . "\n");
        //echo("Error Code: " . $ex->getErrorCode() . "\n");
        //echo("Error Type: " . $ex->getErrorType() . "\n");
        //echo("Request ID: " . $ex->getRequestId() . "\n");
        //echo("XML: " . $ex->getXML() . "\n");
        //echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n");
     }
     return $dom;
 }
 
 
 function invokeGetMatchingProductForId(MarketplaceWebServiceProducts_Interface $service, $request)
  {
      try {
        $response = $service->GetMatchingProductForId($request);

        //echo ("Service Response\n");
        //echo ("=============================================================================\n");

        $dom = new DOMDocument();
        $dom->loadXML($response->toXML());
        $dom->preserveWhiteSpace = false;
        $dom->formatOutput = true;
        //echo $dom->saveXML();
        //echo("ResponseHeaderMetadata: " . $response->getResponseHeaderMetadata() . "\n");

     } catch (MarketplaceWebServiceProducts_Exception $ex) {
        //echo("Caught Exception: " . $ex->getMessage() . "\n");
        //echo("Response Status Code: " . $ex->getStatusCode() . "\n");
        //echo("Error Code: " . $ex->getErrorCode() . "\n");
        //echo("Error Type: " . $ex->getErrorType() . "\n");
        //echo("Request ID: " . $ex->getRequestId() . "\n");
        //echo("XML: " . $ex->getXML() . "\n");
        //echo("ResponseHeaderMetadata: " . $ex->getResponseHeaderMetadata() . "\n");
     }
     return $dom;
 }
?>

登録したDBの内容を画面に表示1

index.php
<?php
  require 'common.php';
  $pdo = connect();
  $st = $pdo->query("SELECT * FROM asins");
  $asins = $st->fetchAll();
  require 't_index.php';
?>

登録したDBの内容を画面に表示2

t_index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>商品一覧</title>
</head>
<body>
<table border="1">
<div class="base">
  <a href="t_add.php">新規追加</a>
  <?php echo "合計:" . count($asins) ?>
</div>

<tr><th>商品画像</th><th>ASIN</th><th>商品名</th><th>カート価格</th><th>処理</th></tr>
  <?php $cnt=0 ?>
  <?php foreach ($asins as $g) { ?>
    <!-- <?php //if ($cnt > 30 ){break;} ?> -->
    <tr>
      <td>
        <p class="asins"><img src= <?php echo $g['URL'] ?> /></p>
      </td>
      <td>
        <p class="asins"><?php echo $g['ASIN'] ?></p>
      </td>
      <td>
        <p class="asins"><?php echo $g['Title'] ?></p>
      </td>
      <td>
        <p><?php echo $g['LandedPrice'] ?> 円</p>
      </td>
      <td>
        <p><a href="delete.php?ASIN=<?php echo $g['ASIN'] ?>" onclick="return confirm('削除してよろしいですか?')">削除</a></p>
      </td>
    </tr>
    <?php $cnt++ ?>
  <?php } ?>
</table>
</body>
</html>

共通

common.php
<?php
  function connect() {
	$dsn = "mysql:dbname=amz;host=localhost;charset=utf8;";
	return new PDO($dsn, "root");
  }
?>

はあはあ、これで終わりかと。

いや、数が多い(笑)

 

ワテ

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


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

カメ吉

コメントを残す

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

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