たつをの ChangeLog : 2009-05-09

「Amazon アソシエイト Web サービスの名称変更および署名認証についてのお知らせ」というメールが来ました。

追記: ほぼ同内容のものが Forumアソシ公式ブログにもありました。ただし Forum では15日ではなく16日となっています。)

さて、このたび、Amazon アソシエイト Web サービスの名称を、「Product Advertising API」と変更しましたことをお知らせいたします。この新名称は、開発者の皆様が Amazon サイトで販売されている商品の広告作成を行い、これによって Amazon より広告費を受け取るという、API の目的をより正しく表しています。
はいはい、了解しました。
「Product Advertising API」ですね。
PAAPI かな。パアピ!パアピ!

名称変更にともない、Product Advertising API にリクエストを送信いただく都度、認証のための電子署名を含めていただくことが必要になります。
なんだ、なんだ?
どうやら今までのような単純な使い方ができなくなるようです。
REST 的にアクセスする前に一仕事やらないといけないみたい。

以下、「開発者向けガイド」をざっと読んで理解した内容をまとめておきます。
私はまだ試していません。
勘違いで適当なこと書いてるかもしれません。
自己責任でよろしく。

準備


まず、今まで使っていた Access Key ID (例:022QF06E7MXBSH9DHM02) 以外に、Secret Access Key (例:kWcrlUX5JEDGM/LtmEENI/aVmYvHNif5zB+d9+ct) が必要になります。
(ref. Your AWS Identifies)

Secret Access Key は、 http://aws.amazon.com/ へ行って、
「Your Account」→「Access Identifiers」へ移動すると見ることができます。
(ref. Viewing Your AWS Identifiers)

アクセス


で、これを使って今までのように REST 的にアクセスする方法について。

(1) 今までのようにリクエストURLを作ります。Timestamp も付けます。
http://webservices.amazon.com/onca/xml?Service=AWSECommerceServic
e&AWSAccessKeyId=00000000000000000000&Operation=ItemLookup&ItemId
=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CRevi
ews&Version=2009-01-06&Timestamp=2009-01-01T12%3A00%3A00Z

(2) 「?」以降を「&」で分割(split)し、アルファベット順にソートし、また「&」でくっつけます。
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=I
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&
Version=2009-01-06

(3) そして下記のような4行からなる文字列にします。
GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=I
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&
Version=2009-01-06

(4) この文字列に
「RFC 2104-compliant HMAC with the SHA256 hash algorithm」
を適用します。キーは先ほどの Secret Access Key を使用。
キーとして 1234567890 を使うとこんな感じになるそう。
pwqYQRc3RepIrf7m+VMRy/jFXx/ZBSPsaSFFexIUoSI=
URL encode します。
pwqYQRc3RepIrf7m%2BVMRy%2FjFXx%2FZBSPsaSFFexIUoSI%3D

(5) これを Signature として、本来のリクエスト URL の末尾に付けます。
http://webservices.amazon.com/onca/xml?AWSAccessKeyId=00000000000
000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=It
emAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceServ
ice&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06&Signatu
re=pwqYQRc3RepIrf7m%2BVMRy%2FjFXx%2FZBSPsaSFFexIUoSI%3D

この URL でアクセスすれば今まで通りに使えるはず!
(ref. Authenticating REST Requests - Example REST Requests)

って、面倒そうだなあ、こりゃ。
日本の場合は、 http://webservices.amazon.com ではなく http://webservices.amazon.co.jp ですね、たぶん。
あと、「RFC 2104-compliant HMAC with the SHA256 hash algorithm」ってのはどうやれば一番楽なんだろう……。

切り替え期限は8月15日。
Amazon API を使って作った過去のサイト、ツール類に手を入れるのは一仕事だなあ。
この変更は、2009年5月11日より3ヶ月の間の移行期間の後、2009年8月15日には、Product Advertising API へ送信されるリクエストは全て認証されることとなり、認証されない場合、リクエストは処理されなくなります。

Perl でアクセス


Perl では Digest::SHA を使うと良さそう。
(サンキュー>id:yappo)

コード(行末の「\」は改行なしで続いていることを表す):
#!/usr/bin/perl
use strict;
use warnings;
use Digest::SHA qw(hmac_sha256_base64);
use URI::Escape;

my $data = q(GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=I\
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview\
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&\
Version=2009-01-06);

my $key = "1234567890";
my $signature = hmac_sha256_base64($data, $key);
$signature .= '=' while length($signature) % 4;
print "$signature\n";
print URI::Escape::uri_escape($signature), "\n";
実行結果:
Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=
Nace%2BU3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg%3D

ドキュメントによれば、正解は「pwqYQRc3RepIrf7m+VMRy/jFXx/ZBSPsaSFFexIUoSI=」だと思うんだけど、何かが違うなあ。
JAVA のサンプルコードを見ると、 HmacSHA256 というのを使ったあとで Base64 をかけてるだけみたいなんだけどなあ。何が違うんだろう。

