AmazonのAPIが変わって「Product Advertising API」というものになったらしい。
名前変わっただけか?と思ったんだけど、どうやらAPIへリクエストを出すときに「認証」する必要があるらしい。
RESTに関してPHPでちょっと作ってみたのでメモ。
ドキュメントURL http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/rest-signature.html
class Request
{
const AWS_ACCESS_KEY_ID = 'AWSのアクセスキー';
const AWS_SECRET_KEY_ID = 'AWSの秘密鍵 AWSに発行してもらうこと';
const AWS_END_POINT = 'ecs.amazonaws.jp';
const REQUEST_METHOD = 'GET';
const REQUEST_URI = '/onca/xml';
const HASH_ALGO = 'sha256';
public static function get_hashed_url( $url )
{
$url = $url . '&Timestamp=' . self::get_timestamp();
$ret = preg_match( '/^(.*?)\?/i', $url, $domains );
$ret = preg_match( '/\?(.*?)$/i', $url, $params );
$params[ 1 ] = str_replace( ':', '%3A', $params[ 1 ] );
$params[ 1 ] = str_replace( ',', '%2C', $params[ 1 ] );
$temp_request = $params[ 1 ];
$temp_params = explode( '&', $temp_request );
sort( $temp_params, SORT_STRING );
$request = self::REQUEST_METHOD . "\n";
$request .= self::AWS_END_POINT . "\n";
$request .= self::REQUEST_URI . "\n";
$request .= implode( '&', $temp_params );
$hash = base64_encode( hash_hmac( self::HASH_ALGO, $request, self::AWS_SECRET_KEY_ID, true ) );
$hash = urlEncode( $hash );
return $domains[ 1 ] . '?' . implode( '&', $temp_params ) . '&Signature=' . $hash;
}
private function get_timestamp()
{
return date( 'Y-m-d', gmmktime() ) . 'T' . date( 'H:i:s', gmmktime() ) . 'Z';
}
}
---
お知らせメールに
>we pay out hundreds of millions of dollars per year to websites that advertise our products.
とか書いちゃうところがすごいな。なかなかに大変みたい。