キーワードによる商品検索で、アマゾンの「アフィリエイト商品のHTML」を作成する

Amazon Product Advertising APIにおいて、
キーワードで商品検索して商品情報を取得し、アマゾンの「アフィリエイト商品のHTML」を作成する。

switch文のオペレーションの場合分けで、上記の処理を行うPHPソースコードを解説しています。

SearchItemsオペレーションで、アマゾンの「アフィリエイト商品のHTML」を作成する

public static function makeHTML(ShortcodeAttribute $shortcodeAttribute) {

中略

	$affiliateHTML;

	$operation = $restParameter->getOperation ();
	switch ($operation) {
		case RESTParagraphUtils::SEARCH_ITEMS_OPERATION:

			// 現時点では、「Operation="SearchItems", SearchIndex="all"の組み合わせ」で、キーワード検索する処理だけ行なう。
			$affiliateHTML = KeywordSearchOperation::makeHTMLOfSearchOperation ( $urlInfo, $commonParameter, $restParameter, $itemHTMLOption, $productTypeOption, $displayHTMLOption );
			break;

		default :

			throw new IllegalArgumentException ( "無効なオペレーション:" . $operation );
	}

	return $affiliateHTML;
}

SEARCH_ITEMS_OPERATION定数。

const SEARCH_ITEMS_OPERATION = "SearchItems"; // TODO Choice部品

商品検索を行うオペレーションを用いて、「アフィリエイト商品のHTML」を作成する

Amazon Product Advertising APIの商品検索を用いて、アマゾンの「アフィリエイト商品のHTML」を作成します。

上記のソースコードではswitch文を使って、オペレーションについて場合分けしています。
ですが実際のところ、場合分けは一通りだけです。

Product Advertising APIのオペレーションは、SearchItemsの場合だけ処理しています。

SearchItemsというオペレーションは、簡単に言うと、キーワードによる検索条件を満たす商品を取得します。

例えば、キーワードが「ダイエットサプリ」の場合、
ダイエットサプリという条件を満たす、アマゾンで販売されている商品の情報を取得します。

その取得した商品情報を元に、ダイエットサプリの商品について、「アフィリエイト商品のHTML」を作成します。

上記のソースコードで言えば、

KeywordSearchOperation::makeHTMLOfSearchOperation()関数の処理で、アマゾンの「アフィリエイト商品のHTML」を、作成しています。

作成された、アマゾンの「アフィリエイト商品のHTML」は、$affiliateHTML変数に代入されます。
その$affiliateHTML変数は、return文によって返されます。

アマゾンの商品を表示するなら、商品検索を行うSearchItemsを使えば充分です

アマゾンの商品を表示するワードプレスプラグインを作る場合、

Amazon Product Advertising APIのオペレーションにおいては、商品検索を行うSearchItemsを使えば充分です。

SearchItemsオペレーションは、指定された検索キーワードを使って、商品の検索結果を取得します。

とりあえず、このオペレーションさえ利用できれば、その他のオペレーションについては使わなくても良い、と言えます。

たくさんある「Amazon Product Advertising APIのオペレーション」に、対応するのは難しいです

Amazon Product Advertising APIのオペレーションには、SearchItemsの他も指定できます。

例えば、次のようなオペレーションがあったりします。

オペレーションオペレーションの機能
ItemLookup商品IDを指定して、商品属性を取得する。
BrowseNodeLookupブラウズノードIDを指定して、対応するノードの名前と、子ノードと親ノードの名前とブラウズノードIDを取得する。
GetItems指定したリソースに対する、アイテム属性を取得する。
Amazon Product Advertising APIのオペレーション

Product Advertising APIの開発者ガイドを見たところ、オペレーションの種類は22種類ありました。

それらオペレーションの中には、利用率の低下によりサポートが終了した、というものもありました。

正直なところ、Product Advertising APIの開発者ガイドを読んでも、よくわからなかったりします。

結構な長文のガイドであり、英文で書かれていたりします。最新の情報が、英文だけの場合があります。

個人が(個人事業主が)、Product Advertising APIを取り扱うワードプレスプラグインを作る場合は、あんまり深入りしない方が良いです。

Product Advertising APIの多くのオペレーション機能に対応したプラグインを作ろうとしたら、負担が大きくて、時間もかかります。

