【まとめ記事】アマゾンの商品を表示する場合、「アフィリエイト商品表示・WordPressプラグイン」のPHPソースコード解説
アマゾンの商品を表示するWordPressプラグインを、作ってみたいです。
「アフィリエイト商品表示・WordPressプラグイン」は、
キーワードで検索した商品を、
アフィリエイト対象の商品として表示するプラグインです。
当プラグインを用いて、アマゾンの商品を表示する処理について、PHPソースコードを解説しています。
当プラグインを用いてアマゾンの商品を表示する場合、大まかな処理は以下の通りになります。
- アマゾンの商品を表示したい場所に、当プラグインのショートコードを記述します。
- その際、当プラグインのショートコードのservice属性に、amazonを指定します。
キーワード文字列など、他のショートコードの属性を適切に指定します。 - Amazon Product Advertising APIを使って、「アマゾン商品の検索結果」を取得します。
- 「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成します。
- 「当プラグイン用の商品情報の配列」から、アマゾンの「アフィリエイト商品のHTML」を作成します。
- 当プラグインのショートコードを記述してある場所に、アマゾンの「アフィリエイト商品のHTML」を表示します。
以上の処理より、アマゾンの商品を、アフィリエイト対象の商品として表示します。
以上の処理について、PHPソースコードを解説しています。
ソースコードの解説を読んだら、アフィリエイト商品を表示するWordPressプラグインの作り方を、少しずつ理解できます。
- 「アフィリエイト商品表示・WordPressプラグイン」のソースコード
- アマゾンの商品を表示する場合、「アフィリエイト商品表示・WordPressプラグイン」の使い方
- 「アフィリエイト商品表示・WordPressプラグイン」のショートコードの処理について、PHPソースコードの解説
- Amazon Product Advertising APIを使って、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する処理について、PHPソースコードの解説
- 「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理について、PHPソースコードの解説
- 「当プラグイン用の商品情報の配列」から、「アフィリエイト商品の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プラグイン」のショートコードの処理について、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ファイルであることを、示します。
当プラグインのショートコード登録の処理、
その詳細については、以下の記事を参照してください。
ショートコードの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()関数を呼び出します。
ショートコードの属性に関連する処理、
その詳細については、以下の記事を参照してください。
ショートコードの各属性をまとめたShortcodeAttributeクラス
class ShortcodeAttribute {
private $keyword;
public function getKeyword() {
return $this->keyword;
}
public function setKeyword($keyword) {
$this->keyword = $keyword;
}
以下省略
}
ShortcodeAttributeクラスは、ショートコードの各属性をまとめたクラスです。
主に、データを保持するためのクラスになります。
ショートコードの各属性をまとめて管理するために、このようなデータを保持する目的のクラスを作成しています。
データを保持するためのクラスは、一般的に以下のメソッドを持っています。
- データの値を取得するためのgetterメソッド。
- データの値を設定するためのsetterメソッド。
getterメソッドやsetterメソッドを用意することで、
データの値について、取得する処理や設定する処理を管理しやすくなります。
データの値を管理しやすくなるため、例えばデータの値に関するデバッグ作業がはかどります。
ショートコードの各属性をまとめたShortcodeAttributeクラスの処理、
その詳細については、以下の記事を参照してください。
ショートコードの属性に関する処理を集めたユーティリティクラス
当プラグインのプログラムでは、 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クラスだけを探せば良いからです。
ショートコードの属性に関するユーティリティクラスの処理、
その詳細については、以下の記事を参照してください。
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」を作成する処理、
その詳細については、以下の記事を参照してください。
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に関する情報」とは、
アマゾンの「アフィリエイト商品のHTML」を作成する処理において、必要な情報のことです。
「アマゾン商品のHTMLに関する情報」は、以下の三つです。
- キーワードによる商品検索で取得した、「アマゾン商品の検索結果」。
- 「アマゾン商品の検索結果」を基に作成した、「当プラグイン用の商品情報の配列」。
- アマゾンにおける、キーワードによる商品検索の検索条件に対応する、「一意な文字列」。
上記の三つの情報については、AmazonItemsHTMLInfoMakerクラスが、これら三つの情報を作成します。
「アマゾン商品のHTMLに関する情報」を作成する処理、
その詳細については、以下の記事を参照してください。
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」を作成する処理、
その詳細については、以下の記事を参照してください。
商品検索がエラーの時に再試行することで、「アマゾン商品の検索結果」を取得する
$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文のループ処理は終了します。
「アマゾン商品の検索結果」を取得する時に、エラーが発生した場合、再試行する処理、
その詳細については、以下の記事を参照してください。
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で、キーワードで商品検索して、「アマゾン商品の検索結果」を取得する処理、
その詳細については、以下の記事を参照してください。
「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理について、PHPソースコードの解説
「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する
「アマゾン商品の検索結果」とは、Amazon Product Advertising APIを使って、キーワードで商品検索して取得した結果です。
この「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成します。
「当プラグイン用の商品情報の配列」を作成するために、まずは、1個の「当プラグイン用の商品情報」を作成します。
- 1個の「アマゾン商品の検索結果」について、「有効なアマゾン商品」かどうか、判断します。
- アマゾン商品が有効な場合、
1個の「アマゾン商品の検索結果」から、1個の「当プラグイン用の商品情報」を作成します。 - 作成した、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
)
)
「アマゾン商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成する処理、
その詳細については、以下の記事を参照してください。
「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する
「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成します。
「当プラグイン用の商品の画像情報」は、以下のものを保持します。
- 画像の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
)
「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する処理、
その詳細については、以下の記事を参照してください。
「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成する
「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成します。
「当プラグイン用の商品の価格情報」は、以下のものを保持します。
- 価格の名称。
- 価格。
- 「当プラグイン用の商品の価格情報」を作成した日時。
- 価格の付け足し情報。
- 送料。
「アマゾン商品の情報」から、「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] =>
以下省略
)
「アマゾン商品の情報」から、「当プラグイン用の商品の価格情報」を作成する処理、
その詳細については、以下の記事を参照してください。
「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成する
「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成します。
「当プラグイン用の詳細な商品情報」には、以下のものがあります。
- 商品に関連付けられた投稿者。
- 商品の製造者ラベル。
- 商品の製造者。
- 商品の種別。
「アマゾン商品の情報」から、「商品の種別」を作成する
「アマゾン商品の情報」から、「商品の種別」を作成する場合についてです。
$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] => 大型本
)
「アマゾン商品の情報」から、「当プラグイン用の詳細な商品情報」を作成する処理、
その詳細については、以下の記事を参照してください。
「当プラグイン用の商品情報の配列」から、「アフィリエイト商品の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()関数は、主に以下の三つの処理を行ないます。
- キーワードで商品検索して、「商品の検索結果」を取得すること。
- 取得した「商品の検索結果」から、「当プラグイン用の商品情報の配列」を作成すること。
- 作成した「当プラグイン用の商品情報の配列」を基に、「アフィリエイト商品のHTML」を作成すること。
ソースコードのメソッドで言うと、以下の通りです。
- $itemsHTMLInfoMaker->requestItemSearch()メソッドを用いて、「商品の検索結果」を取得します。
- $itemsHTMLInfoMaker->makeItemArray()メソッドを用いて、「当プラグイン用の商品情報の配列」を作成します。
- 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」を作成する
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」を作成する処理、
その詳細については、以下の記事を参照してください。
「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成する
// 「ちょうどいい」の単語で「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時間かかる場合があります…
「当プラグイン用の商品情報」の「商品レビュー」から、「最適な商品レビューの文字列」を作成する処理、
その詳細については、以下の記事を参照してください。
「アフィリエイト商品の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に関する情報」を作成する処理、
その詳細については、以下の記事を参照してください。