キャッシュを利用する
Services_Amazonは自動的なキャッシュ・メカニズムを備えています。キャッシュを利用すれば、同じ問い合わせを避けることができるので、そのサイズが小さいうちは、システムのレスポンスがよくなることを期待できます。
キャッシュを使うのは簡単です。Services_AmazonECS4のインスタンスを生成したときに、次のよう設定します(これによって、PHPファイルの場所にcacheというフォルダができ、その中にキャッシュのためのファイルが置かれます)。
$amazon->setCache('file',array('cache_dir'=>'cache/'));
$amazon->setCacheExpire(3600);//キャッシュを3600秒に設定
キャッシュの有効時間をあまり長くしすぎないように注意してください。特にアソシエイトサービスで、利用者に価格や発送可能時期を提示する場合には、情報は1時間に1回以上更新しなければならないことになっています(Amazon Webサービス(TM)カスタマー契約を参照)。
ショッピングカートを利用する
ここまでは、AWSのデータベースを単に利用するだけでした。独自のオンラインショッピングサイトを作ると、他にもさまざまな要素が必要になります。ショッピングカートもその一つです。カートを一から作るのはとても大変ですが、幸いなことに、AWSにはあらかじめカートの機能が用意されています。これを利用しましょう。ただし、AWSのカートに保存できる商品の数は50種類までです。また、利用者がAmazon.co.jpに持っているカートと一緒に使うことはできません。本稿執筆時点でこれが可能なのはAmazon.comだけです(Merging Local and Remote Shopping Carts)。
ショッピングカートを利用するには、登録IDだけではなくアソシエイトIDも必要です。アソシエイトIDも与えてServices_AmazonECS4のインスタンスを生成し直しましょう。
$amazon=&new Services_AmazonECS4($AWSAccessKeyId,$associateTag);
$amazon->setVersion('2008-06-23');
$amazon->setLocale('JP');
カートに商品を入れるには、商品のASINと数を連想配列でメソッドCartCreateに渡します。
$cart=$amazon->CartCreate(array('ASIN'=>'489100584X','Quantity'=>1));
メソッドの戻り値として、カートの情報を保持するオブジェクトが帰ってくるので、内容を確認してみましょう。
print_r($cart);//カートの情報を表示
ここでは次のような出力が得られます(見やすくするために改行を追加しています)。
Array (
[Request] => Array (略)
[CartId] => ●●●●●●●●●●
[HMAC] => ○○○○○○○○○○ 略
[PurchaseURL] => https://www.amazon.co.jp/gp/cart/aws-merge.html?cart-id=●●●●●●●●●●%26associate-id=■■■■■■■■■■%26hmac=○○○○○○○○○○%26SubscriptionId=1X4S9RASYEQ2Y34A7EG2%26MergeCart=False
[SubTotal] => Array (略)
[CartItems] => Array
( [SubTotal] => Array (略) [CartItem] => Array
(略
[ASIN] => 489100584X 略
[Title] => プログラムを作ろう!Microsoft Visual Web Developer 2008 Express Edition入門 (マイクロソフト公式解説書 Microsoft Visual Studi)
[ProductGroup] => Book
[Price] => Array (略)
[ItemTotal] => Array (略) )
)
)
重要なのは、カートを指定するためのCartIdと、カートへのアクセスが正当なものであることを示すHMAC(Hash Message Authentication Code)、アソシエイトIDです。カートにアクセスするためにはこの3つが揃っている必要があります。既に分かっているアソシエイトID以外は、カートの情報を保持するオブジェクトから抜き出しておかなければなりません。
$cartId=$cart['CartId']; $hmac=$cart['HMAC'];
PurchaseURLで指定されたURLにアクセスすれば、ここで作成したカートの中身を実際に購入することができます。
$purchaseUrl=$cart['PurchaseURL']; echo "<p><a href='$purchaseUrl'>購入はこちら</a></p>";
カートに商品を追加するには、メソッドCartAddを使います。
$amazon->CartAdd($cartId,$hmac,array('ASIN'=>'4627847319','Quantity'=>1));
カートの変更は、AWSのサービス側で行われるのであって、ここで先ほど取得したオブジェクトではないことに注意してください($cartは、カートの写しであって、カートそのものであはありません)。
現在のカードの状態を知りたいなら、もう一度写しを取らなければなりません(出力例には、見やすさのために改行を追加しています)。
$cart=$amazon->CartGet($cartId,$hmac); print_r($cart);
Array (略 [ASIN] => 4627847319 略 [Title] => 初級プログラマのためのWebアプリケーション構築入門 - 実践で学ぶJava,XHTML,SQL 略 [ASIN] => 489100584X 略 [Title] => プログラムを作ろう!Microsoft Visual Web Developer 2008 Express Edition入門 (マイクロソフト公式解説書 Microsoft Visual Studi) 略)
カートを空にするにはメソッドCartClearを使います。
$amazon->CartClear($cartId,$hmac);
カート自体を削除することはできません。使用されない状態のカートは、商品が入っているなら90日後、商品が入っていないなら7日後に削除されます(Shopping Cart Concepts)。
おわりに
Amazon Web Servicesを利用する2つの方法を紹介しました。
素朴にRESTを実行する方法と、PEAR Services_Amazonを利用する方法です。PEAR Services_Amazonは、RESTの面倒な部分をうまく隠蔽できているので、便利に使うことができるでしょう。自動的なキャッシュも備えています。素朴にRESTを使う方法が必要になることはあまりありませんが、この方法を知っているとPEAR Services_Amazonの仕組みが分かるので、問題が起こったときに、うまく対処できると思います。
