amazon web services が署名が必要になって、名前も amazon Product Advertising API とかなってたので、コードを変更しなきゃと思ってサンプルページ見たけど、途中に描かれている値が間違っているみたいだ…。
サンプルリクエストに署名を行うためのステップ 【amazonヘルプ】 の、Version=2009-03-31
という文字列が、正しくは Version=2009-01-06
みたいです。
下記のサイトを参考にしました。下記のページだと、ヘルプページと最終出力は同じなのに、入力値が違う!って気づいたので、合わせてみたらちゃんと出来ました。
- アマゾンのProduct Advertising APIにRubyでアクセス: ふと思う–ちょっと考える (いたずら編)
- Amazon Product Advertising APIの認証の件 – zorioの日記
require 'hmac/sha2'
require 'base64'
def genreate_hash(original_url)
url_string = original_url.split('&').sort.join('&')
string = ['GET', 'webservices.amazon.com', '/onca/xml', url_string].join("\n")
Base64.encode64(HMAC::SHA256.digest('1234567890', string))
end
上記で original_url
を
"Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Version=2009-01-06&Timestamp=2009-01-01T12%3A00%3A00Z"
とすれば、
Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=\n
が出力されます。
なお、サンプル通りの文字列でやると、url_string
が
"Service=AWSECommerceService&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Version=2009-03-31&Timestamp=2009-01-01T12%3A00%3A00Z"
となって、
EDWJ1+VXQhAtPDKQ0f+wpaFQcBVDJyTIpDP7BZgxMiA=\n
が出力されます。