追記090510: 実行結果に違うの貼っていたので直しました。
それでもサンプルとは違う。どうやらサンプルが間違っているようです。
see http://d.hatena.ne.jp/zorio/20090509/1241886502

追記090511: サンプルコードが直ってました。
あと、Perl では末尾に「=」を追加する処理がいるそうです。
前述のコードと実行結果を書き換えました。
URI/Amazon/APA.pm を参考にしました。
元のコードはウェブ魚拓をご覧ください。)

自分の ID でやってみたけど、認証 URL はアクセス失敗した。
って、サービス開始は5月11日からでした!ははは!
11日以降に改めて認証テストしてみます。

追記090511: 改めてやってみたらうまくいきました。
どうやら、失敗の原因は私が末尾「=」をつけてなかっただけみたいで、一昨日の段階からちゃんと動作していたみたいです。お騒がせしました。

関連リンク


随時追加。

- Amazon Product Advertising APIの認証の件 (zorioの日記)
http://d.hatena.ne.jp/zorio/20090509/1241886502
Ruby で試す。

- Amazon アソシエイト Web サービス改め Product Advertising API の電子署名について調べてみました (にーやんのブログ 2)
http://d.hatena.ne.jp/niiyan/20090509/1241884365
Python で試そうとする。

- perl - URI::Amazon::APA released! (404 Blog Not Found)
http://blog.livedoor.jp/dankogai/archives/51211577.html
専用 Perl モジュールのリリース

- Amazon Product Advertising API (Crayons)
http://ciel.fm/02110#k2110p1
文字数がmod 4で0になるまで=で埋めなくては (padding of Base64 Digests) いけないらしい。

相模湖ピクニックランドは経営破綻したかなにかで、現在は違う名前で再開しています。

- さがみ湖リゾート プレジャーフォレスト
http://www.sagamiko-resort.jp/

先日の帰省の折り[2009-05-04-2]
そのプレジャーフォレストの観覧車に乗って来ました。
実家の近所でありながら、ここの観覧車って今まで乗ったことがなかったのですよ。
観覧車

観覧車は山の頂上ゾーンにあって、リフトで上がります。
歩いても登れますが、ちょっと大変です。
リフト リフト

観覧車って、なんか楽しいですよね。
じわじわと上がっていくのが楽しいのです。
逆に下りはすごくさみしくなるのです。
観覧車 観覧車 観覧車

以下、上から撮った写真です。
一部もやっとなってる写真がありますが、ガラス越しに撮影したためです。

相模湖です。
相模湖

園内の様子。
プレジャーフォレスト

園内にあるキャンプ場です。
なんかドラクエに出てきそうな風景です。
プレジャーフォレスト


photos by :

Canon デジタル一眼レフカメラ EOS Kiss X2


TAMRON SP AF 17-50mm F2.8 Di II


TAMRON AF 70-300mm F4-5.6 Di LD MACRO 1:2


カクテルづいてる今日この頃。
コンビニでこんなのが売っていたので買って飲みました。
一気にごくごくと!

ザ・グラスカクテル

ファジーネーブルとカシスオレンジです。
きちんと調節されてるので、自分で作るよりも、非常においしいのです。
とくにカシスオレンジ。果汁が違うのかなあ。
うーん、おいしいんだけど、ちょっとくやしいのです!

- サントリー「ザ・グラスカクテル」3種新発売 2009.3.24
http://www.suntory.co.jp/news/2009/10378.html

なんと、本当は3種類あるのですね。
コンビニでは2種類しか売ってなかった!
ソルティドッグかあ。探してみます。

ref.
- ブロガーイベント「おうちカクテルワークショップ」に参加しました![2009-04-16-3]
- おうちでカクテルをいろいろ作ってみた![2009-04-29-1]
- アイスクリームにリキュールをかける![2009-05-07-1]

そういえば先日渋谷のブックオフに行ったときに1枚250円コーナーに Jamiroquai の「The Return of the Space Cowboy」があったので買いました。

Jamiroquai / The Return of the Space Cowboy


これで初期のアルバム(というよりも「250円コーナーにありそうなアルバム」)は揃いました。

1. Jamiroquai / Emergency on Planet Earth (1993)
2. Jamiroquai / The Return of the Space Cowboy (1994)
3. Jamiroquai / Travelling Without Moving (1996)
4. Jamiroquai / Synkronized (1999)
5. Jamiroquai / A Funk Odyssey (2001)

まあ、なんといいますか、今さらジャミロクワイ、というのがナウいのです!
わざわざ最新の音楽聴かなくてもいいじゃん。

…ウソです。てきとー。

ref.
- [を] 渋谷のブックオフで Jamiroquai[2008-08-15-1]

たつをの ChangeLog
Powered by chalow