Amazon Product Advertising API
を使ってASINから商品画像を取得した時の雑なメモ
手順
- パラメータ設定 REST リクエストの構造
- 署名認証 RESTリクエストの認証方法
- URL組み立ててリクエスト
- Xmlパース
<?php
//ASIN
$asin = 'B013PUTPHK';
//アクセスキー
$access_key_id = '';
//シークレットキー
$secret_access_key = '';
//アソシエイトタグ
$associateTag = '';
//APIエンドポイントURL
$endpoint = 'http://ecs.amazonaws.jp/onca/xml';
// パラメータ
$params = array(
//共通↓
'Service' => 'AWSECommerceService',
'AWSAccessKeyId' => $access_key_id,
'AssociateTag' => $associateTag,
//リクエストにより変更↓
'Operation' => 'ItemLookup',
'ItemId' => $asin,
'ResponseGroup' => 'ItemAttributes,Images',
//署名用タイムスタンプ
'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
);
//パラメータと値のペアをバイト順?で並べかえ。
ksort($params);
//RFC 3986?でURLエンコード
$string_request = str_replace(
array('+', '%7E'),
array('%20', '~'),
http_build_query($params)
);
//URL分解
$parse_url = parse_url($endpoint);
//署名対象のリクエスト文字列を作成。
$string_signature = "GET\n{$parse_url["host"]}\n{$parse_url["path"]}\n$string_request";
//RFC2104準拠のHMAC-SHA256ハッシュ化しbase64エンコード(これがsignatureとなる)
$signature = base64_encode(hash_hmac('sha256', $string_signature, $secret_access_key,true));
//URL組み立て
$url = $endpoint . '?' . $string_request . '&Signature=' . $signature;
// xml取得
$xml = simplexml_load_string(getHttpContent($url));
$item = $xml->Items->Item;
echo "画像URL:".$item->LargeImage->URL."\n";
function getHttpContent($url)
{
try {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
curl_close($ch);
if (CURLE_OK !== $errno) {
throw new RuntimeException($error, $errno);
}
return $body;
} catch (Exception $e) {
echo $e->getMessage();
}
}