【PHP】Amazon Product Advertising APIでアソシエイトリンクを自動生成
ドリリウムは移転しました。
約5秒後に自動的にリダイレクトします。
Amazon Product Advertising APIに関する簡単な解説が見つからなかったので、超シンプルなサンプルと合わせて以下のポイントを解説します。
- キーワードで商品検索
- 検索結果の件数をチェック
- アソシエイトリンクの取得
- 商品画像URLの取得
- アソシエイトリンク(検索結果画面)の取得
利用登録と認証情報の取得
まずはじめに、Product Advertising APIを利用するWebサイトでAmazonアソシエイトが利用できるようにサイトを登録する必要があります。
メニューの「ツール」から「Product Advertising API」を選択し、認証情報を取得するのですが・・・既に取得済みで新規取得時の画面がわかりません。
特に難しい点もなく取得できるはずです。
APIを使おうとしてここでつまづくことはなさそうなので、ここの手順はスキップします。
使い方
基本的に全部コピペ+必要な情報だけ置き換えてもらえれば動きます。
<?php
$access_key_id = "アクセスキーID";
$secret_key = "シークレットキー";
$endpoint = "webservices.amazon.co.jp";
$uri = "/onca/xml";
$keyword = "探したい商品のキーワード";
$params = array(
"Service" => "AWSECommerceService",
"Operation" => "ItemSearch",
"AWSAccessKeyId" => $access_key_id,
"AssociateTag" => "アソシエイトID",
"SearchIndex" => "All", //商品カテゴリー
"Keywords" => $keyword, //先ほど指定したキーワード
"ResponseGroup" => "Images,ItemAttributes,Offers" //取得するデータ
);
if (!isset($params["Timestamp"])) {
$params["Timestamp"] = gmdate('Y-m-d\TH:i:s\Z');
}
ksort($params);
$pairs = array();
foreach ($params as $key => $value) {
array_push($pairs, rawurlencode($key)."=".rawurlencode($value));
}
$canonical_query_string = join("&", $pairs);
$string_to_sign = "GET\n".$endpoint."\n".$uri."\n".$canonical_query_string;
$signature = base64_encode(hash_hmac("sha256", $string_to_sign, $secret_key, true));
$request_url = 'https://'.$endpoint.$uri.'?'.$canonical_query_string.'&Signature='.rawurlencode($signature);
//データの取得
$data = file_get_contents($request_url);
if($data !== false){
$xml = simplexml_load_string($data);
if($xml->Items->TotalResults == 0){
$affiliateUrl = $xml->Items->MoreSearchResultsUrl;
}else{
$affiliateUrl = $xml->Items->Item[0]->DetailPageURL;
}
}
?>
前3分の2くらいは必要なパラメータの準備です。
商品カテゴリーは後述します。取得するデータは多様なので公式ページに任せます。基本的にこの3点で十分だと思います。
最終的に$request_urlにリクエストURLがセットされますので、file_get_contentsでデータを取得します。取得したデータはXML形式なのでsimplexml_load_stringで読み取り、処理をします。
$xml->Items->TotalResultsには検索結果の件数が格納されています。
検索結果がある場合には1件目の商品が$xml->Items->Item[0]、2件目の商品が$xml->Items->Item[1]と言う風に参照することができます。
上の例では、検索結果があれば該当商品のアフィリエイトURL(DetailPageURL)を取得し、検索結果がなければキーワードの検索結果画面のアフィリエイトURL(MoreSearchResultsUrl)を取得しています。
取得した全商品について処理をする場合には、以下のようにループさせて1件ずつ参照することができます。
foreach($xml->Items as $item){
echo $item->DetailPageURL;
}
取得するXMLを直接確認するのが手っ取り早いですが、よく使いそうな項目をまとめておきます。
よく使う要素
項目 | 参照方法 | データの例 |
---|---|---|
検索結果件数 | $xml->Items->TotalResults | 1 |
検索結果画面URL | $xml->Items->MoreSearchResultsUrl | https://… |
ASIN | $xml->Items->$item[0]->ASIN | A00AB0000A |
商品ページURL | $xml->Items->$item[0]->DetailPageURL | https://… |
商品画像URL(小) | $xml->Items->$item[0]->SmallImage->URL | https://… |
商品画像URL(中) | $xml->Items->$item[0]->MediumImage->URL | https://… |
商品画像URL(大) | $xml->Items->$item[0]->LargeImage->URL | https://… |
メーカー | $xml->Items->$item[0]->ItemAttributes->Manufacturer | SONY |
定価 | $xml->Items->$item[0]->ItemAttributes->ListPrice->Amount | 5000 |
商品名 | $xml->Items->$item[0]->ItemAttributes->Title | ハンディカム |
販売価格 | $xml->Items->$item[0]->OfferSummary->LowestNewPrice->Amount | 3000 |
商品カテゴリー
All | Jewelry |
---|---|
Apparel | KindleStore |
Appliances | Kitchen |
Automotive | MP3Downloads |
Baby | MobileApps |
Beauty | Music |
Blended | MusicalInstruments |
Books | OfficeProducts |
Classical | PCHardware |
CreditCards | PetSupplies |
DVD | Shoes |
Electronics | Software |
ForeignBooks | SportingGoods |
GiftCards | Toys |
Grocery | Video |
HealthPersonalCare | VideoDownload |
Hobbies | VideoGames |
Homelmprovement | Watches |
Industrial |