「PEAR::Services_AmazonのItemSearchでBrowseNodeを指定してランキング表示」を行うためには、元になるBroeseNodeを知る必要が有ります。トップレベルのBrowseNodeは、「Product Advertising API開発者ガイド (API Version 2010-09-01)」に記載されている他、様々なものが存在するようです。
PEAR::Services_AmazonのBrowseNodeLookupでBrowseNodeを指定して検索すると、指定したBrowseNodeの下層にあるBrowseNode一覧を取得出来ますので、Product Advertising API開発者ガイド (API Version 2010-09-01)」に記載されているトップレベルBrowseNodeを起点として、その下層にあるBrowseNodeを検索するプログラムを作成してみました。プログラムの実行結果は、下記のようになります。
BrowseNode List
| Electronics | Root [ 3210991 ] | - |
|---|---|---|
| 16462091 | カメラ | |
| 3477381 | テレビ・レコーダー | |
| 16462081 | オーディオ | |
| 3371411 | ポータブルオーディオ | |
| 124048011 | 家電 | |
| 3371421 | アクセサリ・サプライ | |
| 128187011 | 携帯電話 | |
| 2111178051 | カーナビ・カーAV | |
| 387483011 | 無線・トランシーバー | |
| 2313209051 | 商品延長保証 | |
末尾に実際のソースコードを添付いたしましたが、プログラムの概要としては以下のようなことを行いました。
- 「Services/Amazon.php」をインクルードファイルとして読み込む。
- 定数として、アクセスキー、シークレットアクセスキー、アソシエイトID、Amazon ECSのバージョン他を定義しました。Amazon ECSのバージョンは、最新の「2011-08-02」を使用することにしました。
- 変数として、PEAR::Services_AmazonのBrowseNodeLookupで使用するブラウズノードの他、カテゴリー配列などを定義しました。
- フォーム送信されてくるリクエストの処理を行いました。
- 定数として定義したアクセスキーID、シークレットアクセスキー、アソシエイトIDを使用して、Services_Amazonの呼び出しを行いました。
- 変数として定義したブラウズノードを使用して、Services_AmazonのBrowseNodeLookupを実行し、検索結果を配列に格納しました。
- 上記で検索結果を格納した配列から、For文のループで製品表示数分の検索結果を表示させました。今回、「WP exec PHP」プラグインの使用を前提にしましたので、echo文を使用して、表示部分のHTMLのみを出力させました。
以下に、実際のソースコードを添付いたします。
<?php
// インクルードファイル
require_once('Services/Amazon.php');
// 定数
define('ACCESSKEY_ID', 'xxxxxxxxxxxxxxxxxxxx');
define('SECRET_ACCESSKEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
define('ASSOCIATE_ID', 'xxxxxxxxxx-22');
define('ECS_VERSION','2011-08-02');
define('RESPONSE_GROUP','Small');
define('SCRIPT_TITLE','BrowseNode List');
// 変数
$category_array=array(// カテゴリー配列
array('index'=>'Apparel','name'=>'カテゴリーを選択してください','node'=>'361245011'),
array('index'=>'Apparel','name'=>'服&ファッション小物','node'=>'361245011'),
array('index'=>'Automotive','name'=>'カー&バイク用品','node'=>'2017305051'),
array('index'=>'Baby','name'=>'ベビー&マタニティ ','node'=>'344919011'),
array('index'=>'Beauty','name'=>'コスメ','node'=>'52391051'),
array('index'=>'Books','name'=>'和書','node'=>'465610'),
array('index'=>'Classical','name'=>'クラシック','node'=>'701040'),
array('index'=>'DVD','name'=>'DVD','node'=>'562002'),
array('index'=>'Electronics','name'=>'家電&カメラ','node'=>'3210991'),
array('index'=>'ForeignBooks','name'=>'洋書','node'=>'52231011'),
array('index'=>'Grocery','name'=>'食料品','node'=>'57240051'),
array('index'=>'HealthPersonalCare','name'=>'ヘルス&ビューティー','node'=>'161669011'),
array('index'=>'Jewelry','name'=>'ジュエリー','node'=>'85896051'),
array('index'=>'Kitchen','name'=>'ホーム&キッチン','node'=>'3839151'),
array('index'=>'Music','name'=>'音楽','node'=>'562032'),
array('index'=>'Shoes','name'=>'シューズ&バッグ','node'=>'2016927051'),
array('index'=>'Software','name'=>'PCソフト','node'=>'637630'),
array('index'=>'SportingGoods','name'=>'スポーツ&アウトドア','node'=>'14315361'),
array('index'=>'Toys','name'=>'おもちゃ','node'=>'13299551'),
array('index'=>'VHS','name'=>'VHS','node'=>'561972'),
array('index'=>'Video','name'=>'Video','node'=>'561972'),
array('index'=>'VideoGames','name'=>'TVゲーム','node'=>'637872'),
array('index'=>'Watches','name'=>'時計','node'=>'331952011'),
);
// カテゴリー配列初期値
$category_index='8'; // 配列のインデックス
$browse_node='3210991';// BrowseNodeId
$search_index='Electronics';// サーチインデックス
$name='';
// リクエストの処理
if(isset($_REQUEST['action'])){
if($_REQUEST['action']=='カテゴリー変更'){
if(isset($_REQUEST['category'])){
$category_index=htmlspecialchars($_REQUEST['category']);
}
$browse_node=$category_array[$category_index]['node'];
$search_index=$category_array[$category_index]['index'];
}else if($_REQUEST['action']=='list'){
if(isset($_REQUEST['category_index'])){
$category_index=htmlspecialchars($_REQUEST['category_index']);
}
if(isset($_REQUEST['browse_node'])){
$browse_node=htmlspecialchars($_REQUEST['browse_node']);
}
$search_index=$category_array[$category_index]['index'];
}else{
$category_index='1'; // 配列のインデックス
$browse_node='361245011';// BrowseNodeId
$search_index='Apparel';// サーチインデックス
}
}
// Services_Amazonの呼び出し
$amazon = new Services_Amazon(ACCESSKEY_ID,SECRET_ACCESSKEY,ASSOCIATE_ID);
$amazon->setLocale('JP');
//検索結果を配列に格納
$result = $amazon->BrowseNodeLookup($browse_node);
// フォームの表示
echo '<h3>'.SCRIPT_TITLE.'</h3>';
echo '<form action="">';
echo '<select name="category">';
$i=0;
foreach ($category_array as $category) {
if($i==$category_index){
echo '<option value="'.$i.'" selected>'.$category['name'];
}else{
echo '<option value="'.$i.'">'.$category['name'];
}
$i++;
}
echo '</select>';
echo '<input type="submit" name="action" value="カテゴリー変更">';
echo '</form>';
echo '<hr size="1" color="#cccccc" style="border-style:dashed">';
// 検索結果の表示
if (!PEAR::isError($result)) {
if(isset($result['BrowseNode']['Children']['BrowseNode'])){
$count_max=count($result['BrowseNode']['Children']['BrowseNode']);
echo '<table border="1" width="640" cellpadding="0" cellspacing="0">';
echo '<tbody>';
echo '<tr style="background-color:#cccccc;">';
echo '<th align="center">';
echo $search_index;
echo '</th>';
echo '<th align="center"> Root [ ';
echo $category_array[$category_index]['node'];
echo ' ]</th>';
echo '<th align="center">';
if(isset($_REQUEST['action'])){
echo '<form>';
echo '<input type=button value=" 戻 る " onClick="self.history.back()" style="WIDTH: 80px; HEIGHT: 30px">';
echo '</form>';
}else{
echo '-<br>';
}
echo '</th>';
echo '</tr>';
for( $i = 0; $i < $count_max; $i++ ) {
//データを変数に格納
$browse_node_id=$result['BrowseNode']['Children']['BrowseNode'][$i]['BrowseNodeId'];
$name=$result['BrowseNode']['Children']['BrowseNode'][$i]['Name'];
//データを表示
echo '<tr>';
echo '<td width="200" align="center">'.$browse_node_id.'</td>';
echo '<td width="300">'.$name.'</td>';
echo '<td align="center">';
echo '<form action="">';
echo '<input type="hidden" name="action" value="list">';
echo '<input type="hidden" name="browse_node" value="'.$browse_node_id.'">';
echo '<input type="hidden" name="category_index" value="'.$category_index.'">';
echo '<input type="hidden" name="name" value="'.$name.'">';
echo '<input type="submit" value="下層へ" style="WIDTH: 80px; HEIGHT: 30px">';
echo '</form>';
echo '</td>';
echo '<tr>';
}
echo '</tbody>';
echo '</table>';
}else{
echo '<table border="1" width="640" cellpadding="0" cellspacing="0">';
echo '<tbody>';
echo '<tr>';
echo '<th align="center">';
echo $search_index;
echo '</th>';
echo '<th align="center"> Root [ ';
echo $category_array[$category_index]['node'];
echo ' ]</th>';
echo '<th align="center">';
echo '<form>';
echo '<input type=button value=" 戻 る " onClick="self.history.back()" style="WIDTH: 80px; HEIGHT: 30px">';
echo '</form>';
echo '</th>';
echo '</tr>';
echo '<tr>';
echo '<td width="200" align="center">'.$browse_node.'</td>';
echo '<td width="300">'.$_REQUEST['name'].'</td>';
echo '<td align="center">---';
echo '</td>';
echo '</tr>';
echo '<tr><td colspan="3">下層にノードがありませんでした。</td></tr>';
echo '</tbody>';
echo '</table>';
}
}
?>
上記プログラムで検索して判明した「フルハイビジョン液晶テレビ」のBroeseNode「615940011」を使用して、「フルハイビジョン液晶テレビ」のランキングを表示すると、以下のようになります。
【 フルハイビジョン液晶テレビ 】ベスト 5

- 【東芝】
『TOSHIBA 32V型地上・BS・110度CSデジタル ハイビジョン液晶テレビREGZA 32AC4』
☆ ロープライス (無し) or 新品 ¥ 31,700

- 【パナソニック】
『Panasonic 32V型地上・BS・110度CSデジタルフルハイビジョン液晶テレビ TH-L32DT3』
☆ ロープライス (無し) or 新品 ¥ 53,460

- 【ソニー】
『SONY 3D対応地上・BS・110度CSデジタルハイビジョン液晶テレビ BRAVIA NX720シリーズ 40V型 KDL-40NX720』
☆ ロープライス (無し) or 新品 ¥ 65,460

- 【シャープ】
『SHARP AQUOS 40型 地上・BS・110度CSデジタルハイビジョン液晶テレビ LC-40E9』
☆ ロープライス (無し) or 新品 ¥ 50,800

- 【東芝】
『TOSHIBA 3D対応LED REGZA 32V型 地上・BS・110度CSデジタルフルハイビジョン液晶テレビ シアター3Dグラ…』
☆ ロープライス (無し) or 新品 ¥ 52,750
上記のプログラムは、Product Advertising APIを使用していますので、実際にプログラミングを実行するためには、【amazon アソシエイト】でユーザー登録を行って、AmazonのアソシエイトID、アクセスキーID、シークレットアクセスキーの入手が必要です。
Amazon.Oh!Happy.JPでは、『PEAR(PHPで利用する事ができるライブラリ)のServices_Amazonというライブラリを使用して作成した「Amazon アソシエイト Web サービス(Product Advertising API)のサンプルプログラム(Sample)」を簡単な解説記事(Article)とソースコード(Code)とともに紹介しています。』ので、ご興味のある方はご覧ください。















