ぱんぶろ

パンジーの「いいね!」ブログ

「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ④-リクエストURLの作成(PHP)と結果(XML)の確認-

      2016/03/30  

amazon_api_23

前回はリクエストURLを作成する手順の概要を説明しました。
(⇒「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ③-リクエストURL作成の概要-

今回は実際にPHPでプログラミングしていきましょう!
動かしてみた方が理解も早いですもんね。

スポンサード リンク

リクエストURLをPHPで作成

前回説明した手順通りにプログラミングしてみます。
PHPで書いていきます。

では、ソースの全体像を!

<!DOCTYPE html>
<html lang="ja">
<head>
<title>Amazon APIテスト</title>
<meta charset="utf-8">
</head>

<body>

<?php

//Enter your IDs
define("Associate_tag", "*****"); // アソシエイトタグ
define("Access_Key_ID", "******************"); // アクセスキー
define("Secret_Access_Key", "**************************************"); // シークレットキー

ItemSearch("All", "アナと雪の女王");

//Set up the operation in the request
function ItemSearch($SearchIndex, $Keywords){

	$baseurl = "http://webservices.amazon.com/onca/xml";

	// リクエストのパラメータ作成
	$params = array();
	$params["Service"]			= "AWSECommerceService";
	$params["AWSAccessKeyId"]	= Access_Key_ID;
	$params["Version"]			= "2013-08-01";
	$params["Operation"]		= "ItemSearch";
	$params["SearchIndex"]		= $SearchIndex;
	$params["Keywords"]			= $Keywords;
	$params["AssociateTag"]		= Associate_tag;
	$params["ResponseGroup"]	= "ItemAttributes,Offers";
	
	/* 0.元となるリクエスト */
	$base_request = "";
	foreach ($params as $k => $v) {
	    $base_request .= "&" . $k . "=" . $v;
	}
	$base_request = $baseurl . "?" . substr($base_request, 1);
	echo "【0.元となるリクエスト】<br>" . $base_request . "<br>";
	
	/* 1.タイムスタンプを付ける */
	$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
	$base_request .= "&Timestamp=" . $params['Timestamp'];
	echo "【1.タイムスタンプを付ける】<br>" . $base_request . "<br>";

	/* 2.「RFC 3986」形式でエンコーディング */
	$base_request = "";
	foreach ($params as $k => $v) {
	    $base_request .= '&' . $k . '=' . rawurlencode($v);
	    $params[$k] = rawurlencode($v);
	}
	$base_request = $baseurl . "?" . substr($base_request, 1);
	echo "【2.「RFC 3986」形式でエンコーディング】<br>" . $base_request . "<br>";
	
	/* 3.「&」とか消して改行 */
	$base_request = preg_replace("/.*\?/", "", $base_request);
	$base_request = str_replace("&", "\n", $base_request);
	
	echo "【3.「&」とか消して改行】<br>" . $base_request . "<br>";
	
	/* 4.パラメーター名で昇順ソート */
	ksort($params);
	
	$base_request = "";
	foreach ($params as $k => $v) {
	    $base_request .= "&" . $k . "=" . $v;
	}
	$base_request = substr($base_request, 1);
	$base_request = str_replace("&", "\n", $base_request);
	echo "【4.パラメーター名で昇順ソート】<br>" . $base_request . "<br>";
	
	/* 5.もう一度「&」でつなぐ */
	$base_request = str_replace("\n", "&", $base_request);
	echo "【5.もう一度「&」でつなぐ】<br>" . $base_request . "<br>";
	
	/* 6.3行を頭に追加 */
	$parsed_url = parse_url($baseurl);
	$base_request = "GET\n" . $parsed_url['host'] . "\n" . $parsed_url['path'] . "\n" . $base_request;
	
	//$base_request = "GET\nwebservices.amazon.com\n/onca/xml\n" . $base_request;
	echo "【6.3行を頭に追加】<br>" . $base_request . "<br>";
	
	/* 7.よく分からんエンコーディング */
	$signature = base64_encode(hash_hmac('sha256', $base_request, Secret_Access_Key, true));
	$signature = rawurlencode($signature);
	echo "【7.よく分からんエンコーディング】<br>" . $signature . "<br>";
	
	/* 8.「Signature」として最後に追加 */
	$base_request = "";
	foreach ($params as $k => $v) {
	    $base_request .= "&" . $k . "=" . $v;
	}
	$base_request = $baseurl . "?" . substr($base_request, 1) . "&Signature=" . $signature;
	echo "【8.「Signature」として最後に追加】<br>" . $base_request . "<br>";
	
	echo "<a href=\"" . $base_request . "\" target=\"_blank\">結果</a>";
}

?>

</body>
</html>

13行目~15行目のアスタリスク(*)で書かれた部分、

  • アソシエイトタグ
  • アクセスキー
  • シークレットキー

を自分のものを入力してもらえれば、実行できるはずです!
アソシエイトタグの取得方法は、第一回(⇒「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ①-アソシエイトID(タグ)登録編-)で、
アクセスキーとシークレットキーは第二回(⇒「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ②-アクセスキーとシークレットキーの取得-)で

それぞれ説明しています。

あと、PHPプログラムの動作確認になりますので、
環境がない方は、XAMPPとかでローカル開発環境を用意すると良いかと思います。
超簡単!PHPプログラムをローカルで動作確認するための環境構築方法

一応概要と同じ手順で作っています。

コメントにある、「0.元となるリクエスト」とかは、
第3回の「リクエストURL作成の概要」と紐づく形になっています。
(⇒「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ③-リクエストURL作成の概要-

プログラムとしてはかなり無駄な部分が多いですけどね・・・。

どういう処理を行っているかは、
第3回のリクエストURL作成の概要と見比べていただければと思います。

17行目でキーワード変更

今回は詳しい中身を説明しませんが、
ItemSearch関数の引数で、商品のキーワードを設定しています。

上のソースでは、わたしが好きな「アナと雪の女王」をキーワードにしてますが、
任意に変更しても良いので好きなやつにしてもらってかまいません。

リクエストの結果を確認してみる

上のプログラムを実行すると、
書くフェーズでできる値(文字列)と、
一番下に結果というリンクが表示されるかと思います。

こんな感じ。
amazon_api_25

「結果」リンクをクリックしてもらうと、
Amazonへリクエストが送られ、結果を返してくれるようになります。

では、押してみましょう!

すると、以下のような感じの結果が返ってくるはずです。
amazon_api_26

これはXML形式のファイルで、
商品に関する様々な情報が書かれています。

このようにAmazonの結果は、XML形式で返ってきます。
もちろんそもままでは扱えないので、
プログラムで分解してあげて、分かりやすい形に変換してあげる必要がありますね。

それはまた次回に説明します!

今回は、Amazonからの結果はXML形式で返ってくることだけを覚えておいてください。

まとめ

リクエストURLの作成(PHP)と結果(XML)の確認でした。
まぁ、リクエストURLの作成と言っても、コードを貼っただけですが・・・。

次回は、Amazonから返ってきたXMLファイルを読み取って、
わかりやすい形に変換して表示させてみましょう!

第1回:アソシエイトタグの取得
第2回:アクセスキーとシークレットキーの取得
第3回:リクエストURL作成の概要
第4回:リクエストURLの作成(PHP)と結果(XML)の確認-
第5回:リクエスト結果(XML)の表示
第6回:パラメーターの種類とか
最終回:実際に作ってみよう