塩焼きブログ

塩焼きに関しての研究内容を公開しています

2018年版 Amazon APIでPHPを使って商品を検索する

いろいろな情報があったが、シンプルな下記のコードでいけた。teratailを使って良い人に尊い教えをもらいながら最終的に自己解決しました。

$accessKey = "access";
$secretKey = "secret";
$associateTag =  "tag";
$endpoint = "webservices.amazon.co.jp";
$uri = "/onca/xml";

foreach ([
  "Service" => "AWSECommerceService",
  "Operation" => "ItemSearch",
  "AWSAccessKeyId" => $accessKey,
  "AssociateTag" => $associateTag,
  "SearchIndex" => "Apparel",
  "ResponseGroup" => "Images,ItemAttributes,Offers",
  "Keywords" => "ブラジャー",
  "Timestamp" => gmdate('Y-m-d\TH:i:s\Z')
] as $key => $value) {
  $params[rawurlencode($key)] = rawurlencode($value);
};

ksort($params);

$queries = [];
foreach ($params as $key => $value) {
  $queries[] = "$key=$value";
}

$queryString = join("&", $queries);
$signature = base64_encode(hash_hmac("sha256", join("\n", ["GET", $endpoint, $uri, $queryString]), $secretKey, true));

echo file_get_contents("https://$endpoint$uri?$queryString&Signature=" . rawurlencode($signature));

ちなみに、なんか昔はもうちょっと違うリクエストだったみたいなので、2018年と書いておきました。また仕様が変わるたびに、この記事に追記していきたいと思います。

それと、こういうのは外部ライブラリを使ったほうが良いとteratailで教えてもらいました。それでもいいのかもしれないですね。