PEAR :: Package :: Services_Amazon を使って レビュ−を microformats の hReview フォーマットで書き出す(前編)

タイトルが長くなってしまいましたがエントリも長いです。しかし。やるコトは非常に簡単。これでお手軽アフェリエイター。ただ。どうしても各説明が冗長になってしまうので(自分の文章力が足りないだけ)前編と後編に分けて説明します。やるコトはタイトルまんま。

PEAR に Services_Amazon と云うとても素晴らしいライブラリがあります。
Services_Amazon
簡単に説明すると「ECS から情報を取得する為に必要なリクエスト URL を組み立てたり XML をパースしたりを全部やってくれる」もの。

まずはライブラリのインストール。まだ beta なので PEAR の設定を変更。

% pear config-set preferred_state beta

後述しますが依存関係のライブラリも使用するので下記の様に -a オプションを付けると同時にインストールされます。

% pear install -a Services_Amazon

と。作業の前に「Amazon Web サービス使用許諾条件」を読みましょう。長いですがしっかり読む。注意すべき点を要約すると以下。

・1秒間に1度しかサービスを呼び出してはいけない
・価格や配送可能時期を表示する場合は1時間以内に更新しなくてはいけない

そんな訳で1秒以内に複数のリクエストがあったらユーザ毎に優先順位をつけて1秒毎後に順番に表示させるプログラムを作らなければいけないのですがこの程度のブログ規模では Services_Amazon のキャッシュ機能を使った方が簡単。

これらを踏まえて取り敢えず ASIN / ISBN コードを入力して商品情報を取得するプログラムを組んでみる。

<?php
// 設定
define("subscriptionId", "自分の Access Key");
define("associateId", "自分のアソシエイト ID");
$amazoncode = "ASIN / ISBN コード";

require_once("Services/AmazonECS4.php");
require_once("Cache.php");
$amazon = new Services_AmazonECS4(subscriptionId, associateId);
$amazon->setLocale("JP");
$amazon->setCache("file", array("cache_dir"=>"cache/"));
$amazon->setCacheExpire(3600);
$option = array(
    "ResponseGroup"=>"ItemAttributes,Images,OfferFull,Similarities"
);

$result = $amazon->ItemLookup($amazoncode, $option);
if(PEAR::isError($result)) {
    $result = "error";
} else {
    mb_convert_variables("EUC-JP", "UTF-8", $result);
    $result = $result['Item'][0];
}
print_r($result);

?>

途中の setCache の設定は「1時間以内であればキャッシュされたデータを使う」。最後の方の mb_convert_variables は取得するデータは UTF-8 なので自分の環境に合わせてテキトーに変更。元々 UTF-8 ならいらない。たったこれだけで Amazon から商品データが取得出来ました。次は必要なデータだけ取って好みの表示形式に合わせるだけ。後編につづく。