【まとめ記事】アマゾンの商品を表示する場合、「アフィリエイト商品表示・WordPressプラグイン」のPHPソースコード解説

アマゾンの商品を表示するWordPressプラグインを、作ってみたいです。

「アフィリエイト商品表示・WordPressプラグイン」は、
キーワードで検索した商品を、
アフィリエイト対象の商品として表示するプラグインです。

当プラグインを用いて、アマゾンの商品を表示する処理について、PHPソースコードを解説しています。

当プラグインを用いてアマゾンの商品を表示する場合、大まかな処理は以下の通りになります。

  1. アマゾンの商品を表示したい場所に、当プラグインのショートコードを記述します。
  2. その際、当プラグインのショートコードのservice属性に、amazonを指定します。
    キーワード文字列など、他のショートコードの属性を適切に指定します。
  3. Amazon Product Advertising APIを使って、「アマゾン商品の検索結果」を取得します。
  4. 「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成します。
  5. 「当プラグイン用の商品情報の配列」から、アマゾンの「アフィリエイト商品のHTML」を作成します。
  6. 当プラグインのショートコードを記述してある場所に、アマゾンの「アフィリエイト商品のHTML」を表示します。

以上の処理より、アマゾンの商品を、アフィリエイト対象の商品として表示します。

以上の処理について、PHPソースコードを解説しています。

ソースコードの解説を読んだら、アフィリエイト商品を表示するWordPressプラグインの作り方を、少しずつ理解できます。

目次
  1. 「アフィリエイト商品表示・WordPressプラグイン」のソースコード
  2. アマゾンの商品を表示する場合、「アフィリエイト商品表示・WordPressプラグイン」の使い方
  3. 「アフィリエイト商品表示・WordPressプラグイン」のショートコードの処理について、PHPソースコードの解説
  4. Amazon Product Advertising APIを使って、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する処理について、PHPソースコードの解説
  5. 「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理について、PHPソースコードの解説
  6. 「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する処理について、PHPソースコードの解説

「アフィリエイト商品表示・WordPressプラグイン」のソースコード

github.comサイト内で公開しています。
フリーソフトのように、自由にお使いください。

https://github.com/goods-memo/goods-memo-affiliate

アマゾンの商品を表示する場合、「アフィリエイト商品表示・WordPressプラグイン」の使い方

PHPソースコードの解説をする前に、

アマゾンの商品を表示する場合の「アフィリエイト商品表示・WordPressプラグイン」の使い方を、説明します。

当プラグインの使い方を知っている方が、当プラグインのソースコードを理解しやすい、と思います。

アマゾンの商品を表示する場合の「当プラグインのショートコード」を、記述する

アマゾンの商品を表示したい場所に、当プラグインのショートコードを記述します。

アマゾンの商品を表示する場合、
ショートコードのservice属性に、amazonを指定します。

当プラグインのショートコードの例。

[goodsmemo_affiliate service="amazon" keyword="SDカード" number="1"]
  • service属性:amazon
  • keyword属性:SDカード
  • number属性:1(商品の表示件数)

当プラグインの「アマゾンの設定」で、各項目を設定する

当プラグイン「管理画面」の「アフィリエイトの設定」、

「アマゾンの設定」において、各項目を入力して、「変更を保存」ボタンを選択します。

アマゾンに関する設定項目には、例えば、
Amazon Product Advertising APIに関する項目があります。

「アフィリエイト商品表示・WordPressプラグイン」の使い方、
その詳細については、以下の記事を参照してください。

アフィリエイト商品表示・WordPressプラグイン

アフィリエイト商品表示・WordPressプラグインは、 Amazonや楽天市場の商品をアフィリエイト対象の商品として表示します。 商品の指定は、キーワードで指定します。

「アフィリエイト商品表示・WordPressプラグイン」のショートコードの処理について、PHPソースコードの解説

当プラグインのショートコードの登録

add_shortcode ( GOODS_MEMO_PREFIX . "_affiliate",
		array (
				'goodsmemo\shortcode\Shortcode',
				'makeAffiliateHTML'
		) );

上記のようにadd_shortcode()関数を用いて、当プラグインのショートコードを登録します。
登録後、以下のようなショートコードを利用できるようになります。

アマゾンの商品を表示するショートコードの例。

[goodsmemo_affiliate service="amazon" keyword="SDカード" number="1"]
  • service属性:amazon
  • keyword属性:SDカード
  • number属性:1(商品の表示件数)

当プラグインのショートコードの登録を行うPHPファイルは、ワードプレス側から最初に呼び出されるPHPファイルである

当プラグイン独自のショートコードは、当プラグインを利用するのに必須なものです。

そのショートコードを登録する処理は、ワードプレス側から最初に呼び出されるPHPファイルであることが、求められます。

PHPファイルに標準プラグイン情報を記述すると、
ワードプレス側から最初に呼び出されるPHPファイルである、と判断されます。

当プラグインの標準プラグイン情報。

/*
 * Plugin Name: Affiliate product display wordpress plugin
 * Plugin URI:
 * Description: Amazonや楽天市場の商品を、アフィリエイト対象の商品として表示します。
 * Version: 0.3.8
 * Author:Goods Memo
 * Author URI: https://programming.goods-memo.net/affiliate-product-display-wordpress-plugin/
 * License: GPL v2 or later
 */

標準プラグイン情報は、標準プラグイン情報が記述されたPHPファイルがワードプレスのプラグインであることを、示します。

そして、ワードプレス側から最初に呼び出されるPHPファイルであることを、示します。

当プラグインのショートコード登録の処理、
その詳細については、以下の記事を参照してください。

アフィリエイト商品表示・WordPressプラグインについて、設定ページとショートコードの登録

ワードプレスの設定メニューに、当プラグインの設定ページを登録する。 当プラグインのショートコードを登録する。

ショートコードのservice属性がamazonなら、アマゾンの「アフィリエイト商品のHTML」を作成する関数を呼び出す

$affiliateHTML;
switch ($service) {
	case "amazon" :

		$affiliateHTML = AmazonAffiliate::makeHTML ( $shortcodeAttribute );
		break;

	case "rakuten" :

		$affiliateHTML = RakutenAffiliate::makeHTML ( $shortcodeAttribute );
		break;

	default :

		throw new IllegalArgumentException ( "無効なサービス名:" . $service );
}

当プラグインのショートコードのservice属性がamazonであるか、判断します。

service属性がamazonなら、アマゾンの「アフィリエイト商品のHTML」を作成する関数を呼び出します。

switch文を用いて、service属性の判断をしています。

$service変数の値がamazonの場合、
アマゾンの「アフィリエイト商品のHTML」を作成するAmazonAffiliate::makeHTML()関数を呼び出します。

ショートコードの属性に関連する処理、
その詳細については、以下の記事を参照してください。

ショートコードの属性に対応する「アフィリエイト商品のHTML」を作成する

