前の記事で紹介した「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
| Apparel | Root [ 361245011 ] | -
|
|---|
| 2131417051 | メンズ | |
|
| 2131478051 | レディース | |
|
| 2131568051 | ボーイズ | |
|
| 2131590051 | ガールズ | |
|
| 345991011 | ベビー | |
|
| 2226725051 | スペシャリティアパレル | |
|
| 2247104051 | スポーツウェア | |
|
末尾に実際のソースコードを添付いたしましたが、プログラムの概要としては以下のようなことを行いました。
- 「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='1'; // 配列のインデックス
$browse_node='361245011';// BrowseNodeId
$search_index='Apparel';// サーチインデックス
$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」を使用して、前の記事で作成したプログラムで「フルハイビジョン液晶テレビ」のランキングを表示すると、以下のようになります。
上記のプログラムは、Product Advertising APIを使用していますので、実際にプログラミングを実行するためには、【amazon アソシエイト】でユーザー登録を行って、AmazonのアソシエイトID、アクセスキーID、シークレットアクセスキーの入手が必要です。