実際のところ、たくさんのオペレーション機能に対応したプラグインを作るのは、難しいです。やめた方が良いです。

アマゾンの「アフィリエイト商品のHTML」を作成するのに必要とされる各情報を作成する

public static function makeHTML(ShortcodeAttribute $shortcodeAttribute) {

	$optionMap = AffiliateOptionUtils::getAffiliateOption (); // ここで一回だけデータベースを読み込む。

	$commonParameter = AmazonOptionUtils::makeCommonRESTParameter ( $optionMap );
	$restParameter = AmazonOptionUtils::makeRESTParameter ( $optionMap, $shortcodeAttribute );
	$displayHTMLOption = AmazonOptionUtils::makeDisplayHTMLPAAPINotAvailableOption ( $optionMap );

中略

	$urlInfo = URLUtils::makeURLInfo ( $optionMap, URLParagraphUtils::HOSTNAME_ID );
	$itemHTMLOption = AmazonItemHTMLUtils::makeItemHTMLOption ( $optionMap, $shortcodeAttribute );
	$productTypeOption = AmazonOptionUtils::makeProductTypeOption ( $optionMap );

中略

	$affiliateHTML = KeywordSearchOperation::makeHTMLOfSearchOperation ( 
		$urlInfo, 
		$commonParameter, $restParameter, 
		$itemHTMLOption, $productTypeOption, $displayHTMLOption );

キーワードによる商品検索で、

アマゾンの「アフィリエイト商品のHTML」を作成する関数において、必要とされる各情報を作成します。

アマゾンの「アフィリエイト商品のHTML」を作成する関数とは、
KeywordSearchOperation::makeHTMLOfSearchOperation()関数です。

必要とされる各情報には、

  • 当プラグインの「アフィリエイトの設定」
    • アマゾンの設定

ここで入力された情報などがあります。

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定

例えば、以下のような情報があります。

  • Product Advertising API ホスト
  • Product Advertising API アクセスキー
  • Product Advertising API アソシエイトタグ
  • Product Advertising API シークレットキー
  • Product Advertising API リージョン
  • 商品名の表示文字数
  • 商品情報のキャッシュ時間(秒)

これらの情報は、$optionMap変数に保持されています。

$optionMap変数は、ワードプレスのoptionsデータベーステーブルから取得した、当プラグイン専用の設定値です。

当プラグインのショートコードが記述されている部分に、任意のHTMLを表示する

$displayHTMLAlwaysEnabled = $displayHTMLOption->getDisplayHTMLPAAPINotAvailableAlwaysEnabled ();
if ($displayHTMLAlwaysEnabled) {

	$displayHTML = DisplayHTMLPAAPINotAvailableUtils::makeDisplayHTMLPAAPINotAvailable ( $commonParameter, $restParameter, $displayHTMLOption );
	return $displayHTML;
}
  • 当プラグインの「アフィリエイトの設定」
    • アマゾンの設定
      • 表示するHTMLの表示設定

この表示設定において、常に表示するがチェックされていたら、上記ソースコードのif文の条件が成り立ちます。

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定

その場合、

  • 当プラグインの「アフィリエイトの設定」
    • アマゾンの設定
      • Product Advertising API 利用不可の時、「表示するHTML」

ここに入力されたHTMLを、当プラグインのショートコードが記述されている部分に表示します。

「表示するHTML」としては、「アマゾンサイトを検索するリンクタグ」などを設定します。

<p>
アマゾンのサイトで<br>
<a href="https://www.amazon.co.jp/s?k=GOODS_MEMO_ENCODED_SEARCH_KEYWORD&__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3UMT51BBJA9HO&sprefix=GOODS_MEMO_ENCODED_SEARCH_KEYWORD%2Caps%2C264&linkCode=ll2&tag=GOODS_MEMO_ASSOCIATE_TAG&linkId=842bd4595c951b490a9128c5ed8834e7&language=ja_JP&ref_=as_li_ss_tl">「GOODS_MEMO_SEARCH_KEYWORD」の商品を検索する</a>
</p>

以下の予約された文字列は、アソシエイトタグなどに置換されます。

予約された文字列予約された文字列を置換する文字列
GOODS_MEMO_ASSOCIATE_TAG「アソシエイトタグ」に置換されます。
GOODS_MEMO_SEARCH_KEYWORD「キーワード」に置換されます。
GOODS_MEMO_ENCODED_SEARCH_KEYWORD「URLエンコードされたキーワード」に置換されます。
「表示するHTML」で予約された文字列

Product Advertising API 利用不可の時、任意のHTML を表示する

どんな場合に「表示するHTML」を表示するかと言うと、Product Advertising API 利用不可の時です。

例えば、アマゾンのアフィリエイトで売上実績がない場合、Product Advertising APIは利用できなくなります。

AmazonAffiliate.phpのソースコード

<?php

namespace goodsmemo\amazon;

use goodsmemo\amazon\KeywordSearchOperation;
use goodsmemo\amazon\AmazonOptionUtils;
use goodsmemo\amazon\AmazonItemHTMLUtils;
use goodsmemo\amazon\displayhtml\DisplayHTMLPAAPINotAvailableUtils;
use goodsmemo\network\URLUtils;
use goodsmemo\option\AffiliateOptionUtils;
use goodsmemo\option\amazon\URLParagraphUtils;
use goodsmemo\option\amazon\RESTParagraphUtils;
use goodsmemo\shortcode\ShortcodeAttribute;
use goodsmemo\exception\IllegalArgumentException;

require_once GOODS_MEMO_DIR . "amazon/KeywordSearchOperation.php";
require_once GOODS_MEMO_DIR . "amazon/AmazonOptionUtils.php";
require_once GOODS_MEMO_DIR . "amazon/AmazonItemHTMLUtils.php";
require_once GOODS_MEMO_DIR . "amazon/displayhtml/DisplayHTMLPAAPINotAvailableUtils.php";
require_once GOODS_MEMO_DIR . "network/URLUtils.php";
require_once GOODS_MEMO_DIR . "option/AffiliateOptionUtils.php";
require_once GOODS_MEMO_DIR . "option/amazon/URLParagraphUtils.php";
require_once GOODS_MEMO_DIR . "option/amazon/RESTParagraphUtils.php";
require_once GOODS_MEMO_DIR . "shortcode/ShortcodeAttribute.php";
require_once GOODS_MEMO_DIR . "exception/IllegalArgumentException.php";

class AmazonAffiliate {

	public static function makeHTML(ShortcodeAttribute $shortcodeAttribute) {

		$optionMap = AffiliateOptionUtils::getAffiliateOption (); // ここで一回だけデータベースを読み込む。

		$commonParameter = AmazonOptionUtils::makeCommonRESTParameter ( $optionMap );
		$restParameter = AmazonOptionUtils::makeRESTParameter ( $optionMap, $shortcodeAttribute );
		$displayHTMLOption = AmazonOptionUtils::makeDisplayHTMLPAAPINotAvailableOption ( $optionMap );

		$displayHTMLAlwaysEnabled = $displayHTMLOption->getDisplayHTMLPAAPINotAvailableAlwaysEnabled ();
		if ($displayHTMLAlwaysEnabled) {

			$displayHTML = DisplayHTMLPAAPINotAvailableUtils::makeDisplayHTMLPAAPINotAvailable ( $commonParameter, $restParameter, $displayHTMLOption );
			return $displayHTML;
		}

		$urlInfo = URLUtils::makeURLInfo ( $optionMap, URLParagraphUtils::HOSTNAME_ID );
		$itemHTMLOption = AmazonItemHTMLUtils::makeItemHTMLOption ( $optionMap, $shortcodeAttribute );
		$productTypeOption = AmazonOptionUtils::makeProductTypeOption ( $optionMap );

		$affiliateHTML;

		$operation = $restParameter->getOperation ();
		switch ($operation) {
			case RESTParagraphUtils::SEARCH_ITEMS_OPERATION:

				// 現時点では、「Operation="SearchItems", SearchIndex="all"の組み合わせ」で、キーワード検索する処理だけ行なう。
				$affiliateHTML = KeywordSearchOperation::makeHTMLOfSearchOperation ( $urlInfo, $commonParameter, $restParameter, $itemHTMLOption, $productTypeOption, $displayHTMLOption );
				break;

			default :

				throw new IllegalArgumentException ( "無効なオペレーション:" . $operation );
		}

		return $affiliateHTML;
	}
}