ショートコードのservice属性の各場合に分けて、「アフィリエイト商品のHTML」を作成する処理について、PHPソースコードを解説しています。

ショートコードの各属性をまとめたShortcodeAttributeクラス

class ShortcodeAttribute {

	private $keyword;

	public function getKeyword() {

		return $this->keyword;
	}

	public function setKeyword($keyword) {

		$this->keyword = $keyword;
	}

以下省略

}

ShortcodeAttributeクラスは、ショートコードの各属性をまとめたクラスです。
主に、データを保持するためのクラスになります。

ショートコードの各属性をまとめて管理するために、このようなデータを保持する目的のクラスを作成しています。

データを保持するためのクラスは、一般的に以下のメソッドを持っています。

  • データの値を取得するためのgetterメソッド。
  • データの値を設定するためのsetterメソッド。

getterメソッドやsetterメソッドを用意することで、
データの値について、取得する処理や設定する処理を管理しやすくなります。

データの値を管理しやすくなるため、例えばデータの値に関するデバッグ作業がはかどります。

ショートコードの各属性をまとめたShortcodeAttributeクラスの処理、
その詳細については、以下の記事を参照してください。

getterメソッドとsetterメソッドを持つ、ショートコードの各属性をまとめたクラス

ショートコードの属性値を取得したり、設定したりするために、以下のメソッドを用意しています。 getterメソッド。 setterメソッド。

ショートコードの属性に関する処理を集めたユーティリティクラス

当プラグインのプログラムでは、 ShortcodeAttributeUtilsクラスという、
ショートコードの属性に関する処理を集めたユーティリティクラスを、作成しました。

このShortcodeAttributeUtilsクラスには、例えば、
ShortcodeAttributeクラスのインスタンスを作成するstaticメソッドが、あります。

class ShortcodeAttributeUtils {

