今日は、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のみ使えません・・・ なぜかというと、シークレットキーを公開してしまうと 規約違反になるからで・・・作って半年で終了なんて
|
| << 前記事(2009/05/19) | トップへ | 後記事(2009/05/21)>> |
| タイトル (本文) | ブログ名/日時 |
|---|---|
Product Advertising API にJavaScriptで対応する
[を] アマゾンAPIを使うのに2009年8月15日から認証が必要になるらしいというニュースから一ヶ月。なんとかJavaScriptでのシグニチャ生成と、Ajaxの&... ...続きを見る |
Harmonia!! 2009/06/11 01:26 |
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2009/05/19) | トップへ | 後記事(2009/05/21)>> |