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で教えてもらいました。それでもいいのかもしれないですね。

コメントを残す

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

CAPTCHA