AWS に PHP からリクエストを送信できる環境を整える

SPECIAL

Amazon Web Services (AWS) を利用するためのアクセスキーを取得したので、それを用いて PHP から Amazon Product Advertising API にリクエストを送ってみました。


Amazon Product Advertising API

Amazon Web Services のアクセスキーを取得する で、Amazon Product Advertising API で使用する Amazon Web Services (AWS) のアクセスキーを取得したので、それを用いて PHP からリクエストを送信できるよう、環境を整えてみたいと思います。

ちなみに先日 EZ-NET: Amazon Web Services への手動でのリクエストに失敗する で記したように、Amazon が公開している AWS Getting Started Guide に従って手動でリクエストを送信してみたら InternalError で上手くいかなかったのですけど、今回のようにプログラムでリクエストを送信してみたところ、問題なく結果を取得することができました。

 

PEAR をインストールする

今回は "Services_Amazon" という PEAR パッケージを利用して、PHP から Amazon Product Advertising API を利用してみたいと思います。

ここでは、既に PEAR が利用できるという前提で話を進めて行きます。PEAR を利用できる環境を整える方法については、EZ-NET: Linux の使い方 PHP ライブラリ提供サービス PEAR を利用できるようにする (CentOS 5.5) を参考にしてみてください。

 

平成 23 年 1 月 30 日現在、"Services_Amazon" ライブラリは、次のようにしてインストールすることができるようになっていました。

pear install -a Services_Amazon-beta

このようにすることで、"Service_Amazon" パッケージと合わせて、それが依存するパッケージもいくつかあわせてインストールされました。

ちなみに、この PEAR::Services_Amazon の使い方については Class: Services_Amazon ページで公開されているようです。

 

PEAR::Services_Amazon でリクエストを送信してみる

インストールした PEAR::Services_Amazon ライブラリーを使用して、Amazon Product Advertising API にリクエストを送信してみたいと思います。

例えば次のような PHP ページを作成して、リクエストを送信してみます。

<html>

 

<head>

<meta content="text/html; charset=utf-8" http-equiv="Content-Type">

<meta content="ja" http-equiv="Content-Language">

</head>

 

<body>

 

<?php

 

require_once('Services/Amazon.php');

 

define('APA_ACCESS_KEY', 'xxxxxxxxxxxx');

define('APA_SECRET_KEY', 'xxxxxxxxxxxx');

 

$amazon = new Services_Amazon(APA_ACCESS_KEY, APA_SECRET_KEY);

$amazon->setLocale('JP'); $amazon->setVersion('2010-11-01');

 

$result = $amazon->ItemSearch('Books', array('Keywords' => 'Amazon API'));

 

print_r($result);

?>

 

</body>

 

</html>

このようにすることで、Amazon Product Advertising API から結果を貰うことができました。

$result には、Amazon Product Advertising API から返された XML データが、階層化されて格納されているので、例えば $result['Item'][0]['ASIN'] といった感じで、XML の内容から必要な箇所が読み取れるようになっていました。

 

取得した結果がエラーかどうかを確認する

PEAR::Services_Amazon で取得した結果がエラーかどうかは "PEAR::isError" メソッドを使用して判定することができるようになっています。

エラーの場合は "Services_Amazon::getError" や "Services_Amazon::getErrors" を用いてその理由を取得できるようになっているので、次のようなコードで、エラー処理を行うことが可能です。

if (PEAR::isError($result))

{

// リクエストが失敗した場合の処理です。

$error = $amazon->getError($result);

 

echo $error['Code'];

echo $error['message'];

}

else

{

// リクエストが成功した場合の処理です。

}