ページへ戻る

− Links

 印刷 

Product Advertising API って一体・・・ :: XOOPS マニア

UsersWiki:nao-pon/blog/2009-05-09


RSS of nao-pon/blog[5]
2009 5月 9 (土)
 

Product Advertising API って一体・・・ anchor.png[6]

Tag: Amazon[7] プログラミング[8]

Amazon の Associates Web Service が Product Advertising API に名称変更になったとのこと。

名称変更だけならいいのだけど、今後のリクエストには認証が必要になり、プログラム変更を 8月15日 までに済ませなければ、いけないらしい。

これが、どのようにするのかよく分からない。

Amazon.com のアカウントは持っていたので、とりあえず秘密キーは作成した。

この先は、

  • (docs.amazonwebservices.com)

を見れば分かるらしいのだが、なんせ英語が分かんない。 :cry:

今日は、ここまで。


と思ったけど気になったので、ちょっと頑張ってみました。

とりあえず、PHP の hash_hmac() が使える環境 (PHP 5 >= 5.1.2, PECL hash >= 1.1) であれば、動作するようになりました。

肝は base64 でエンコードするところでしょうか。

$hash = base64_encode(hash_hmac('sha256' , $data, $key, TRUE));

あとは、hash_hmac() が使えない環境向けに代用関数を探すだけ。(これが大変かも :thinking: )
誰か知っていたら教えてください。 :shy:

Page Top

PHP での REST のまとめ anchor.png[9]

検索で、訪れてくれる人が多いようなので、簡単にまとめておきます。

  1. 何はともあれ、amazon.com のアカウントを取って、AWS から秘密キーを作成する。
  2. GETクエリの構築
    • 配列 $params にクエリキーをキーとして値が入っているとする
    • クエリに Timestamp を加える
      $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
    • クエリのキーを元に昇順ソートし、値を URL エンコードしてGETクエリを作成
      ksort($params);
      $querys = array();
      foreach($params as $key=>$val) {
          $querys[] = $key . '=' . rawurlencode($val);
      }
      $query = join ('&', $querys);
    • そのクエリと秘密キー($key)を元に Signature を作成
      1
      2
      3
      4
      5
      6
      7
      8
      
      $data = 'GET' . "\n" . 'webservices.amazon.co.jp' . "\n" . '/onca/xml' . "\n" . $query;
      if (function_exists('hash_hmac') && function_exists('hash_algos') && (in_array('sha256', hash_algos()))) {
          $signature = base64_encode(hash_hmac('sha256' , $data, $key, TRUE));
      } else if (function_exists('mhash') && defined('MHASH_SHA256')) {
          $signature = base64_encode(mhash(MHASH_SHA256 , $data, $key));
      } else {
          $signature = '';
      }
    • Signature が作成できれば、クエリに追加
      if ($signature) $query .= '&' . $signature;
  3. あとは、できあがった GETクエリで今まで通りにリクエスト

ざっと、こんな感じです。 :ok:

hash_hmac() も mhash() も使えない環境への対応は、代用関数が見つからないので、私の力量では無理です。 :-(



Last-modified: 2009-09-19 (土) 07:56:11 (JST) (5325d) by nao-pon