ppBlog Warning: LINE 112 of amazon_associate.php: file_get_contents(http: //ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=AKIAIAAAF5TNOKUT32PA&AssociateTag=ppblog-22&ItemId=B000NJFUNU&Operation=ItemLookup&ResponseGroup=Medium%2CReviews&Service=AWSECommerceService&Timestamp=2024-10-10T22%3A39%3A36Z&Version=2009-06-01&Signature=S33guXKjfXZu8mVfkCsqbngbpGsnWlo1xOxU%2Fh2csY0%3D)

アマゾンのProduct Advertising APIに対応させる

アマゾンのProduct Advertising APIに対応させる

category-icon

 こんばんは。2009年8月15日からアマゾンのリンク作成用API(Product Advertising API, 旧称:AmazonアソシエイトWebサービス)が署名認証を含まないリクエストを一切処理しなくなりました。この影響で、ppBlogでの既存のアマゾンタグやアマゾン検索が動かなくなっています。なので、それに対応させるための書き換えを遂行しました。

 具体的な処理の流れは、もやし日記LinkIMHOLink が大変参考になりました。アマゾンサイトにある説明Link を一度読んで理解できる人はそういないだろうなぁ。

 このアマゾンのProduct Advertising APIですが、PHPのみで対応させるとなるとサーバー環境によっては実装が難しいかもしれません。基本的には、PHP5の環境でないと気軽に動きません。今や、PHP4の公式サポートも終了し、多くのレンタルサーバーではPHP5を提供していると思うので、さほど問題になることはないかも、とは思いますが。

 どうしてPHP5が必要かというと、アマゾンのこのサービスは、sha256Wアルゴリズムのハッシュを生成する必要があるからです。PHP5なら、hash_hmac関数Link が使えます。じゃ、PHP4な環境ではどうするか?もし、PHP4の環境でmhashライブラリーを組み込んでいるならOKです。このmhashライブラリー、非ウィンドウズなサーバー環境なら、最初から実装している気はします。ちなみに、自分のノートに構築したWindows下のXAMPPG環境では、mhashはデフォルトでは有効でなかったです(libmhash.dllを有効にすれば良いんでしょうけど)。

 この部分の処理は以下のようにしています。

 /* 
      PHP4でsha256ハッシュを生成するための処理。mhashが必須。
      RFC 2104 HMAC implementation for php.
      source:: http://www.php.net/manual/en/function.mhash.php
 */
if(!function_exists('hash_hmac')){ // hash_hmac()関数はPHP4にはない
 if(function_exists('mhash')){
  function sha256($data = ''){
   return bin2hex(mhash(MHASH_SHA256, $data));
  }
 } else $out .= '<p class="alert">mhashライブラリーのサポートがないようです。サーバーの管理者にお問い合わせを。</p>';

 function hash_hmac($algo, $key, $data, $raw_output = FALSE){
  $b = 64; // byte length for sha256
  if(strlen($key) > $b){
   $key = pack("H*", $algo($key));
  }
  $key  = str_pad($key, $b, chr(0x00));
  $ipad = str_pad('', $b, chr(0x36)); $ipad ^= $key;
  $opad = str_pad('', $b, chr(0x5c)); $opad ^= $key;
  $hmac = $algo($opad . pack("H*", $algo($ipad . $data)));
  if($raw_output){
   return pack("H*", $hmac);
  } else return $hmac;
 }
}

 ppBlog独自の既存のアマゾンタグを修正しないといけないかなぁという懸念もあったのですが(そうすると過去のログを修正する必要がある)、その必要なかったです:) この新しいAPIに対応させるには、これから添付するamazon_associate.phpmodules/amazon.inc.phputils.phpとで既存のやつを上書きすれば良いです。その後、管理画面の「各種ツール」→「アマゾンアソシエイト」で、新たに取得したアクセスキーとシークレットキーなどの設定をします。最初は、「変数が設定されていないよー」といったppBlog Noticeが出るかもしれませんが、設定をすすめていけばOKです。そのスクリーンショットを載せときますね。

amazonAPI
規定のジャンルの指定も出来るようにしてます。

 この画面にもあるように、従来のアソシエイトタグ(ppblog-22とか。トラッキングID)だけでは、もはや動きません。アマゾンAPIを利用されたい方は、アマゾンのサイトLink で、このAPIを利用するための2つのキーを入手して下さい。

 ちなみに、この新しいAPIに対応したデモサイトを作りました。基本的には、amazon_associate.phpでやってる処理と同じです。

 →Amazon Product Advertising APIのデモ http://p2b.jp/demo/aws.phpLink

 動作確認も兼ねて、この記事でアマゾンの商品を紹介しておきます。Nespressoのエスプレッソマシーンは、日本にいるときも使っていたのですが、フランスに来て暫くして、よりコンパクトなこれを買いました。ユーロだと安かったなぁ。使っているのはワインレッド色のやつですが。カプセル方式は、楽チンで良いです。

— posted by martin at 02:22 am   commentComment [0]  pingTrackBack [0]

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~

     
T: Y: ALL: Online:
Created in 0.7953 sec.
prev
2024.10
next
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31