ほりくり@ほりでぃWebクリエーター

WP&PHP&AmazonAPIで動的にアソシエイトリンクを作成

投稿日:2013年7月18日

ページのキーワードに応じたamazonの商品を動的に表示したいと思った。

amazonアソシエイトに、そのような昨日のウィジェットがあるのだが
デザインを弄ることができず、どうもサイトに外観にマッチしないことが多い。

こんな感じのデザインになる。

amazon0

ある程度、色や全体的なサイズは変えられるが、使い勝手は悪い。

そこでamazonアソシエイトAPIを使用して、商品URLや画像を取得してみる。


1.Advertising API Accountの登録


まずはAdvertising API Accountに登録し
アクセスキーとシークレットアクセスキーを取得する必要があります。


アソシエイトのページから『Product Advertising API』をクリック。

amazon0-1

移動後のページで『アカウントの作成』をクリック。

サインイン画面で『i am a new customer』を選択しボタンをクリック
amazon0-2


必要項目を入力し、ライセンス規約に同意できたら次へ進みます。

amazon1


登録が完了したら『Manager your Account』をクリックします。
amazon2

アカウントサービス>アクセスキー情報の『こちらのリンク』をクリック
amazon3

このページからamazon検索に必要な『アクセスキーID』・『シークレットアクセスキー』を取得出来ます・
amazon4


2.リクエストを作成


商品情報を取得するためのリクエストを作成します。

参考にしたサイトはこちら:
Amazon Web サービス入門(Product Advertising API)@AjaxTower
大変参考になります。
このサイトだけで十分だと思いますw

リクエストの基本的な形式は
http://ecs.amazonaws.jp/onca/xml?[パラメータ]&[パラメータ]& …

使用する主なパラメータには以下のものがあります。

Service
サーバー名「AWSECommerceService」で固定です。

AWSAccessKeyId
Advertising API Accountで取得したアクセスキーです。

Version
APIのバージョンです。
「2011-08-01」の形式で記述します。
下記リンクから確認できます。
Release Notes
最新のバージョンを指定しないと動かないことがあります。

Timestamp
「2013-07-18T13%3A41%3A39Z」の形式で記述します。
年月日の後ろに「T」、時間のうしろに「Z」を追加しURLエンコードします。
PHPでの取得方法
$Timestamp = gmdate('Y-m-d\TH:i:s\Z');

SearchIndex
検索対象のカテゴリを指定します。
「Books」「DVD」「Music」…等
「All」ですべてを検索対象にします。

指定できるカテゴリはこちらのサイトに纏められています。
商品カテゴリーの指定(SearchIndex)@AjaxTower


AssociateTag
自分のアソシエイトIDを記述。
取得できるURLにアソシエイトIDが自動で埋め込まれます。

ResponseGroup
取得する情報の種類を指定。
商品名と画像を取得する必要があるのなら「Medium」あたりで問題ない。

ResponseGroupの種類一覧
取得する情報の種類(ResponseGroup)@AjaxTower


Signature
これが一番の難関。
1.これまでのパラメータをソート
2.それぞれのパラメータを「&」でつなげる
3.つなげたパラメータの頭に下記を追加
GET
ecs.amazonaws.jp
/onca/xml
4.つなげた文字列でHMAC-SHA256を計算
5.出来上がった書名をすべてのパラメータの最後に追加


以上でリクエストが完成します。


しかし、とっても面倒くさい。

そんな中、リクエストを作成するPHPコードをまとめてくれているページがあった。
Amazon Product Advertising API への対応(PHP版)@もやし日記

素晴らしい(・∀・)♪

ぶっちゃけここのサイトに公開されているコードをコピペして
必要項目のみ記述すれば完成してしまいます。


>$access_key_id = ‘ここに Access Key ID を入力';
>$secret_access_key = ‘ここに Secret Access Key を入力';
アクセスキーとシークレットアクセスキーを入力


>$params[‘Version’] = ‘2009-03-31′;
APIバージョンの最新のものを入力


>$params[‘SearchIndex’] = ‘Books';
>$params[‘Keywords’] = ‘もやし'; // ← 文字コードは UTF-8
検索カテゴリと検索キーワードを入力。

実行するとリクエストがecho表示されます。



3.XMLから商品を表示


作成したリクエストから商品のXMLが取得出来ます。

php5を使用している場合、simplexml_load_file関数でXMLを取り込むことができます。
$results = simplexml_load_file(作成したリクエスト);

主に使用するデータ(Mediumの場合)

results
  -> Items
    -> TotalResults   >>データ数
    -> Item
      -> ASIN   >>商品のASINコード
      -> DetailPageURL   >>商品のURL
      -> SmallImage
        -> url   >>画像(小)のURL
      -> MediumImage
        -> url   >>画像(中)のURL
      -> LargeImage
        -> url   >>画像(大)のURL
      -> ItemAttributes
        -> Title   >>商品名



PHPコード

$results = simplexml_load_file(作成したリクエスト);
$items = $results->Items->Item;
foreach ( $items as $item){	
	echo '<div>';
	echo '<a href="'. $item->DetailPageURL .'" target="_blank"><img src="'. $item->LargeImage->URL .'" title="'. $item->ItemAttributes->Title .'" width="150" /></a>';
	echo '</div>';
}


作成したサンプルページ
http://akb48.mass-mix.com/

一部取得されない画像があるな(´・ω・`)

  • ヤクチュウ

    分かりやすい記事をありがとうございます。無事に設置することができましたm(_ _)m