「Amazon API」の使い方!④-リクエストURLの作成(PHP)と結果(XML)の確認編-

amazon_api_23

前回はリクエストURLを作成する手順の概要を説明しました。
(→ リクエストURL作成の概要

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

リクエストURLをPHPで作成

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

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


header( "Content-type: text/html; charset=utf-8" );

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

$baseurl = "http://ecs.amazonaws.jp/onca/xml";

/* リクエストのパラメータ作成 */
$params = array();
$params["Service"]        = "AWSECommerceService";
$params["AWSAccessKeyId"] = Access_Key_ID;
$params["Version"]        = "2013-09-01";
$params["Operation"]      = "ItemSearch";
$params["SearchIndex"]    = "All";
$params["Keywords"]       = "アナと雪の女王";
$params["AssociateTag"]   = Associate_tag;
$params["ResponseGroup"]  = "Large";

/* 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><br>";

/* 1.タイムスタンプを付ける */
$params["Timestamp"] = gmdate( "Y-m-d\TH:i:s\Z" );
$base_request .= "&Timestamp=" . $params["Timestamp"];
echo "【1.タイムスタンプを付ける】<br>" . $base_request . "<br><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><br>";

/* 3.「&」とか消して改行 */
$base_request = preg_replace( "/.*\?/", "", $base_request );
$base_request = str_replace( "&", "\n", $base_request );
echo "【3.「&」とか消して改行】<br>" . $base_request . "<br><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><br>";

/* 5.もう一度「&」でつなぐ */
$base_request = str_replace( "\n", "&", $base_request );
echo "【5.もう一度「&」でつなぐ】<br>" . $base_request . "<br><br>";

/* 6.3行を頭に追加 */
$parsed_url = parse_url( $baseurl );
$base_request = "GET\n" . $parsed_url["host"] . "\n" . $parsed_url["path"] . "\n" . $base_request;
echo "【6.3行を頭に追加】<br>" . $base_request . "<br><br>";

/* 7.よく分からんエンコーディング */
$signature = base64_encode( hash_hmac( "sha256", $base_request, Secret_Access_Key, true ) );
$signature = rawurlencode( $signature );
echo "【7.よく分からんエンコーディング】<br>" . $signature . "<br><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><br>";

echo "<a href=\"" . $base_request . "\" target=\"_blank\">XML結果</a><br>";

アスタリスク(*)で書かれた部分、

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

を自分のものを入力してもらえれば、実行できるはずです!
アソシエイトタグの取得方法は、第一回(→ アソシエイトID(タグ)登録編)で、
アクセスキーとシークレットキーは第二回(→ アクセスキーとシークレットキーの取得)で

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

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

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

コメントにある、「0.元となるリクエスト」とかは、
第3回の「リクエストURL作成の概要」と紐づく形になっています。
(→ リクエストURL作成の概要

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

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

キーワードは任意に変更してください

$params["Keywords"] = "アナと雪の女王";で、商品のキーワードを設定しています。

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

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

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

こんな感じ。
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回:パラメーターの種類とか
最終回:実際に作ってみよう