	public static function makeShortcodeAttribute($operation, $searchIndex, 
	$keyword, $numberToDisplay, 
	$itemTitleLength, $itemReviewLength): ShortcodeAttribute {

		中略

		$shortcodeAttribute = new ShortcodeAttribute ();
		$shortcodeAttribute->setOperation ( $operation );
		$shortcodeAttribute->setSearchIndex ( $searchIndex );
		$shortcodeAttribute->setKeyword ( $keyword );
		$shortcodeAttribute->setNumberToDisplay ( $numberToDisplay );
		$shortcodeAttribute->setItemTitleLength ( $itemTitleLength );
		$shortcodeAttribute->setItemReviewLength ( $itemReviewLength );

		return $shortcodeAttribute;
	}

以下省略

makeShortcodeAttribute()関数は、ShortcodeAttributeクラスのインスタンスを作成します。

ユーティリティクラスは、特定の対象に関する処理を集めたクラスです。

例えば、ShortcodeAttributeUtilsクラスには、ショートコードの属性に関する処理が集められます。

特定の対象に関する処理が一つのクラスに集まっていることは、ソースコードのわかりやすさにつながります。

例えば、ショートコードの属性に関する処理を探す場合、
ShortcodeAttributeUtilsクラスだけを探せば良いからです。

ショートコードの属性に関するユーティリティクラスの処理、
その詳細については、以下の記事を参照してください。

ショートコードの属性に関する処理を集めたユーティリティクラス

ショートコードの属性に関する処理を集めたユーティリティクラスについて、PHPソースコードを解説しています。

Amazon Product Advertising APIを使って、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する処理について、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部品

switch文を用いて、Amazon Product Advertising APIのオペレーションを判断します。

現在のところ、有効なオペレーションはSearchItemsだけです。
よって上記のswitch文では、$operation変数がSearchItemsであるか、判断しています。

オペレーションがSearchItemsの場合、

キーワードによる商品検索を行い、アマゾンの「アフィリエイト商品のHTML」を作成する関数を呼び出します。

SearchItemsオペレーションに対応する、アマゾンの「アフィリエイト商品のHTML」を作成する関数は、KeywordSearchOperation::makeHTMLOfSearchOperation()関数です。

当プラグインでアマゾンの商品を表示させたい場合、

Amazon Product Advertising APIで商品検索を行う、SearchItemsオペレーションを使うだけで充分です。

その他のオペレーションを使う必要はない、と言えます。

SearchItemsオペレーションに対応する、アマゾンの「アフィリエイト商品のHTML」を作成する処理、
その詳細については、以下の記事を参照してください。

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

キーワードで商品検索して商品情報を取得し、アマゾンのアフィリエイト商品のHTMLを作成する。 switch文のオペレーションの場合分けで、上記の処理を行うPHPソースコード…

Allという検索インデックスに対応する関数を呼び出して、アマゾンの「アフィリエイト商品のHTML」を作成する

public static function makeHTMLOfSearchOperation(URLInfo $urlInfo,
		CommonRESTParameter $commonParameter, RESTParameter $restParameter,
		ItemHTMLOption $itemHTMLOption, ProductTypeOption $productTypeOption,
		DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {

中略

	$affiliateHTML;

	$searchIndex = $restParameter->getSearchIndex ();
	switch ($searchIndex) {
		case RESTParagraphUtils::ALL_SEARCH_INDEX :

			$affiliateHTML = ItemSearchOperation::makeItemsHTML ( $urlInfo, $itemHTMLOption,
					$itemsHTMLInfoMaker );
			break;

		default :

			throw new IllegalArgumentException ( "無効なサーチインデックス:" . $searchIndex );
	}

	return $affiliateHTML;

ALL_SEARCH_INDEX定数。

const ALL_SEARCH_INDEX = "All"; // TODO Choice部品

switch文を用いて、Amazon Product Advertising APIの検索インデックスを判断します。

現在のところ、有効な検索インデックスはAllだけです。
よって上記のswitch文では、$searchIndex変数がAllであるか、判断しています。

検索インデックスがAllの場合、

全ての検索カテゴリに対して商品検索を行い、アマゾンの「アフィリエイト商品のHTML」を作成する関数を呼び出します。

Allという検索インデックス対応する、アマゾンの「アフィリエイト商品のHTML」を作成する関数は、ItemSearchOperation::makeItemsHTML()関数です。

全ての検索カテゴリに対して商品検索を行い、アマゾンの「アフィリエイト商品のHTML」を作成する処理、
その詳細については、以下の記事を参照してください。

全ての検索カテゴリにおいて、キーワードによる商品検索をすることで、アマゾンの「アフィリエイト商品のHTML」を作成する

全ての検索カテゴリにおいて、キーワードで商品検索して、アマゾンの「アフィリエイト商品のHTML」を作成する。 switch文の検索インデックスの場合分けで、上記の処理を行…

「アマゾン商品のHTMLに関する情報」を作成する

「アマゾン商品のHTMLに関する情報」とは、
アマゾンの「アフィリエイト商品のHTML」を作成する処理において、必要な情報のことです。

「アマゾン商品のHTMLに関する情報」は、以下の三つです。

  1. キーワードによる商品検索で取得した、「アマゾン商品の検索結果」。
  2. 「アマゾン商品の検索結果」を基に作成した、「当プラグイン用の商品情報の配列」。
  3. アマゾンにおける、キーワードによる商品検索の検索条件に対応する、「一意な文字列」。

上記の三つの情報については、AmazonItemsHTMLInfoMakerクラスが、これら三つの情報を作成します。

「アマゾン商品のHTMLに関する情報」を作成する処理、
その詳細については、以下の記事を参照してください。

「アマゾン商品の検索結果」など、「アマゾン商品のHTMLに関する情報」を作成する

「アマゾン商品の検索結果」など、「アマゾン商品のHTMLに関する情報」を作成する処理について、PHPソースコードを解説しています。

Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する

Amazon Product Advertising APIの利用については、利用できない場合が意外とあります。

例えば、アマゾンアソシエイト経由で商品の売り上げ金額(※)が少ない場合、
APIを利用できなかったりします。
※もしかしたら、売り上げ件数が少ない場合も、APIを利用できないかもしれません。

当プラグインでは、Amazon Product Advertising API 利用不可の時に、
当プラグインの「アマゾンの設定」で入力した「表示するHTML」を、表示できます。

当プラグインのショートコードが記述されている場所に、「表示するHTML」を表示できます。

「表示する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_ENCODED_SEARCH_KEYWORDなどの予約された文字列を、含んでいます。

「表示するHTML」の中にある予約された文字列は、以下の表の通りに置換されます。

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

「表示するHTML」を作成する処理、
その詳細については、以下の記事を参照してください。

Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する

Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する処理について、PHPソースコードを解説しています。

商品検索がエラーの時に再試行することで、「アマゾン商品の検索結果」を取得する

$lastHttpRequestException;
for($i = 0; $i < $retryCount; $i ++) { // 例:リトライ回数:2回 //TODO 設定画面で指定する
	if ($i >= 1) {
		sleep ( 1 ); // 再試行の待ち時間(1秒)
	}

	try {
		/*
		 * ここでSDKあり・なしの分岐処理をするかもしれない。
		 * SDKAmazonRequest::requestSearchIndex()
		 */

		$searchItemsResponse = SearchIndexRequest::request ( $partnerTag, $keyword, $searchIndex, $resources, $hostname, $accessKey, $secretKey, $regionName );

		return $searchItemsResponse;
	} catch ( HttpRequestException $ex ) {
		$lastHttpRequestException = $ex;
	}
}

throw $lastHttpRequestException;

「アマゾン商品の検索結果」を取得する時に、エラーが発生した場合、
再試行を行います。

再試行の処理は、for文のループ処理によって行います。

再試行する回数は、($retryCount変数の値 - 1 )です。

for文のループ処理で呼び出されるSearchIndexRequest::request()関数によって、「アマゾン商品の検索結果」を取得します。

この関数の呼び出しでエラーが起きた場合、再試行することになります。

再試行を行うfor文のループ処理で、指定された回数($retryCount変数の値 - 1 )だけ再試行を行なっても、エラーが発生し続けた場合、

for文のループを終了後、
最後に発生したHTTPリクエスト例外が、throw文によって通知されます。

これは、「アマゾン商品の検索結果」を取得できなかったことになります。

「アマゾン商品の検索結果」を正常に取得できた場合、return文が実行されて、for文のループ処理が終了する

SearchIndexRequest::request()関数の処理が正常に終了した場合、
$searchItemsResponse変数に「アマゾン商品の検索結果」を代入します。

その$searchItemsResponse変数が、return文によって返されます。

このreturn文が実行されて、再試行を行うfor文のループ処理は終了します。

「アマゾン商品の検索結果」を取得する時に、エラーが発生した場合、再試行する処理、
その詳細については、以下の記事を参照してください。

商品検索がエラーの時に再試行することで、キーワードによる商品検索をして、「アマゾン商品の検索結果」を取得する

「アマゾン商品の検索結果」を取得する時に、エラーが発生した場合、再試行する処理について、PHPソースコードを解説しています。

Amazon Product Advertising APIで、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する

$params = array (
		'http' => array (
				'header' => $headerString,
				'method' => 'POST',
				'content' => $payload
		)
);
$stream = stream_context_create ( $params );

$fp = @fopen ( 'https://' . $host . $path, 'rb', false, $stream );

//$hostの値
//webservices.amazon.co.jp

//$pathの値
// /paapi5/searchitems

Amazon Product Advertising APIに対するリクエストは、

  • stream_context_create()関数
  • fopen()関数

これらを使用して行います。

stream_context_create()関数で、HTTPヘッダー付きのストリームコンテキストを作成する

stream_context_create()関数を用いて、HTTPヘッダー付きのストリームコンテキストを作成します。

HTTPヘッダーの各情報を保持する$params変数を、作成します。
この$params変数を、stream_context_create()関数に渡します。

stream_context_create()関数の$params変数の例。

[
[http] => 
  [
    [header] => content-encoding: amz-1.0
    content-type: application/json; charset=utf-8
    host: webservices.amazon.co.jp
    x-amz-date: 20230320T051703Z
    x-amz-target: com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems
    Authorization: AWS4-HMAC-SHA256 Credential=SAMPLEUIQALSAKLXXXXX/20230320/us-west-2/ProductAdvertisingAPI/aws4_request,
    SignedHeaders=content-encoding;content-type;host;x-amz-date;x-amz-target,
    Signature=SAMPLE8ffbfec91ec8cae4d5da6f5beb58316a9be6ec632f6beefe93f8fXXXXX, 
    [method] => POST, 
    [content] => 
      {
      "PartnerType":"Associates",
      "PartnerTag":"sample-22",
      "Keywords":"PHP\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0",
      "SearchIndex":"All",
      "Resources":
        [
        "Images.Primary.Large",
        "Images.Primary.Medium",
        "Images.Primary.Small",
        "ItemInfo.ByLineInfo",
        "ItemInfo.Classifications",
        "ItemInfo.Features",
        "ItemInfo.ProductInfo",
        "ItemInfo.Title",
        "Offers.Listings.MerchantInfo",
        "Offers.Listings.Price",
        "Offers.Summaries.LowestPrice"
        ]
      }
  ]
]

$params変数は、
Amazon Product Advertising APIのSearchItemsオペレーションで、商品検索リクエストをするために必要な情報を、持っています。

例えば、[header]要素は、Amazon Product Advertising APIに対する署名の認証情報などを持っています。

[content]要素は、Amazon Product Advertising APIのペイロードを持っています。
例えば、ペイロードのPartnerTagパラメーターは、アマゾンのアソシエイトタグです。

ちなみにペイロードとは、宛先などの制御情報を除いた、相手に送る本来のデータのことを指します。

fopen()関数で、「アマゾン商品の検索結果」を読み取るためのファイルポインタを取得する

$fp = @fopen ( 'https://' . $host . $path, 'rb', false, $stream );

//$hostの値
//webservices.amazon.co.jp

//$pathの値
// /paapi5/searchitems

$stream変数は、stream_context_create()関数が作成した「HTTPヘッダー付きのストリームコンテキスト」を、保持します。

その$stream変数を、fopen()関数に渡します。

そのfopen()関数を用いることで、指定されたヘッダーを持つHTTPリクエストを実行できます。
つまり、Amazon Product Advertising APIに対して、HTTPリクエストを実行できます。

fopen()関数から取得したファイルポインタは、「アマゾン商品の検索結果」を読み取るためのファイルポインタとなります。

stream_get_contents()関数で、「アマゾン商品の検索結果」を取得する

$fp = @fopen ( 'https://' . $host . $path, 'rb', false, $stream );

//$hostの値
//webservices.amazon.co.jp

//$pathの値
// /paapi5/searchitems

$responseJSON = @stream_get_contents ( $fp );
if ($responseJSON === false) {
	throw new HttpRequestException ( "stream_get_contents Exception Occured" );
}

$responseObject = json_decode ( $responseJSON );
if (is_null ( $responseObject )) {
	return NULL;
}

stream_get_contents()関数は、すでにオープンしているストリームに対してデータを取得して、文字列に保存する関数です。

stream_get_contents()関数に、
「アマゾン商品の検索結果」を読み取るためのファイルポインタを設定して、実行します。

stream_get_contents()関数から、JSON形式の「アマゾン商品の検索結果」を取得します。

json_decode()関数を用いて、JSON形式の「アマゾン商品の検索結果」から、
PHPオブジェクトの「アマゾン商品の検索結果」を、作成します。

「アマゾン商品の検索結果」を保持する$responseObject変数の例。

stdClass Object 
( 
[SearchResult] => stdClass Object 
( 
[Items] => Array 
( 
[0] => stdClass Object 
(
[ASIN] => XXXX000001
[DetailPageURL] => https://www.amazon.co.jp/dp/4873116686?tag=sample-22&linkCode=osi&th=1&psc=1
[Images] => stdClass Object 
( 
[Primary] => stdClass Object 
( 
[Large] => stdClass Object 
( 
[Height] => 500 
[URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL500_.jpg 
[Width] => 391 
) 
[Medium] => stdClass Object 
( 
[Height] => 160 
[URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL160_.jpg 
[Width] => 125 
) 
[Small] => stdClass Object 
( 
[Height] => 75 
[URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL75_.jpg 
[Width] => 58
)
)
)
[ItemInfo] => stdClass Object 
( 
[ByLineInfo] => stdClass Object 
( 
[Contributors] => Array 
( 
[0] => stdClass Object 
( 
[Locale] => ja_JP 
[Name] => Kevin XXXX 
[Role] => 著 
[RoleType] => author 
) 
[1] => stdClass Object 
( 
[Locale] => ja_JP 
[Name] => Peter XXXX 
[Role] => 著 
[RoleType] => author 
) 
[2] => stdClass Object 
( 
[Locale] => ja_JP 
[Name] => Rasmus XXXX 
[Role] => 著 
[RoleType] => author 
) 
[3] => stdClass Object 
( 
[Locale] => ja_JP 
[Name] => 高木 XXXX 
[Role] => 翻訳 
[RoleType] => translator 
) 
) 
[Manufacturer] => stdClass Object 
( 
[DisplayValue] => XXXXジャパン 
[Label] => Manufacturer 
[Locale] => ja_JP 
) 
) 
[Classifications] => stdClass Object 
( 
[Binding] => stdClass Object 
( 
[DisplayValue] => 大型本 
[Label] => Binding 
[Locale] => ja_JP 
) 
[ProductGroup] => stdClass Object 
( 
[DisplayValue] => 本 
[Label] => ProductGroup 
[Locale] => ja_JP 
) 
) 
[ProductInfo] => stdClass Object 
( 
[IsAdultProduct] => stdClass Object 
( 
[DisplayValue] => false
[Label] => IsAdultProduct 
[Locale] => en_US 
) 
[ItemDimensions] => stdClass Object 
( 
[Height] => stdClass Object 
( 
[DisplayValue] => 9.448818888 
[Label] => Height 
[Locale] => ja_JP 
[Unit] => インチ 
) 
[Length] => stdClass Object 
( 
[DisplayValue] => 1.574803148 
[Label] => Length 
[Locale] => ja_JP 
[Unit] => インチ 
) 
[Weight] => stdClass Object 
( 
[DisplayValue] => 1.322773572 
[Label] => Weight 
[Locale] => ja_JP 
[Unit] => ポンド 
) 
[Width] => stdClass Object 
( 
[DisplayValue] => 7.480314953 
[Label] => Width 
[Locale] => ja_JP 
[Unit] => インチ 
) 
) 
[UnitCount] => stdClass Object 
( 
[DisplayValue] => 1 
[Label] => NumberOfItems 
[Locale] => en_US 
) 
) 
[Title] => stdClass Object 
( 
[DisplayValue] => プログラミングPHP 
[Label] => Title 
[Locale] => ja_JP 
) 
) 
[Offers] => stdClass Object 
( 
[Listings] => Array 
( 
[0] => stdClass Object 
( 
[Id] => XXXXuqZV9p%2F9pThe3wpI3Fjh2M8oyA4O1gf5jmywp2AigraEoBosy%2B9UXq31F6Xjpgb2EgfNU9zKiaF%2Bw6VX2ctWetmRXxRdVs8hTELGa8iJBqm%2FTizDYbJueUUaGTkmWesG%2BH%2FF72w%3D 
[MerchantInfo] => stdClass Object 
( 
[FeedbackCount] => 0 
[FeedbackRating] => 0 
[Id] => AN1VRQENFRJN5 
[Name] => Amazon.co.jp 
) 
[Price] => stdClass Object 
( 
[Amount] => 4180 
[Currency] => JPY 
[DisplayAmount] => ¥4,180 
) 
[ViolatesMAP] => 
) 
) 

[Summaries] => Array 
( 
[0] => stdClass Object 
( 
[Condition] => stdClass Object 
( 
[Value] => Collectible 
) 
[LowestPrice] => stdClass Object 
( 
[Amount] => 8350 
[Currency] => JPY 
[DisplayAmount] => ¥8,350 
) 
) 
[1] => stdClass Object 
( 
[Condition] => stdClass Object 
( 
[Value] => New 
) 
[LowestPrice] => stdClass Object 
( 
[Amount] => 4180 
[Currency] => JPY 
[DisplayAmount] => ¥4,180 
) 
) 
[2] => stdClass Object 
( 
[Condition] => stdClass Object 
( 
[Value] => Used 
) 
[LowestPrice] => stdClass Object 
( 
[Amount] => 1066 
[Currency] => JPY 
[DisplayAmount] => ¥1,066 
) 
) 
) 
) 
) 

[1] => stdClass Object 
(
[ASIN] => XXXX000002

中略

)

中略

[SearchURL] => https://www.amazon.co.jp/s?k=PHP%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&rh=p_n_availability%3A-1&tag=sample-22&linkCode=osi 
[TotalResultCount] => 462 
) 
)

Amazon Product Advertising APIで、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する処理、
その詳細については、以下の記事を参照してください。

Amazon Product Advertising APIを使って、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する

Amazon Product Advertising APIを使って、「アマゾン商品の検索結果」を取得する処理について、PHPソースコードを解説しています。 SearchItemsオペレーションを使って、…

「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理について、PHPソースコードの解説

「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する

「アマゾン商品の検索結果」とは、Amazon Product Advertising APIを使って、キーワードで商品検索して取得した結果です。

この「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成します。

「当プラグイン用の商品情報の配列」を作成するために、まずは、1個の「当プラグイン用の商品情報」を作成します。

  1. 1個の「アマゾン商品の検索結果」について、「有効なアマゾン商品」かどうか、判断します。
  2. アマゾン商品が有効な場合、
    1個の「アマゾン商品の検索結果」から、1個の「当プラグイン用の商品情報」を作成します。
  3. 作成した、1個の「当プラグイン用の商品情報」を、「当プラグイン用の商品情報の配列」に追加してゆきます。

「当プラグイン用の商品情報」を作成する個数については、以下の二つの個数を考慮して決めます。

  • 検索結果で取得した、「有効なアマゾン商品」の個数。
  • 当プラグインで表示する商品数。

作成する個数だけ、
「当プラグイン用の商品情報」を作成して、「当プラグイン用の商品情報の配列」に追加してゆきます。

以上より、「当プラグイン用の商品情報の配列」を作成します。

「アマゾン商品の情報」から、1個の「当プラグイン用の商品情報」を作成する

$item = SearchIndexResponse::makeItem ( $searchItem, $priceTime );

$searchItem変数は、1個の「アマゾン商品の情報」を保持します。

その$searchItem変数を、SearchIndexResponse::makeItem()関数に渡して、
1個の「当プラグイン用の商品情報」を作成します。

「当プラグイン用の商品情報」を保持する$item変数の例は、以下の通りです。

goodsmemo\item\Item Object
(
  [pageURL:goodsmemo\item\Item:private] => https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1
  [imageItem:goodsmemo\item\Item:private] => goodsmemo\item\ImageItem Object
    (
      [imageURL:goodsmemo\item\ImageItem:private] => https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg
      [imageWidth:goodsmemo\item\ImageItem:private] => 125
      [imageHeight:goodsmemo\item\ImageItem:private] => 160
    )

  [title:goodsmemo\item\Item:private] => プログラミングPHP 第4版
  [priceItem:goodsmemo\item\Item:private] => goodsmemo\item\PriceItem Object
    (
      [label:goodsmemo\item\PriceItem:private] => 価格
      [price:goodsmemo\item\PriceItem:private] => 4,290 円
      [priceAddition:goodsmemo\item\PriceItem:private] => 
      [priceTime:goodsmemo\item\PriceItem:private] => 1681545522.9672
      [postageText:goodsmemo\item\PriceItem:private] => 
    )

  [pointItem:goodsmemo\item\Item:private] => goodsmemo\item\PointItem Object
    (
      [pointRate:goodsmemo\item\PointItem:private] => 
      [pointRateStartTime:goodsmemo\item\PointItem:private] => 
      [pointRateEndTime:goodsmemo\item\PointItem:private] => 
    )

  [productionItem:goodsmemo\item\Item:private] => goodsmemo\item\ProductionItem Object
    (
      [contributorArray:goodsmemo\item\ProductionItem:private] => Array
        (
          [0] => Kevin XXXX(著)
          [1] => Peter XXXX(著)
          [2] => 永井 XXXX(監修)
          [3] => 中野 XXXX(翻訳)
        )

      [manufacturerLabel:goodsmemo\item\ProductionItem:private] => 出版社
      [manufacturer:goodsmemo\item\ProductionItem:private] => XXXXジャパン株式会社
      [binding:goodsmemo\item\ProductionItem:private] => 単行本(ソフトカバー)
    )

  [preferentialMember:goodsmemo\item\Item:private] => 
  [shop:goodsmemo\item\Item:private] => Amazon.co.jp
  [reviewItem:goodsmemo\item\Item:private] => goodsmemo\item\ReviewItem Object
    (
      [reviewLineArray:goodsmemo\item\ReviewItem:private] => Array
        (
          [0] => 商品の主な機能に関する情報その1。
          [1] => 商品の主な機能に関する情報その2。
          [2] => 商品の主な機能に関する情報その3。
        )

      [plainTextReview:goodsmemo\item\ReviewItem:private] => 
    )
)

「当プラグイン用の商品情報」を、「当プラグイン用の商品情報の配列」に追加する

$itemArray = array ();

中略

$searchItems = $searchItemsResponse->SearchResult->Items;

中略

for($i = 0; $i < $count; $i ++) {

	$searchItem = $searchItems [$i];

中略

		$item = SearchIndexResponse::makeItem ( $searchItem, $priceTime );
		array_push ( $itemArray, $item );

}

return $itemArray;

array_push()関数で、「当プラグイン用の商品情報」を保持する$item変数を、
「当プラグイン用の商品情報の配列」である$itemArray配列の変数に、追加します。

for文の$count変数が示す回数だけ、
「当プラグイン用の商品情報」を、「当プラグイン用の商品情報の配列」に追加するのを試みます。

「当プラグイン用の商品情報の配列」を保持する$itemArray配列変数の例は、以下の通りです。

Array
(
  [0] => goodsmemo\item\Item Object
  (
  [pageURL:goodsmemo\item\Item:private] => https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1
  [imageItem:goodsmemo\item\Item:private] => goodsmemo\item\ImageItem Object
    (
      [imageURL:goodsmemo\item\ImageItem:private] => https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg
      [imageWidth:goodsmemo\item\ImageItem:private] => 125
      [imageHeight:goodsmemo\item\ImageItem:private] => 160
    )

  [title:goodsmemo\item\Item:private] => プログラミングPHP 第4版
  [priceItem:goodsmemo\item\Item:private] => goodsmemo\item\PriceItem Object
    (
      [label:goodsmemo\item\PriceItem:private] => 価格
      [price:goodsmemo\item\PriceItem:private] => 4,290 円
      [priceAddition:goodsmemo\item\PriceItem:private] => 
      [priceTime:goodsmemo\item\PriceItem:private] => 1681545522.9672
      [postageText:goodsmemo\item\PriceItem:private] => 
    )

  [pointItem:goodsmemo\item\Item:private] => goodsmemo\item\PointItem Object
    (
      [pointRate:goodsmemo\item\PointItem:private] => 
      [pointRateStartTime:goodsmemo\item\PointItem:private] => 
      [pointRateEndTime:goodsmemo\item\PointItem:private] => 
    )

  [productionItem:goodsmemo\item\Item:private] => goodsmemo\item\ProductionItem Object
    (
      [contributorArray:goodsmemo\item\ProductionItem:private] => Array
        (
          [0] => Kevin XXXX(著)
          [1] => Peter XXXX(著)
          [2] => 永井 XXXX(監修)
          [3] => 中野 XXXX(翻訳)
        )

      [manufacturerLabel:goodsmemo\item\ProductionItem:private] => 出版社
      [manufacturer:goodsmemo\item\ProductionItem:private] => XXXXジャパン株式会社
      [binding:goodsmemo\item\ProductionItem:private] => 単行本(ソフトカバー)
    )

  [preferentialMember:goodsmemo\item\Item:private] => 
  [shop:goodsmemo\item\Item:private] => Amazon.co.jp
  [reviewItem:goodsmemo\item\Item:private] => goodsmemo\item\ReviewItem Object
    (
      [reviewLineArray:goodsmemo\item\ReviewItem:private] => Array
        (
          [0] => 商品の主な機能に関する情報その1。
          [1] => 商品の主な機能に関する情報その2。
          [2] => 商品の主な機能に関する情報その3。
        )

      [plainTextReview:goodsmemo\item\ReviewItem:private] => 
    )
  )

  [1] => goodsmemo\item\Item Object
  (
  //「当プラグイン用の商品情報」その2
  )

  [2] => goodsmemo\item\Item Object
  (
  //「当プラグイン用の商品情報」その3
  )
)

「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理、
その詳細については、以下の記事を参照してください。

「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する

「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理について、PHPソースコードを解説しています。

「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する

「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成します。

「当プラグイン用の商品の画像情報」は、以下のものを保持します。

  • 画像のURL。
  • 画像の幅(ピクセル数)。
  • 画像の高さ(ピクセル数)。

「アマゾン商品の情報」から、ミディアムサイズの「商品の画像情報」を作成する

「アマゾン商品の情報」から、ミディアムサイズの「商品の画像情報」を作成する場合についてです。

$primaryImages = $searchItem->Images->Primary;

// 大きさの優先順位は、ミディアム、ラージ、スモール

if (isset ( $primaryImages->Medium )) {
	$imageSize = $primaryImages->Medium;
	ImageResponse::setImageInfoTo ( $imageItem, $imageSize );

	if ($imageItem->getImageURL ()) {
		return $imageItem;
	}
}

$searchItem->Images->Primary->Mediumメンバー変数の例。

stdClass Object 
(
[ASIN] => XXXX000001

中略

[Images] => stdClass Object 
( 
[Primary] => stdClass Object 
( 
  [Medium] => stdClass Object 
  ( 
  [Height] => 160 
  [URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL160_.jpg 
  [Width] => 125 
  ) 

中略

)
)
)

「当プラグイン用の商品の画像情報」を保持する$imageItem変数に、ミディアムサイズの「商品の画像情報」を設定します。

ImageResponse::setImageInfoTo()関数に、$imageItem変数と$imageSize変数を渡して、
$imageItem変数に、ミディアムサイズの「商品の画像情報」を設定します。

ImageResponse::setImageInfoTo()関数。

private static function setImageInfoTo(ImageItem &$imageItem, $imageSize) {

	if (isset ( $imageSize->URL )) {

		$imageItem->setImageURL ( esc_url ( $imageSize->URL ) );
		$imageItem->setImageWidth ( $imageSize->Width );
		$imageItem->setImageHeight ( $imageSize->Height );
	}
}

ミディアムサイズの「商品の画像情報」を保持する$imageItem変数の例。

goodsmemo\item\ImageItem Object
  (
    [imageURL:goodsmemo\item\ImageItem:private] => https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg
    [imageWidth:goodsmemo\item\ImageItem:private] => 125
    [imageHeight:goodsmemo\item\ImageItem:private] => 160
  )

「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する処理、
その詳細については、以下の記事を参照してください。

「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する

「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する処理について、PHPソースコードを解説しています。

「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成する

「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成します。

「当プラグイン用の商品の価格情報」は、以下のものを保持します。

  • 価格の名称。
  • 価格。
  • 「当プラグイン用の商品の価格情報」を作成した日時。
  • 価格の付け足し情報。
  • 送料。

「アマゾン商品の情報」から、「Amazon.co.jpの価格」を作成する

「アマゾン商品の情報」から、「Amazon.co.jpの価格」を作成する場合についてです。

private static function setAmazonPriceTo(&$priceItem, $offers) {

	$priceItem->setLabel ( "価格" ); // スマートフォンの画面幅が狭いため、文字数を短くした。「Amazon.co.jp 価格」

	$amazonPrice = PriceResponse::makeAmazonPriceIfAmoutIsSet ( $offers );
	$formattedPrice = PriceUtils::makeFormattedPrice ( $amazonPrice );
	$priceItem->setPrice ( $formattedPrice );

	$priceItem->setPriceAddition ( "" );
}

「当プラグイン用の商品の価格情報」を保持する$priceItem変数に、「Amazon.co.jpの価格」を設定します。

$amazonPrice変数に、「Amazon.co.jpの価格」の文字列を代入します。

「Amazon.co.jpの価格」の文字列の例。
4180

「Amazon.co.jpの価格」の文字列は、makeAmazonPriceIfAmoutIsSet()関数によって作成されたものです。

//$offers = $searchItem->Offers;

private static function makeAmazonPriceIfAmoutIsSet($offers) {

	if (isset ( $offers ) and isset ( $offers->Listings ) and isset ( $offers->Listings [0] ) and
			isset ( $offers->Listings [0]->Price ) and
			isset ( $offers->Listings [0]->Price->Amount )) {

		$priceAmount = $offers->Listings [0]->Price->Amount;
		return HTMLUtils::makePlainText ( ( string ) $priceAmount );
	} else {
		return "";
	}
}

$searchItem->Offers->Listings [0]->Price->Amountメンバー変数の例。

stdClass Object 
(
[ASIN] => XXXX000001

中略

[Offers] => stdClass Object 
( 
[Listings] => Array 
( 
[0] => stdClass Object 
( 
  [Price] => stdClass Object 
  ( 
  [Amount] => 4180 
  [Currency] => JPY 
  [DisplayAmount] => ¥4,180 
  ) 

中略

)

)
)
)

makeAmazonPriceIfAmoutIsSet()関数は、
「アマゾン商品の情報」を保持する$searchItem変数から、「Amazon.co.jpの価格」の文字列を作成します。

$priceItem->setPrice ( $formattedPrice );

$priceItem->setPrice()メソッドを用いて、

「価格」に対して、
「Amazon.co.jpの価格」の文字列を、設定します。

「Amazon.co.jpの価格」を保持する$priceItem変数の例。

goodsmemo\item\PriceItem Object
  (
    [label:goodsmemo\item\PriceItem:private] => 価格
    [price:goodsmemo\item\PriceItem:private] => 4,180 円
    [priceAddition:goodsmemo\item\PriceItem:private] => 

以下省略

  )

「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成する処理、
その詳細については、以下の記事を参照してください。

「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成する

「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成する処理について、PHPソースコードを解説しています。

「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成する

「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成します。

「当プラグイン用の詳細な商品情報」には、以下のものがあります。

  • 商品に関連付けられた投稿者。
  • 商品の製造者ラベル。
  • 商品の製造者。
  • 商品の種別。

「アマゾン商品の情報」から、「商品の種別」を作成する

「アマゾン商品の情報」から、「商品の種別」を作成する場合についてです。

$itemInfo = $searchItem->ItemInfo;

if (isset ( $itemInfo->Classifications ) and isset ( $itemInfo->Classifications->Binding ) and
		isset ( $itemInfo->Classifications->Binding->DisplayValue )) {

	$bindingValue = $itemInfo->Classifications->Binding->DisplayValue;
	$productionItem->setBinding ( HTMLUtils::makePlainText ( $bindingValue ) );
}

$searchItem->ItemInfo->Classifications->Bindingメンバー変数の例。

stdClass Object 
(
[ASIN] => XXXX000001

中略

[ItemInfo] => stdClass Object 
( 
[Classifications] => stdClass Object 
( 
  [Binding] => stdClass Object 
  ( 
  [DisplayValue] => 大型本 
  [Label] => Binding 
  [Locale] => ja_JP 
  ) 

中略

) 
)
)

「当プラグイン用の詳細な商品情報」を保持する$productionItem変数に、「商品の種別」の文字列を設定します。

$bindingValue変数に「商品の種別」の文字列を代入します。

$productionItem->setBinding()関数を用いて、

「商品の種別」の文字列を、
「当プラグイン用の詳細な商品情報」を保持する$productionItem変数に、設定します。

$productionItem->bindingメンバー変数の例。

goodsmemo\item\ProductionItem Object
  (

中略

    [binding:goodsmemo\item\ProductionItem:private] => 大型本
  )

「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成する処理、
その詳細については、以下の記事を参照してください。

「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成する

「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成する処理について、PHPソースコードを解説しています。

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する処理について、PHPソースコードの解説

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

public static function makeItemsHTML(URLInfo $urlInfo, ItemHTMLOption $itemHTMLOption,
		ItemsHTMLInfoMaker $itemsHTMLInfoMaker) {

中略

		$response = $itemsHTMLInfoMaker->requestItemSearch ( $urlInfo,
				$itemHTMLOption->getNumberToDisplay () );
		$itemArray = $itemsHTMLInfoMaker->makeItemArray ( $response, $itemHTMLOption ); // var_dump($itemArray);
		$itemsHtml = ItemArrayHTMLMaking::makeItemArrayHTML ( $itemArray, $itemHTMLOption );

以下省略

キーワードで商品検索して、商品情報を取得して、「アフィリエイト商品のHTML」を作成します。

makeItemsHTML()関数は、主に以下の三つの処理を行ないます。

  1. キーワードで商品検索して、「商品の検索結果」を取得すること。
  2. 取得した「商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成すること。
  3. 作成した「当プラグイン用の商品情報の配列」を基に、「アフィリエイト商品のHTML」を作成すること。

ソースコードのメソッドで言うと、以下の通りです。

  1. $itemsHTMLInfoMaker->requestItemSearch()メソッドを用いて、「商品の検索結果」を取得します。
  2. $itemsHTMLInfoMaker->makeItemArray()メソッドを用いて、「当プラグイン用の商品情報の配列」を作成します。
  3. ItemArrayHTMLMaking::makeItemArrayHTML()関数を用いて、「アフィリエイト商品のHTML」を作成します。

作成された、アマゾンの「アフィリエイト商品のHTML」

$itemsHtml変数は、「当プラグイン用の商品情報の配列」から作成した、アマゾンの「アフィリエイト商品のHTML」を保持します。

アマゾンの「アフィリエイト商品のHTML」を保持する$itemsHtml変数の例。

<div class="goodsmemo-amazon-items goodsmemo-items">
<div class="goodsmemo-amazon-item1 goodsmemo-oneItem">

	<div class="imageArea" >
	<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">
	<img src="https://m.media-amazon.com/images/I/XXXXiVIarbL._SL160_.jpg" alt="プログラミングPHP 第4版" width="125" height="160" />
	</a>
	</div>

	<p class="title"  >
	<a href="https://www.amazon.co.jp/dp/XXXX400276?tag=sample-22&linkCode=osi&th=1&psc=1">プログラミングPHP 第4版</a>
	</p>

	<div class="itemDetailsTable">
		<div class="tableRow" >
		<p class="rowLabel">価格:</p>
		<p class="price">
		<span class="priceValue">4,290 円</span><span class="priceTime">(2023年4月15日 16:58時点<a href="#goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="priceTimeLink" >詳細はこちら</a>)</span>
		</p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="preferentialMember"></p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="postage"></p>
		</div>
	</div>

	<div class="itemDetailsTable">
		<div class="tableRow" style="display: none;">
		<p class="rowLabel">ポイント:</p>
		<p class="pointRate"> 倍</p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="pointRateStartTime">✓開始日時 </p>
		</div>

		<div class="tableRow" style="display: none;">
		<p class="rowLabel"></p>
		<p class="pointRateEndTime">✓終了日時 </p>
		</div>
	</div>

	<div class="itemDetailsTable">
		<div class="tableRow" >
		<p class="rowLabel"></p>
		<p class="contributor">Kevin XXXX(著), Peter XXXX(著), 永井 XXXX(監修), 中野 XXXX(翻訳)</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">出版社:</p>
		<p class="manufacturer">XXXXジャパン</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">種別:</p>
		<p class="binding">単行本(ソフトカバー)</p>
		</div>

		<div class="tableRow" >
		<p class="rowLabel">販売店:</p>
		<p class="shop">Amazon.co.jp</p>
		</div>
	</div>

	<p class="review">商品の主な機能に関する情報その1。<br>商品の主な機能に関する情報その2。<br>商品の主な機能に関する情報その3。</p>

</div>
<div id="goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="footer">
価格の詳細:価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。
本商品の購入においては、購入の時点でAmazon.co.jpに表示されている価格および発送可能時期の情報が適用されます。
</div>
</div>

上記のHTMLが、当プラグインのショートコードが記述されている場所に、表示されます。
アマゾンの商品が、アフィリエイト対象の商品として表示されます。

キーワードによる商品検索で、「アフィリエイト商品のHTML」を作成する処理、
その詳細については、以下の記事を参照してください。

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

キーワードで商品検索して、商品情報を取得して、「アフィリエイト商品のHTML」を作成する。 上記の処理を行うPHPソースコードを解説しています。

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する

public static function makeItemArrayHTML($itemArray,
		ItemHTMLOption $itemHTMLOption) {

中略

	return $itemArrayHTML;
}

makeItemArrayHTML()関数は、

$itemArray配列変数が保持する「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成します。

「アフィリエイト商品のHTML」は、以下の項目を表示するHTMLです。

  • 商品ページへのURL。
  • 商品の画像情報。
  • 商品のタイトル。
  • 商品の価格情報。
  • 商品のポイント倍率情報。
  • 詳細な商品情報。
  • 優待会員の名称。
  • 販売店名。
  • 商品レビュー。

$itemArrayHTML変数は、作成された「アフィリエイト商品のHTML」を保持します。

$itemArrayHTML変数が、アマゾンの「アフィリエイト商品のHTML」を保持する場合については、

当記事の「見出し」
作成された、アマゾンの「アフィリエイト商品のHTML」
を参照してください。

アマゾンの「アフィリエイト商品のHTML」、表示例

アマゾンの「アフィリエイト商品のHTML」、表示例は以下の通りです。

「当プラグイン用の商品情報」から、「商品のタイトル」のHTMLを作成する

「当プラグイン用の商品情報」から、「商品のタイトル」のHTMLを作成する場合についてです。

$title = ItemArrayHTMLMaking::makeTitle ( $item, $itemHTMLOption );

中略

<a href="{$pageURL}">{$title}</a>

$title変数は、「当プラグイン用の商品情報」の「商品のタイトル」を保持します。

「商品のタイトル」の「aタグのHTML」については、実際のところ、PHPのヒアドキュメント内に記述されています。

「商品のタイトル」のHTMLの例。

<a href="https:// 省略 ">プログラミングPHP 第4版</a>

ヒアドキュメント内に記述されている、「商品のタイトル」の「aタグのHTML」に対して、
「商品のタイトル」の文字列を保持する$title変数を、展開します。

上記の「aタグのHTML」では、「商品のタイトル」は、

「プログラミングPHP 第4版」という文字列です。

以上より、「商品のタイトル」のHTMLを作成します。

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する処理、
その詳細については、以下の記事を参照してください。

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する

「当プラグイン用の商品情報の配列」から、「アフィリエイト商品のHTML」を作成する処理について、PHPソースコードを解説しています。

「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成する

// 「ちょうどいい」の単語で「fit」を選んだ。
public static function makeFitReviewText(
	ReviewItem $reviewItem,
	ReviewItemHTMLOption $reviewItemHTMLOption
) {

中略

	$stringToBreakJSONArray = $reviewItemHTMLOption->getStringToBreakJSONArray();
	// 文字列の前または後ろに、改行タグを追加する。
	$SENTENCE_SYMBOLS = $reviewItemHTMLOption->getLatestSentenceSymbols();
	$reviewText = ReviewItemHTMLUtils::makeReviewTextWithLineBreakAdded(
		$reviewText,
		$stringToBreakJSONArray,
		$SENTENCE_SYMBOLS
	);

	return $reviewText;
}

「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成します。

ここで言う「最適な商品レビューの文字列」とは、画面上で読みやすい商品レビュー文章のことです。

例えば、

「商品説明で改行する文字」の前または後ろに、 HTMLの改行タグを追加した文字列です。

「商品レビューの文字列」において、適切な場所で改行させることで読みやすい文章にします。

ReviewItemHTMLUtils::makeReviewTextWithLineBreakAdded()関数は、

「商品レビューの文字列」から、「改行を追加した商品レビューの文字列」を作成します。

改行の追加とは、例えば、

"●"を
"<br>●"に、置換します。

この文字列置換によって、HTMLの改行タグを追加します。

このように「箇条書きの記号文字」である「●」の先頭を改行させて、箇条書きの本文を読みやすくします。

「改行を追加した商品レビューの文字列」の例。

【メール便送料無料、通常24時間以内出荷】著者:山田。<br>
<br>●通常24時間以内に出荷可能です。<br>

中略

※繁忙期やセール等、ご注文数が多い日につきましては 発送まで48時間かかる場合があります…

「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成する処理、
その詳細については、以下の記事を参照してください。

「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成する

「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成する処理について、PHPソースコードを解説しています。

「アフィリエイト商品のHTML」の「フッターのHTMLに関する情報」を作成する

if ($priceFooterText) {

	$idPrefix = $itemHTMLOption->getIdPrefix ();
	$footerDisplayTime = DateTextMaking::getUnixTimeMillSecond (); // フッターが表示された時間
	$footerTimeText = DateTextMaking::makeUnixTimeIDText ( 
			DateTextMaking::UNIX_TIME_ID_FORMAT, $footerDisplayTime );

	$footerID = GOODS_MEMO_PREFIX . "-" . $idPrefix . "-items-footer-" . $footerTimeText; // 念のため、ページ内にフッターが2個以上ある場合に対応
	$footerDiv = <<< EOD
	<div id="{$footerID}" class="footer">{$priceFooterText}</div>
	EOD;

以下省略

「アフィリエイト商品のHTML」の「フッターのHTMLに関する情報」を作成します。

「フッターのHTMLに関する情報」には、以下のものがあります。

  • 「アフィリエイト商品のHTML」の「フッタータグを特定するID(識別名)」
  • 「アフィリエイト商品のHTML」の「フッタータグ」

「フッタータグを特定するID(識別名)」を、作成する

「フッタータグを特定するID(識別名)」は、価格の「詳細はこちら」aタグにて、リンク先として使用されます。

「フッタータグを特定するID(識別名)」を保持する$footerID変数の例。

goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87

このIDは、フッタータグの「作成日時を示す文字列」を含んでいます。
「2023-04-15-16-58-58-87」という文字列です。

この「作成日時を示す文字列」は、おおよそ
2023年4月15日 16時58分58秒、87マイクロ秒
を示します。

この「作成日時を示す文字列」は、時刻情報としてマイクロ秒の情報を含んでいます。
マイクロ秒の情報を含ませることより、IDが一意になるようにしています。

「フッタータグ」を作成する

「フッタータグ」は、価格の詳細に関する説明文が書かれています。

「フッタータグ」を保持する$footerDiv変数の例。

<div id="goodsmemo-amazon-items-footer-2023-04-15-16-58-58-87" class="footer">
価格の詳細:価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。
本商品の購入においては、購入の時点でAmazon.co.jpに表示されている価格および発送可能時期の情報が適用されます。
</div>

ヒアドキュメント内に記述されている、「フッタータグ」のHTMLの「ひな型」から、フッターのdivタグを作成します。

「アフィリエイト商品のHTML」の「フッターのHTMLに関する情報」を作成する処理、
その詳細については、以下の記事を参照してください。

「アフィリエイト商品のHTML」の「フッターのHTMLに関する情報」を作成する

「アフィリエイト商品のHTML」の「フッターのHTMLに関する情報」を作成する処理について、PHPソースコードを解説しています。