AmazonアソシエイトWebサービス(AWS)がProduct Advertising APIに変更になるのにあたり、リクエストに署名を付ける必要が生じます。Product Advertising APIへの完全移行まで2ヶ月を切ったので、そろそろ署名に対応しようと思いました。
私の運営しているWebサイトでAWSを利用しています。私のWebサイトはPHPで開発しています。AWSへのリクエストはfile_get_contents()で行い、SAXパーサでレスポンスを分解、処理しています。既存のロジックを変更しなくてもいいように、file_get_contents()に渡すURLを署名付きのURLに変換する関数を作ってみました。
define ('SECRET_KEY', 'みなさんの秘密鍵');
function SignAWSRequest($url) {
$purl = parse_url($url);
$scheme = $purl['scheme'];
$host = $purl['host'];
$path = $purl['path'];
$query = $purl['query'];
parse_str($query, $pquery);
$pquery['Timestamp'] = gmdate("Y-m-d")."T".gmdate("H:i:s")."Z";
ksort($pquery);
$querystring = '';
$keys = array_keys($pquery);
for ($i = 0;$i < count($keys);$i++) {
if ($i != 0) $querystring .= '&';
$querystring .= $keys[$i] . "=" . rawurlencode($pquery[$keys[$i]]);
}
$sign = base64_encode( hash_hmac("sha256", "GET\n{$host}\n{$path}\n{$querystring}", SECRET_KEY, "TRUE"));
return "{$scheme}://{$host}{$path}?{$querystring}&Signature={$sign}";
}
PHPなので簡単ですね。もっとエレガントな書き方があるかもしれませんが、諸先輩方にアドバイスをいただけると助かります。
ただ気になるのは、署名付きのリクエストを送信すると、かなりの確率で403エラーが発生します。作りの問題なのかどうか調べているところです。どなたかご助言をいただけると助かります。
今話題のエコポイント対象商品の表示に対応!!
ポイント数も一目でわかります。
検索機能もご提供開始!!
よりタイムリーに激安掘り出し物情報をお届け!メルマガ「”あまたつ”のAmazon価格急落激安速報!」創刊しました!!
【メルマで購読】
【まぐまで購読】
Webサイトに新機能追加!
商品詳細情報のページを追加しました。
例えばこのようなページです。
商品の大きい画像や価格情報はもちろんのこと、商品に関連するWebページ、Yahooショッピング、Yahooオークション(ヤフオク)の情報も表示します。
今話題のエコポイント対象商品の表示に対応!!
ポイント数も一目でわかります。
検索機能もご提供開始!!
よりタイムリーに激安掘り出し物情報をお届け!メルマガ「”あまたつ”のAmazon価格急落激安速報!」創刊しました!!
【メルマで購読】
【まぐまで購読】
0 件のコメント:
コメントを投稿