Amazon Webサービスを使ってみる。その1。

[ 1 ] 登録 〜 ためしにリクエストを送ってみる

Amazon Webサービス(Product Advertising API)を使ってみる。

まずは利用登録。以下のURLにアクセス。登録ページ自体は英語ですが、日本語のナビゲーションもあるので大丈夫。

  → Product Advertising API (Amazon公式|日本語)

アクセスキーIDと秘密鍵がもらえるので、これでAPIを使う準備は整いました。それからドキュメントをじっくり読む。大半が英語ですが、まぁ大丈夫。Webを検索するといろいろな解説ページもあるので、それを頼りにしながら頑張りましょう。

ワタクシはPHPを使って、日本のアマゾンにRESTリクエストを送信します。リクエストの大雑把なイメージは次のような感じ。

http://ecs.amazonaws.jp/onca/xml?
&Service=AWSECommercecService
&Operation=<オペレーション名>
&AWSAccessKeyId=<アクセスキーID>
&<パラメータ名>=<パラメータ値>
 ・
 ・
&Timestamp=<タイムスタンプ>
&Signature=<署名認証用の署名>

各パラメータを設定して、タイムスタンプと署名認証用の署名をつくって、パラメータ名をアルファベット順にソートして(上の例はソート前の状態)、http://ecs.amazonaws.jp/onca/xml に送信します。

必須のパラメータが何なのか、パラメータにどのような値を設定したら良いのかなどは公式ドキュメントや解説ページを読むとして、まず引っかかるのが「署名」の作成ですな。2009年の8月からは、リクエストに署名を含めることが必須になっています。
公式ページのドキュメントから引用すると...

Signature (署名) - (前略) Signatureパラメータはリクエストのタイプ、ドメイン、URLを使用して作成され、パラメータは、<parameter>=<value>& のフォーマットで記述されており、リクエスト内の各パラメータの文字列の順に並べられています(Signatureパラメータ本体以外)。正しい仕様に なっていれば、AWS秘密キーを元にbase64エンコードのHMAC-SHA256署名が作成されます。(後略)

自分が送信したいリクエストに則して、自分で暗号化して正しい署名を作成してリクエストに付加しなさいよ、そうしないと正しいリクエストとして認められませんよ...ということですね。

うん、やるべき作業内容はわかるんだが、具体的にどんなコードを書けば良いのかさっぱりわからん。と、こんなときは先人のリソースを使わせていただこう。

  → Product Advertising APIへの対応 (PHP版)|もやし日記
  → Product Advertising API での署名認証するPHPソース|公式開発者フォーラム

さてさて無事にSignatureも生成できたら、リクエスト送信。
PHPだったら file_get_contents という便利な関数があります。

<?php
  $url = http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=<アクセスキーID>&....&Signature=<署名> ;

  $result = file_get_contents( $url );
?>

リクエストが正しければ、$resultにリクエスト結果(XML)が戻ります。あとは利用ガイドラインに則した範囲で、ゲットしたデータを煮るなり焼くなり。

カテゴリ: