ドリリウム

趣味の情報や思いついたことを発信しています。高知 / 釣り / DIY / バイク / 車 / 家具制作 / アクアリウム / コーヒー / 地方移住 / ルノー・ルーテシア / SUZUKI ST250 E typeなど。

【PHP】Amazon Product Advertising APIでアソシエイトリンクを自動生成

f:id:katamichinijikan:20180810175025p:plain

Amazon Product Advertising APIに関する簡単な解説が見つからなかったので、超シンプルなサンプルと合わせて以下のポイントを解説します。

  • キーワードで商品検索
  • 検索結果の件数をチェック
  • アソシエイトリンクの取得
  • 商品画像URLの取得
  • アソシエイトリンク(検索結果画面)の取得

 

利用登録と認証情報の取得

まずはじめに、Product Advertising APIを利用するWebサイトでAmazonアソシエイトが利用できるようにサイトを登録する必要があります。

続いてメニューの「ツール」から「Product Advertising API」を選択し、認証情報を取得するのですが・・・既に取得済みで新規取得時の画面がわかりません。

f:id:katamichinijikan:20180810175505p:plain

特に難しい点もなく取得できるはずです。

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