as3でAmazon Web Service APIを使ってみる

| コメント(2) | トラックバック(0)
今年の8月位から(?)、Amazon Web Service APIの仕様が変更になり、リクエスト時のパラメータにHMAC-SHA256署名を追加する事が必須となりました。
その辺も含めて、as3でAmazon Web Service APIを利用する手順をまとめてみます。

まずは、署名を作成するに当たって、AWSの本家サイトにてアクセス用のアカウントを作成します。右上の Create an AWS Account から作成可能です。

次に、APIへのアクセスIDと認証アクセスキーを確認します。
Your Account - Security Credential ページの真ん中あたりに、Access Key IDとSecret Access Keyが確認できます。(アクセスキーが一つも無い場合には、同箇所のCreate a New access Keyのリンクからアクセスキーを作成します。)
これらを使って、認証を行い、アマゾンAPIを利用します。

とりあえず、今回はAPIへアクセスしてリストを取得し、取得したリストの上位3つを表示するサンプルを作ってみました。
AwsApiTest.zip
※Access Key ID、Secret Access Keyは空にしてありますので、DL後にAWSApiTest.asを編集して設定してください。

以下の部分がAmazonAPIへのリクエストの生成部分です。

// Amazon APIより取得したいリストに応じてパラメータを設定
var query:String = "AWSAccessKeyId=" + access_key_id + "&"
+ "BrowseNode=" + browse_node + "&"
+ "Operation=ItemSearch&"
+ "Page=1&"
+ "ResponseGroup=Large&"
+ "SearchIndex=" + search_index + "&"
+ "Service=AWSECommerceService&"
+ "Sort=salesrank" + "&"
+ "Timestamp=" + escape(timestamp) + "&"
+ "Version=" + "2009-02-01";

// 署名の生成
var signatureText:String =
["GET", requestUri, requestPath, query].join("\n");
var signature:String =
makeSignature(signatureText, secret_access_key);

// 署名をクエリの最後に追加
query += "&Signature="
+ signature.replace(/\+/g,'%2B').replace('=', '%3D');

// リクエストURLの完成
var requestUrl:String =
"http://" + requestUri + requestPath + "?" + query;


流れとしては
  1. 取得したいリストに応じた検索用パラメータ(GET値)を作成
  2. アクセス先URL、検索用パラメータ、Secret Access Keyを使って署名を作成
  3. 署名をパラメータの一つとして末尾に追加
  4. アマゾンURL+検索用パラメータでアクセス!
となります。

注意すべきは検索用パラメータの順番で、
  • AWSAccessKeyIdが一番最初
  • それ以外の検索用パラメータはアルファベット順
  • Signatureは一番最後
という順番で指定しないとうまく動かないようです。

また、HMAC-SHA256署名の方法に関しましては、E.E. -Evening Emerald-様の記事を参考にさせていただきました。上記サイトで署名を行う方法についてとても詳しく書かれていますので、ここでは割愛します。
(余談部分のイベントハンドラへの複数パラメータ渡しがとてもステキでした。ぜひご覧下さい。)
尚、署名用のアルゴリズムとしてas3crypto (derived from the RSA Data * Security, Inc. MD5 Message-Digest Algorithm)を使用しています。

最近、忙しさに負けてなかなか更新出来てなかった分、書きたい内容は山のようにつもり積もっていますので、頑張って吐き出していきたいと思います。

トラックバック(0)

トラックバックURL: http://www.1010real.com/mt/mt-tb.cgi/8

コメント(2)

夜分遅くに失礼します!
ASでAWSの利用する方法を探していたところ、どストライクな内容を見つけ、感動したのでコメントさせてください。
めちゃめちゃ助かりました!
ほんとうにありがとうございましたー!

コメントする