ネコと趣味の日記

アクセスカウンタ

help リーダーに追加 RSS AWS対応完了

<<   作成日時 : 2009/05/20 16:55   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 1 / トラックバック 1 / コメント 0

今日は、AWS対応完了について

先日、対応に苦戦していましたが
なんとか、対応のめどが立ちました


ちなみに、Delphiのみでの対応は
HMAC-SHA256に関するユニットが
ないため、こちらのJavaScriptで
利用できるHMAC-SHA256ユニットを
使用して、HTMLファイルを作成し、
それをソフト側から操作して署名を
作成することにしました。


AWSディスカッションボードのほうにも
書かれていますが、近々デベロッパー
ガイドの日本語参考訳が公開される
ようです

しかし、現状まだ情報が少ないため
以下私がハマった点も含めてRESTでの
利用手順を書いていきたいと思います。


例:ISBNによるItemLookUp

1.従来のRESTのURLからパラメータを
 取り出す


http://xml-jp.amznxslt.com/onca/xml?Service=
AWSECommerceService&AWSAccessKeyId=XXXXXXXXXXX&
Version=2008-08-19&Operation=ItemLookup&IdType=ISBN&
ItemId=9780000000000&SearchIndex=Books&ResponseGroup=
ItemAttributes&ContentType=text/xml


以上のRESTのURLから、以下のように
パラメータを取り出します。


Service=AWSECommerceService&
AWSAccessKeyId=XXXXXXXXXXX&
Version=2008-08-19&
Operation=ItemLookup&
IdType=ISBN&
ItemId=9780000000000&
SearchIndex=Books&
ResponseGroup=ItemAttributes&
ContentType=text/xml


2.TimeStampを作成します。(GMTなため
 日本時間から-9時間した値です)


Timestamp=2009-05-20T09%3A45%3A14Z&

*注意*
「:」は、URLエンコードする必要があるため
「%3A」に変換します。


3.TimeStampと同じようにパラメータ中の
 「.」や「/」もURLエンコードします。


4.パラメータをAから順に並べます。
 ちなみに小文字のパラメータがある場合は
 大文字のパラメータを並べ替えた後にAから
 順に並べます。


AWSAccessKeyId=XXXXXXXXXXX&
ContentType=text%2Fxml&
IdType=ISBN&
ItemId=9780000000000&
Operation=ItemLookup&
ResponseGroup=ItemAttributes&
SearchIndex=Books&
Service=AWSECommerceService&
Timestamp=2009-05-20T09%3A45%3A14Z&
Version=2008-08-19


同じ文字の場合は次の文字のAから順に
並べます。


5.完成したパラメータを再つなげて一行にします。
 (改行などは入れないでください)


6.以下の3行を先頭に追加します。

GET
ecs.amazonaws.jp
/onca/xml


*注意*
Amazonのサンプルによると日本は
ecs.amazonaws.jpらしいです。


7.以下の文字列をHMAC-SHA256で暗号化
 します。


GET(改行)
ecs.amazonaws.jp(改行)
/onca/xml(改行)
AWSAccessKeyId=XXXXXXXXXXX&ContentType=
text%2Fxml&IdType=ISBN&ItemId=9780000000000
&Operation=ItemLookup&ResponseGroup=Item
Attributes&SearchIndex=Books&Service=AWS
ECommerceService&Timestamp=2009-05-20
T09%3A45%3A14Z&Version=2008-08-19


*注意*
(改行)以外のところは改行しません。
要するに全部で4行になります。
暗号化する際は(改行)は改行コード
「\n」になります。


8.暗号化したものをBASE64エンコードして
 「+」や「=」や「/」をURLエンコードします。


7のものをシークレットキー「1234567890」で
暗号化した場合は

i8h%2BiZhgAOyOT1EA9xF9brAa2nH29fdexDmWum0X74M%3D
になります。

9.先ほどの1行にしたパラメーターに
 Signature=8で作ったキーを追加ます。


10.通常のREST URLを作成します。

http://ecs.amazonaws.jp/onca/xml?
AWSAccessKeyId=XXXXXXXXXXX&ContentType=
text%2Fxml&IdType=ISBN&ItemId=9780000000000
&Operation=ItemLookup&ResponseGroup=Item
Attributes&SearchIndex=Books&Service=AWS
ECommerceService&Timestamp=2009-05-20
T09%3A45%3A14Z&Version=2008-08-19
&Signature=i8h%2BiZhgAOyOT1EA9xF9brAa
2nH29fdexDmWum0X74M%3D


以上で完了です

私がハマった点をいくつか書くと、暗号化して
作った署名が大幅に違うとHTTP400 正しくない
要求エラーが帰ってきます。


あと、署名が合わないというエラーが帰ってくる
場合は、パラメータのURLエンコードし忘れを
疑ってみたほうがいいかもしれません。


ちなみに、テスト用にSignatureを作成するソフトを
作りましたので、困っている人は使ってみては

ダウンロードはこちら
EncodeURLに5でつなげたパラメーターを入れて、SecretKeyに
取得した暗号化キーを入れてConvertボタンを押すと
テキストボックスにSignatureが返ってきます。
また、Calculateボタンを押すとTimeStampが計算できます。


ちなみに、テスト用なのでエラーとか出るかもしれませんが
責任はとれませんのでご注意を


Amazonのデベロッパーマニュアルで疑問点があるの
ですが、パラメーターをアルファベット順ではなく
Byte Value順という意味がよくわかりません・・・


結局アルファベット順で通るのですが

とりあえず、問題はクリアしたので、後はソフトへの
実装だけで済みます。助かった



↓独り言↓
JavaScriptのみで構築したAmazon・楽天商品検索は
8/16以降Amazonのみ使えません・・・
なぜかというと、シークレットキーを公開してしまうと
規約違反になるからで・・・作って半年で終了なんて

設定テーマ

関連テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 1
なるほど(納得、参考になった、ヘー)

トラックバック(1件)

タイトル (本文) ブログ名/日時
Product Advertising API にJavaScriptで対応する
 [を] アマゾンAPIを使うのに2009年8月15日から認証が必要になるらしいというニュースから一ヶ月。なんとかJavaScriptでのシグニチャ生成と、Ajaxの&... ...続きを見る
Harmonia!!
2009/06/11 01:26

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文

広告

AWS対応完了 ネコと趣味の日記/BIGLOBEウェブリブログ