理屈抜きでAmazon APIを動かしてみます。
「SNSに記事投稿できる」できる程度のPCスキルでも「ソースコードをコピペしてきた、実際にプログラムを動かす」
を体験してもらばと思います。
私自身プログラマーではありませんので、PHPプログラムの中身の全くわからず、この記事を書いています。
準備するもの
以下を準備します。
- アソシエイトタグ
- アクセスキー
- シークレットキー
- PHPの実行環境
アソシエイトタグの取得は以下の記事を参考にしてください。
アクセスキー、シークレットキーの取得は以下の記事参考にしてください。
PHPを使うので、開発環境を準備してください。
プログラムの完成形
Amazonで「並行輸入品」で検索した結果を返します。
コードは「manablog」さんのブログから拝借しました。
コード
index.php
<!DOCTYPE html> <html lang="ja"> <head> <title>Amazon APIを使って商品検索するサンプルコード</title> <meta charset="utf-8"> <!-- Bootstrap読み込み(スタイリングのため) --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css"> </head> <body> <?php // Amazon APIのアクセスキーとシークレットキーを入力 define("Access_Key_ID", "XXXXXXXXXXXXXXXXXXXXXXXXXX"); define("Secret_Access_Key", "XXXXXXXXXXXXXXXXXXXXXXXXXX"); // アソシエイトIDの入力 define("Associate_tag", "XXXXXXXXXXXXXXXXXXXXXXXXXX"); // 本のカテゴリから「並行輸入品」で検索 ItemSearch("Books", "並行輸入品"); //Set up the operation in the request function ItemSearch($SearchIndex, $Keywords){ // Amazon APIの仕様に沿ったリクエスト出力用のPHPスクリプト include("base_request.php"); $amazon_xml = simplexml_load_string(file_get_contents($base_request)); foreach($amazon_xml->Items->Item as $item) { $item_id = $item->ASIN; //ASIN $item_title = $item->ItemAttributes->Title; // 商品名 $item_author = $item->ItemAttributes->Author; // 著者 $item_publicationdate = $item->ItemAttributes->PublicationDate; // 発売日 $item_publisher = $item->ItemAttributes->Publisher; // 出版社 $item_url = $item->DetailPageURL; // 商品のURL $item_image = $item->LargeImage->URL; // 商品の画像 ?> <div class="container"> <div class="row"> <div class="col-xs-4 col-xs-offset-4"> <div class="col-xs-6"> <!-- 商品の画像を表示 --> <img class="img-responsive" src="<?php if (isset($item_image)) { echo $item_image; // サムネイル画像がある場合 } else { echo "http://bit.ly/29Ikwlm"; // サムネイル画像がない場合 } ?>"> </div> <div class="col-xs-6"> <ul> <!-- 商品情報をリストで表示 --> <li><a href="<?php echo $item_url; ?>"><?php echo $item_title; ?></a></li> <li><?php echo $item_author; ?></li> <li><?php echo $item_publicationdate; ?></li> <li><?php echo $item_publisher; ?>)</li> </ul> </div> </div> </div> </div> <?php } // foreach end } ?> </body> </html>
base_request.php
<?php $baseurl = "https://webservices.amazon.co.jp/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, Images"; $params["MinimumPrice"] = "100"; $params["ItemPage"] = "1"; $base_request = ""; foreach ($params as $k => $v) { $base_request .= "&" . $k . "=" . $v; } $base_request = $baseurl . "?" . substr($base_request, 1); $params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z"); $base_request .= "&Timestamp=" . $params['Timestamp']; $base_request = ""; foreach ($params as $k => $v) { $base_request .= '&' . $k . '=' . rawurlencode($v); $params[$k] = rawurlencode($v); } $base_request = $baseurl . "?" . substr($base_request, 1); $base_request = preg_replace("/.*\?/", "", $base_request); $base_request = str_replace("&", "\n", $base_request); 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); $base_request = str_replace("\n", "&", $base_request); $parsed_url = parse_url($baseurl); $base_request = "GET\n" . $parsed_url['host'] . "\n" . $parsed_url['path'] . "\n" . $base_request; $signature = base64_encode(hash_hmac('sha256', $base_request, Secret_Access_Key, true)); $signature = rawurlencode($signature); $base_request = ""; foreach ($params as $k => $v) { $base_request .= "&" . $k . "=" . $v; } $base_request = $baseurl . "?" . substr($base_request, 1) . "&Signature=" . $signature;
MAMPのフォルダにファイル配置
MAMPのフォルダにファイル配置します。
- index.php
- base_request.php
コードの修正
index.phpを開きます。
- アクセスキー
- シークレットキー
- アソシエイト
PHPの実行
ブラウザを開き、http://localhost でエンター
PHPが実行されました。