Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する
Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する処理について、PHPソースコードを解説しています。
「表示するHTML」は、当プラグインの「アマゾンの設定」から取得します。
「表示するHTML」の中に予約された文字列がある場合は、それらを適切な文字列に置換します。
- Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する
- Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを保存する
- Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを識別する、トランジェント識別子を作成する
- Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを取得する
- インターフェースの変数に対して、AmazonItemsHTMLInfoMakerクラスを指定しました
- DisplayHTMLPAAPINotAvailableUtils.phpのソースコード
Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成する
public static function makeDisplayHTMLPAAPINotAvailable(CommonRESTParameter $commonParameter,
RESTParameter $restParameter, DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {
$displayHTML = $displayHTMLOption->getDisplayHTMLPAAPINotAvailable ();
$searchArray = array ("GOODS_MEMO_ASSOCIATE_TAG","GOODS_MEMO_SEARCH_KEYWORD",
"GOODS_MEMO_ENCODED_SEARCH_KEYWORD"
);
$associateTag = $commonParameter->getAssociateTag ();
$keyword = $restParameter->getKeyword ();
$encoded_keyword = rawurlencode ( $keyword );
$replaceArray = array ($associateTag,$keyword,$encoded_keyword
);
$newDisplayHTML = str_replace ( $searchArray, $replaceArray, $displayHTML );
return $newDisplayHTML;
}
makeDisplayHTMLPAAPINotAvailable()関数では、
Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」を作成します。
「アマゾンの設定」から、「表示するHTML」を取得する
$displayHTML = $displayHTMLOption->getDisplayHTMLPAAPINotAvailable ();
上記のソースコードでは、$displayHTML変数に「表示するHTML」を代入します。
「表示するHTML」は、以下の「アマゾンの設定」から取得します。
- 当プラグインの「アフィリエイトの設定」
- アマゾンの設定
- Product Advertising API 利用不可の時、「表示するHTML」
- アマゾンの設定
※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定。
上記の「アマゾンの設定」で入力する「表示する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」の中にある予約された文字列は、各文字列に置換される
「表示するHTML」の中にある予約された文字列は、「アソシエイトタグ」などに置換されます。
予約された文字列 | 予約された文字列を置換する文字列 |
---|---|
GOODS_MEMO_ASSOCIATE_TAG | 「アソシエイトタグ」に置換されます。 |
GOODS_MEMO_SEARCH_KEYWORD | 「キーワード」に置換されます。 |
GOODS_MEMO_ENCODED_SEARCH_KEYWORD | 「URLエンコードされたキーワード」に置換されます。 |
「アソシエイトタグ」は、以下の「アマゾンの設定」から取得します。
- 当プラグインの「アフィリエイトの設定」
- アマゾンの設定
- Product Advertising API アソシエイトタグ
- アマゾンの設定
※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定。
「キーワード」は、当プラグインのショートコードのkeyword属性から取得します。
※関連記事:アフィリエイト商品表示・WordPressプラグイン、ショートコードの属性
例えば以下のように、予約された文字列は各文字列に置換されます。
GOODS_MEMO_ASSOCIATE_TAGは、"sampleXXX-22"のような「アソシエイトタグ」に、置換されます。
GOODS_MEMO_SEARCH_KEYWORDは、"PHPプログラミング"のような「キーワード」に、置換されます。
キーワードが"PHPプログラミング"の場合、
GOODS_MEMO_ENCODED_SEARCH_KEYWORDは、
"PHP%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0"
のような「URLエンコードされたキーワード」に、置換されます。
以上より、「アマゾンサイトを検索するリンクタグ」は、「リンクタグその1」から「リンクタグその2」のように置換されます。
「リンクタグその1」
https://www.amazon.co.jp/s?k=GOODS_MEMO_ENCODED_SEARCH_KEYWORD& 中略
&tag=GOODS_MEMO_ASSOCIATE_TAG& 中略
「GOODS_MEMO_SEARCH_KEYWORD」の商品を検索する</a>
「リンクタグその2」
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& 中略
&tag=sampleXXX-22& 中略
「PHPプログラミング」の商品を検索する</a>
下記のソースコードでは、$newDisplayHTML変数に、予約された文字列が置換された「表示するHTML」を、代入します。
予約された文字列が置換された「表示するHTML」を保持する$newDisplayHTML変数は、 return文によって返されます。
$newDisplayHTML = str_replace ( $searchArray, $replaceArray, $displayHTML );
return $newDisplayHTML;
検索・置換対象の文字列を配列で指定するstr_replace()関数
PHPのstr_replace()関数は、
- 検索する文字列
- 置換する文字列
これらを、それぞれの配列で指定できます。
検索して置換する文字列の組み合わせが複数ある時、str_replace()関数はとても便利だと思いました。
実は当初、検索・置換対象の文字列をそれぞれの配列で指定することに、ちょっと違和感がありました。
検索・置換対象の文字列を、マップで(キーと値で)指定する。
そうする方がわかりやすいのに、と思ったからです。
検索・置換対象の文字列を、マップで指定する例。
$searchReplaceMap = array(
"検索その1"=>"置換その1",
"検索その2"=>"置換その2"
);
実際のところ、検索する文字列、置換する文字列を、それぞれの配列に指定します。
$search = array( "検索その1", "検索その2");
$replace = array( "置換その1", "置換その2");
$new_string = str_replace($search, $replace, "検索置換される文字列 検索その1 検索その2");
"検索その1"と"検索その2"を、
それぞれ"置換その1"と"置換その2"に、置き換えます。
結果として出力される新しい文字列は、
"検索置換される文字列 置換その1 置換その2"
です。
str_replace()関数では、検索・置換対象の文字列を、マップで指定することはできません。
だけど、str_replace()関数は便利なので、これからも使ってゆく予定です。
makeDisplayHTMLPAAPINotAvailable()関数内で、不要な情報を引数で渡していました
public static function makeDisplayHTMLPAAPINotAvailable(
CommonRESTParameter $commonParameter,
RESTParameter $restParameter, DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {
中略
$associateTag = $commonParameter->getAssociateTag ();
中略
}
makeDisplayHTMLPAAPINotAvailable()関数では、引数で、
CommonRESTParameterクラスの$commonParameter変数を、渡しています。
CommonRESTParameterクラスは、アソシエイトタグ以外の情報を持っています。
class CommonRESTParameter {
private $accessKey;
private $associateTag;
private $secretKey;
private $region;
public function getAccessKey() {
return $this->accessKey;
}
public function getAssociateTag() {
return $this->associateTag;
}
public function getSecretKey() {
return $this->secretKey;
}
public function getRegion() {
return $this->region;
}
以下省略
- アクセスキー($accessKey変数)
- シークレットキー($secretKey変数)
- リージョン($region変数)
これらの情報は、makeDisplayHTMLPAAPINotAvailable()関数では不要です。
そんな不要な情報を、引数の$commonParameter変数で渡していました。
関数内で不要な情報を利用できると、不具合が発生するきっかけになったりします
このように、関数内で不要な情報を利用できる状態にすることは、関数内で不具合が発生するきっかけになったりします。
例えば、以下のソースコードのように、間違ったメソッドを呼び出しても、エラーになりません。
関数内で、$commonParameterインスタンス変数からgetAccessKey ()メソッドを呼び出せるからです。
public static function makeDisplayHTMLPAAPINotAvailable(
CommonRESTParameter $commonParameter,
RESTParameter $restParameter, DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {
中略
//正しいメソッドを呼び出しています
//$associateTag = $commonParameter->getAssociateTag ();
//間違ったメソッドを呼び出しています
$associateTag = $commonParameter->getAccessKey ();
中略
}
もちろん、正しくプログラミングすれば、このような記述ミスは起きません。
なので、心配しすぎかもしれません。
けれども、
- 関数の引数で、関数内に不要な情報を渡さないこと
- 関数内で、不要な情報を利用できない状態にしておくこと
そうすることは、関数内のソースコードの品質を良くするのに役立つ、と言えます。
makeDisplayHTMLPAAPINotAvailable()関数の引数に、「アソシエイトタグの値」だけを保持する変数を指定します
public static function makeDisplayHTMLPAAPINotAvailable(
CommonRESTParameter $commonParameter,
RESTParameter $restParameter, DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {
中略
$associateTag = $commonParameter->getAssociateTag ();
中略
}
上記ソースコードの$commonParameter変数では、関数内で「アソシエイトタグの値」だけ使用しています。
なので実際のところ、以下のソースコードのように、
関数の引数に、「アソシエイトタグの値」だけを保持する$associateTag変数を、指定すれば良い
と言えます。
public static function makeDisplayHTMLPAAPINotAvailable(
string $associateTag,
RESTParameter $restParameter, DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {
中略
//メソッド内では不要です
//$associateTag = $commonParameter->getAssociateTag ();
中略
}
上記のソースコードの方が、関数に対して必要な情報だけを渡している、ということになります。
Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを保存する
public static function setDisplayHTMLPAAPINotAvailableCache(string $displayHTML,
ItemHTMLOption $itemHTMLOption, AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$transientID = DisplayHTMLPAAPINotAvailableUtils::makeTransientID ( $itemHTMLOption,
$itemsHTMLInfoMaker );
$cacheExpirationInSeconds = $itemHTMLOption->getCacheExpirationInSeconds ();
// 一時的にデータベースに「Product Advertising API 利用不可の時、表示するHTML」を保存する。有効期限後、削除される。
set_transient ( $transientID, $displayHTML, $cacheExpirationInSeconds );
}
set_transient()関数は、ワードプレスにおいて、一時的なデータ保存を行う関数です。
この関数を使うことで、ワードプレスプラグインが保持するデータを、キャッシュとして保存できます。
上記のソースコードでは、set_transient()関数を用いて、
Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを保存します。
$transientID変数は、保存するキャッシュを識別する識別子です。
保存するキャッシュを特定する、一意な文字列です。
$cacheExpirationInSeconds変数は、キャッシュを保存する時間です。
保存したキャッシュが期限切れになるまでの秒数です。
「表示するHTML」は負担の軽いデータだけど、キャッシュに保存しています
ワードプレスにおいてキャッシュを使う理由は、主にサーバーの負荷を軽減するためです。
キャッシュのデータがあれば、ワードプレスでPHPやデータベースを実行することなく、記事の中にキャッシュデータの内容を表示できます。
なお、ここでキャッシュデータとして保存している「表示するHTML」については、小さなデータと言えます。
「表示するHTML」を作成するのに、あまりサーバー処理の負担はない、と言えます。
「表示するHTML」は負担の軽いデータだけど、サーバーの負荷を軽減するために、キャッシュデータに保存しています。
例えば、当プラグインのショートコードを、大量にアクセスがあるワードプレスの記事で使用する際、キャッシュを使う方がサーバーの負担を軽減できます。
Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを識別する、トランジェント識別子を作成する
private static function makeTransientID(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$uniqueText = $itemsHTMLInfoMaker->makeUniqueText ( $itemHTMLOption );
$uniqueTextOfDisplayHTML = DisplayHTMLPAAPINotAvailableUtils::DISPLAY_HTML_PAAPI_NOT_AVAILABLE_PREFIX .
$uniqueText;
// $transientID:キャッシュされるデータにつけるユニークな識別子。長さ 45 文字以下であること。
// md5() :32 文字の 16 進数からなるハッシュを返します。
$transientID = GOODS_MEMO_PREFIX . md5 ( $uniqueTextOfDisplayHTML );
return $transientID;
}
ワードプレスでキャッシュ機能を使う際、set_transient()関数を使います。
この関数では、キャッシュを特定するトランジェント識別子が必要です。
トランジェント識別子については、
- 一意な文字列であること
- 文字列の長さは40文字以下であること
これらの点が推奨されています。
この推奨されている事項を守るために、
当プラグインを示す接頭辞(GOODS_MEMO_PREFIX)とmd5()関数を使って、トランジェント識別子を作成しています。
トランジェント識別子が他のプラグインなどと競合しないように、当プラグインの接頭辞を使用する
トランジェント識別子は、他のプラグインやテーマと競合しないようにユニークである必要があります。
そのためには、当プラグインに関する接頭辞を使用してトランジェント識別子の文字列を作る、と良いです。
GOODS_MEMO_PREFIX接頭辞は、以下の通りです。
"goodsmemo"という文字列です。
GOODS_MEMO_PREFIX定数の定義。
define ( "GOODS_MEMO_PREFIX", "goodsmemo" );
接頭辞については、$uniqueTextOfDisplayHTML変数に一意な文字列を代入する際、
以下のDISPLAY_HTML_PAAPI_NOT_AVAILABLE_PREFIXも、使用しています。
private const DISPLAY_HTML_PAAPI_NOT_AVAILABLE_PREFIX = "display_html";
ただし、"display_html"という接頭辞はmd5()関数によって、ハッシュ値になってしまいます。
"display_html"という文字列の見た目は、なくなります。
トランジェント識別子を作るために、md5()関数を使用しました
上記のソースコードをプログラミングしていた当時、
45文字以下のトランジェント識別子を作るために、md5()関数を使用しました。
md5()関数は、与えられた文字列のMD5ハッシュ値を返す、PHPの組み込み関数です。
そのハッシュ値は、32文字の16進形式で表現されています。
md5()関数を使っておきながら、今さら言うのもなんですが、
識別子の文字列を作るためにmd5()関数を使うのは、正しい使い方なのか、やや自信がありません。
改めてmd5()関数について調べたところ、パスワードなどの機密情報を保存するために使ってはいけないそうです。
現在では、md5()関数にはセキュリティ上の問題があるから、ということです。
ワードプレスプラグインのキャッシュデータを特定するトランジェント識別子は、パスワードのような機密情報ではない、と思います。
なので、トランジェント識別子を作成するためにmd5()関数を使っても大丈夫だろう、と思っています。
ワードプレスプラグインのようなウェブサイト上で動作するプログラムでは、
セキュリティ上、問題がないか?
常に気をつける必要があります。
自作プログラムのセキュリティ対策については、いつもこれで大丈夫か?と悩みます。
トランジェント識別子の文字数は、40文字以下にしましょう
上記のソースコードを記述した当時(たぶん2018年当時)、トランジェント識別子については45文字以下であること、という情報を得ていました。
しかし改めて調べたところ、WordPressの公式ドキュメントによると、40文字以下であることが推奨されていました。
よってトランジェント識別子の文字数は、40文字以下にする方が良いです。
キーワードによる商品検索の検索条件に対応する、一意な文字列を取得する
private static function makeTransientID(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$uniqueText = $itemsHTMLInfoMaker->makeUniqueText ( $itemHTMLOption );
以下省略
$itemsHTMLInfoMakerインスタンス変数のmakeUniqueText()メソッドは、
アマゾンにおける、キーワードによる商品検索の検索条件に対応する、一意な文字列を作成します。
※関連記事:アマゾン商品のHTMLに関する情報を作成する、「アマゾンにおける、キーワードによる商品検索の検索条件に対応する、一意な文字列を作成する」。
その一意な文字列を、$uniqueText変数に代入します。
$uniqueText変数は、その後の処理で、
「表示するHTML」のキャッシュを識別する、トランジェント識別子を作るために使用されます。
Product Advertising API 利用不可の時に表示する、「表示するHTML」のキャッシュを取得する
public static function getDisplayHTMLPAAPINotAvailableCache(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
中略
$transientID = DisplayHTMLPAAPINotAvailableUtils::makeTransientID ( $itemHTMLOption,
$itemsHTMLInfoMaker );
$displayHTMLCache = get_transient ( $transientID );
return $displayHTMLCache;
}
get_transient()関数は、ワードプレスのキャッシュ機能を利用できる関数です。
指定したトランジェント識別子に対応するキャッシュを取得します。
DisplayHTMLPAAPINotAvailableUtils::makeTransientID()関数によって、
Product Advertising API 利用不可の時に表示する、「表示するHTML」を特定するトランジェント識別子を、取得します。
取得したトランジェント識別子をget_transient ()関数に指定して、「表示するHTML」のキャッシュを取得します。
「表示するHTML」のキャッシュが存在しない場合は、get_transient()関数はfalseを返します。
当プラグインの設定で「キャッシュしない」と指示されていたら、「キャッシュデータなし」と処理する
public static function getDisplayHTMLPAAPINotAvailableCache(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$cacheExpirationInSeconds = $itemHTMLOption->getCacheExpirationInSeconds ();
if ($cacheExpirationInSeconds <= 0) {
return false;
}
以下省略
上記ソースコードにおいて、$cacheExpirationInSeconds変数に、「商品情報のキャッシュ時間(秒)」を代入します。
商品情報のキャッシュ時間が0秒と指定されていて、$cacheExpirationInSeconds変数の値が0以下の場合、
つまり、当プラグインの設定において「キャッシュしない」と指示されていたら、
「表示するHTML」のキャッシュが存在しないことを示すfalseを、return文で返します。
$cacheExpirationInSeconds変数に代入される「商品情報のキャッシュ時間(秒)」は、以下の設定画面で設定されています。
- 当プラグインの「アフィリエイトの設定」
- アマゾンの設定
- 商品情報のキャッシュ時間(秒)
- アマゾンの設定
※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、アマゾンの設定。
インターフェースの変数に対して、AmazonItemsHTMLInfoMakerクラスを指定しました
class DisplayHTMLPAAPINotAvailableUtils {
public static function getDisplayHTMLPAAPINotAvailableCache(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
省略
}
public static function setDisplayHTMLPAAPINotAvailableCache(string $displayHTML,
ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
省略
}
private static function makeTransientID(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
省略
}
}
上記ソースコード、それぞれのstaticメソッドの引数において、
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMakerという風に、
AmazonItemsHTMLInfoMakerクラスを指定しています。
その訳は、$itemsHTMLInfoMaker変数がアマゾンに依存していることを示すためです。
$itemsHTMLInfoMaker変数については、以下のようにItemsHTMLInfoMakerインターフェースを指定できます。
goodsmemo\item\ItemsHTMLInfoMaker $itemsHTMLInfoMaker
ですが、DisplayHTMLPAAPINotAvailableUtilsクラスは、アマゾン専用のユーティリティクラスです。
なぜなら、DisplayHTMLPAAPINotAvailableUtilsクラスは、
Amazon Product Advertising API 利用不可の時に表示する、「表示するHTML」に関する処理を集めたクラスだからです。
例えば、楽天市場の「アフィリエイト商品のHTML」を作成する処理では、「表示するHTML」に関する処理を使いません。
よって、DisplayHTMLPAAPINotAvailableUtilsクラスでは、
アマゾンに依存していることを示すAmazonItemsHTMLInfoMakerクラスを、使用しています。
DisplayHTMLPAAPINotAvailableUtils.phpのソースコード
<?php
namespace goodsmemo\amazon\displayhtml;
use goodsmemo\amazon\CommonRESTParameter;
use goodsmemo\amazon\RESTParameter;
use goodsmemo\amazon\displayhtml\DisplayHTMLPAAPINotAvailableOption;
use goodsmemo\amazon\AmazonItemsHTMLInfoMaker;
use goodsmemo\item\html\ItemHTMLOption;
require_once GOODS_MEMO_DIR . "amazon/CommonRESTParameter.php";
require_once GOODS_MEMO_DIR . "amazon/RESTParameter.php";
require_once GOODS_MEMO_DIR . "amazon/displayhtml/DisplayHTMLPAAPINotAvailableOption.php";
require_once GOODS_MEMO_DIR . "amazon/AmazonItemsHTMLInfoMaker.php";
require_once GOODS_MEMO_DIR . "item/html/ItemHTMLOption.php";
class DisplayHTMLPAAPINotAvailableUtils {
private const DISPLAY_HTML_PAAPI_NOT_AVAILABLE_PREFIX = "display_html";
public static function makeDisplayHTMLPAAPINotAvailable(CommonRESTParameter $commonParameter,
RESTParameter $restParameter, DisplayHTMLPAAPINotAvailableOption $displayHTMLOption) {
$displayHTML = $displayHTMLOption->getDisplayHTMLPAAPINotAvailable ();
$searchArray = array ("GOODS_MEMO_ASSOCIATE_TAG","GOODS_MEMO_SEARCH_KEYWORD",
"GOODS_MEMO_ENCODED_SEARCH_KEYWORD"
);
$associateTag = $commonParameter->getAssociateTag ();
$keyword = $restParameter->getKeyword ();
$encoded_keyword = rawurlencode ( $keyword );
$replaceArray = array ($associateTag,$keyword,$encoded_keyword
);
$newDisplayHTML = str_replace ( $searchArray, $replaceArray, $displayHTML );
return $newDisplayHTML;
}
public static function getDisplayHTMLPAAPINotAvailableCache(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$cacheExpirationInSeconds = $itemHTMLOption->getCacheExpirationInSeconds ();
if ($cacheExpirationInSeconds <= 0) {
return false;
}
$transientID = DisplayHTMLPAAPINotAvailableUtils::makeTransientID ( $itemHTMLOption,
$itemsHTMLInfoMaker );
$displayHTMLCache = get_transient ( $transientID );
return $displayHTMLCache;
}
public static function setDisplayHTMLPAAPINotAvailableCache(string $displayHTML,
ItemHTMLOption $itemHTMLOption, AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$transientID = DisplayHTMLPAAPINotAvailableUtils::makeTransientID ( $itemHTMLOption,
$itemsHTMLInfoMaker );
$cacheExpirationInSeconds = $itemHTMLOption->getCacheExpirationInSeconds ();
// 一時的にデータベースに「Product Advertising API 利用不可の時、表示するHTML」を保存する。有効期限後、削除される。
set_transient ( $transientID, $displayHTML, $cacheExpirationInSeconds );
}
private static function makeTransientID(ItemHTMLOption $itemHTMLOption,
AmazonItemsHTMLInfoMaker $itemsHTMLInfoMaker) {
$uniqueText = $itemsHTMLInfoMaker->makeUniqueText ( $itemHTMLOption );
$uniqueTextOfDisplayHTML = DisplayHTMLPAAPINotAvailableUtils::DISPLAY_HTML_PAAPI_NOT_AVAILABLE_PREFIX .
$uniqueText;
// $transientID:キャッシュされるデータにつけるユニークな識別子。長さ 45 文字以下であること。
// md5() :32 文字の 16 進数からなるハッシュを返します。
$transientID = GOODS_MEMO_PREFIX . md5 ( $uniqueTextOfDisplayHTML );
return $transientID;
}
}