「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する
「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する処理について、PHPソースコードを解説しています。
「当プラグイン用の商品の画像情報」は、以下のものを保持します。
- 画像のURL。
- 画像の幅(ピクセル数)。
- 画像の高さ(ピクセル数)。
商品画像の大きさの優先順位については、ミディアムサイズを優先します。
「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成する
public static function makeImageItem($searchItem): ImageItem {
$imageItem = new ImageItem ();
if (isset ( $searchItem->Images ) and isset ( $searchItem->Images->Primary )) {
;
} else {
return $imageItem;
}
$primaryImages = $searchItem->Images->Primary;
// 大きさの優先順位は、ミディアム、ラージ、スモール
if (isset ( $primaryImages->Medium )) {
$imageSize = $primaryImages->Medium;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
if (isset ( $primaryImages->Large )) {
$imageSize = $primaryImages->Large;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
if (isset ( $primaryImages->Small )) {
$imageSize = $primaryImages->Small;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
return $imageItem;
}
$searchItem変数は、「アマゾン商品の情報」を保持します。
その「アマゾン商品の情報」が保持する「商品の画像情報」から、「当プラグイン用の商品の画像情報」を作成します。
作成された「当プラグイン用の商品の画像情報」は、$imageItem変数が保持しています。
「アマゾン商品の情報」が保持する「商品の画像情報」において、商品画像の大きさは、以下の三種類があります。
- ラージ
- ミディアム
- スモール
「当プラグイン用の商品の画像情報」を作成する場合、商品画像の大きさの優先順位は、以下の通りです。
- ミディアム
- ラージ
- スモール
商品画像の大きさがミディアムのものから優先して、「当プラグイン用の商品の画像情報」を作成します。
「当プラグイン用の商品の画像情報」を保持するImageItemクラス
「当プラグイン用の商品の画像情報」を保持する$imageItem変数は、ImageItemクラスの変数です。
class ImageItem {
private $imageURL = "";
private $imageWidth = 0;
private $imageHeight = 0;
以下省略
ImageItemクラスは、以下の「当プラグイン用の商品の画像情報」を保持します。
ImageItemクラスのメンバ変数 | ImageItemクラスのメンバ変数の説明 |
---|---|
$imageURL | 画像のURL。 |
$imageWidth | 画像の幅(ピクセル数)。 |
$imageHeight | 画像の高さ(ピクセル数)。 |
ミディアムサイズの「商品の画像情報」を、「当プラグイン用の商品の画像情報」を保持する$imageItem変数に設定する
$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
)
中略
)
)
)
「アマゾン商品の情報」を保持する$searchItem変数に、
ミディアムサイズの「商品の画像情報」を保持するMediumメンバ変数が存在する場合、
「当プラグイン用の商品の画像情報」を保持する$imageItem変数に、ミディアムサイズの「商品の画像情報」を設定します。
$imageSize = $primaryImages->Medium;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
$imageSize変数に、「アマゾン商品の情報」が保持する、ミディアムサイズの「商品の画像情報」を代入します。
ImageResponse::setImageInfoTo()関数に、$imageItem変数と$imageSize変数を渡して、
$imageItem変数に、ミディアムサイズの「商品の画像情報」を設定します。
$imageItem変数は参照渡しで、ImageResponse::setImageInfoTo()関数の引数に渡しています。
$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
)
「アマゾン商品の情報」から「商品画像のURL」を取得できたら、「当プラグイン用の商品の画像情報」を作成できた、と判断する
if ($imageItem->getImageURL ()) {
return $imageItem;
}
$imageItem->getImageURL()メソッドで、
ミディアムサイズの「商品画像のURL」を取得できたら、
$imageItem変数が、ミディアムサイズの「商品画像のURL」を保持していることになります。
この場合、$imageItem変数をreturn文で返します。
なぜなら、
「アマゾン商品の情報」から「商品画像のURL」を取得できたら、
「アマゾン商品の情報」から、「当プラグイン用の商品の画像情報」を作成できた、
と判断するからです。
「アマゾン商品の情報」から、
「商品画像の幅」や「商品画像の高さ」を取得できなかった場合でも、
「当プラグイン用の商品の画像情報」を作成できた、と判断しています。
ラージサイズの「商品の画像情報」を、「当プラグイン用の商品の画像情報」を保持する$imageItem変数に設定する
$primaryImages = $searchItem->Images->Primary;
中略
if (isset ( $primaryImages->Large )) {
$imageSize = $primaryImages->Large;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
$searchItem->Images->Primary->Largeメンバ変数の例。
stdClass Object
(
[ASIN] => XXXX000001
中略
[Images] => stdClass Object
(
[Primary] => stdClass Object
(
[Large] => stdClass Object
(
[Height] => 500
[URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL500_.jpg
[Width] => 391
)
中略
)
)
)
「アマゾン商品の情報」を保持する$searchItem変数に、
ラージサイズの「商品の画像情報」を保持するLargeメンバ変数が存在する場合、
「当プラグイン用の商品の画像情報」を保持する$imageItem変数に、ラージサイズの「商品の画像情報」を設定します。
ラージサイズの「商品の画像情報」を設定する処理は、画像の大きさ以外は、ミディアムサイズの「商品の画像情報」を設定する処理と同じです。
当記事の「見出し」
ミディアムサイズの「商品の画像情報」を、「当プラグイン用の商品の画像情報」を保持する$imageItem変数に設定する
を参照してください。
ミディアムサイズをラージサイズに置き換えて、上記の見出しの記事を読んでください。
スモールサイズの「商品の画像情報」を、「当プラグイン用の商品の画像情報」を保持する$imageItem変数に設定する
$primaryImages = $searchItem->Images->Primary;
中略
if (isset ( $primaryImages->Small )) {
$imageSize = $primaryImages->Small;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
$searchItem->Images->Primary->Smallメンバ変数の例。
stdClass Object
(
[ASIN] => XXXX000001
中略
[Images] => stdClass Object
(
[Primary] => stdClass Object
(
[Small] => stdClass Object
(
[Height] => 75
[URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL75_.jpg
[Width] => 58
)
中略
)
)
)
「アマゾン商品の情報」を保持する$searchItem変数に、
スモールサイズの「商品の画像情報」を保持するSmallメンバ変数が存在する場合、
「当プラグイン用の商品の画像情報」を保持する$imageItem変数に、スモールサイズの「商品の画像情報」を設定します。
スモールサイズの「商品の画像情報」を設定する処理は、画像の大きさ以外は、ミディアムサイズの「商品の画像情報」を設定する処理と同じです。
当記事の「見出し」
ミディアムサイズの「商品の画像情報」を、「当プラグイン用の商品の画像情報」を保持する$imageItem変数に設定する
を参照してください。
ミディアムサイズをスモールサイズに置き換えて、上記の見出しの記事を読んでください。
「アマゾン商品の情報」に「商品の画像情報」が存在しない場合、「商品の画像情報」が未設定の「当プラグイン用の商品の画像情報」を作成する
public static function makeImageItem($searchItem): ImageItem {
$imageItem = new ImageItem ();
if (isset ( $searchItem->Images ) and isset ( $searchItem->Images->Primary )) {
;
} else {
//「商品の画像情報」が存在しない場合
return $imageItem;
}
//ミディアムサイズの商品画像が存在する場合、「当プラグイン用の商品の画像情報」を作成する。
//または、ラージサイズの商品画像が存在する場合、「当プラグイン用の商品の画像情報」を作成する。
//または、スモールサイズの商品画像が存在する場合、「当プラグイン用の商品の画像情報」を作成する。
中略
//「商品の画像情報」が存在しない場合
return $imageItem;
}
$searchItem変数の例。
stdClass Object
(
[ASIN] => XXXX000001
中略
[Images] => stdClass Object
(
[Primary] => stdClass Object
(
中略
)
)
)
「アマゾン商品の情報」に「商品の画像情報」が存在しない場合、
「商品の画像情報」が未設定の「当プラグイン用の商品の画像情報」を、作成します。
「商品の画像情報」が未設定の「当プラグイン用の商品の画像情報」とは、
「画像のURL」などの「商品の画像情報」を設定していない$imageItem変数のことです。
if (isset ( $searchItem->Images ) and isset ( $searchItem->Images->Primary )) {
;
} else {
return $imageItem;
}
「アマゾン商品の情報」に「商品の画像情報」が存在しない場合、
「商品の画像情報」が未設定の$imageItem変数を、return文で返します。
上記ソースコードの2個のisset()関数において、
- 「$searchItem->Imagesメンバ変数が設定されている」
- そして「$searchItem->Images->Primaryメンバ変数が設定されている」
以上の条件が成り立つなら、ここでは何もせず、次の処理に進みます。
以上の条件が成り立たない場合は、
「アマゾン商品の情報」を保持する$searchItem変数に、「商品の画像情報」が存在しない場合です。
この場合は、「商品の画像情報」が未設定の$imageItem変数を、return文で返します。
//「商品の画像情報」が存在しない場合
return $imageItem;
}
同様に、
- 「ミディアムサイズの商品画像が存在しない」
- そして「ラージサイズの商品画像が存在しない」
- そして「スモールサイズの商品画像が存在しない」
上記の三つの条件が成り立つ場合、
「アマゾン商品の情報」を保持する$searchItem変数に、「商品の画像情報」が存在しない場合です。
この場合も、「商品の画像情報」が未設定の$imageItem変数を、return文で返します。
指定したサイズの「商品の画像情報」を、「当プラグイン用の商品の画像情報」を保持する$imageItem変数に設定する
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 );
}
}
$imageSize変数に、例えばミディアムサイズの「商品の画像情報」を指定した場合、
$imageSize変数は、$searchItem->Images->Primary->Mediumメンバ変数を保持します。
$searchItem->Images->Primary->Mediumメンバ変数の例。
[Medium] => stdClass Object
(
[Height] => 160
[URL] => https://m.media-amazon.com/images/I/XXXXSSmCnjL._SL160_.jpg
[Width] => 125
)
指定したサイズの「商品の画像情報」を保持する$imageSize変数に、
「画像のURL」を保持するURLメンバ変数が存在する場合、
「当プラグイン用の商品の画像情報」を保持する$imageItem変数に、以下の「商品の画像情報」を設定します。
- 画像のURL。
- 画像の幅(ピクセル数)。
- 画像の高さ(ピクセル数)。
$imageItem->setImageURL ( esc_url ( $imageSize->URL ) );
$imageSize->URLメンバ変数が保持する「画像のURL」については、esc_url()関数によってサニタイズしたURLが設定されます。
サニタイズとは、Webサイトの脆弱性を悪用するために使用される可能性のある特殊文字、またはプログラムコードを、削除することです。
$imageItem変数に、ミディアムサイズの「商品の画像情報」を設定した場合、
$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
)
「画像の幅」と「画像の高さ」について、存在確認する方が堅牢なプログラムになります
改めてsetImageInfoTo()関数を見たところ、
- 「画像の幅」を保持する$imageSize->Widthメンバ変数
- 「画像の高さ」を保持する$imageSize->Heightメンバ変数
これらのメンバ変数について、isset()関数を使って存在確認していませんでした。
「画像の幅」と「画像の高さ」について、以下のソースコードのように存在確認する方が、堅牢なプログラムになります。
private static function setImageInfoTo(ImageItem &$imageItem, $imageSize) {
if (isset ( $imageSize->URL )) {
$imageItem->setImageURL ( esc_url ( $imageSize->URL ) );
}
if (isset ( $imageSize->Width )) {
$imageItem->setImageWidth ( $imageSize->Width );
}
if (isset ( $imageSize->Height )) {
$imageItem->setImageHeight ( $imageSize->Height );
}
}
ImageResponse.phpのソースコード
<?php
namespace goodsmemo\amazon\withoutsdk;
use goodsmemo\item\ImageItem;
require_once GOODS_MEMO_DIR . "item/ImageItem.php";
class ImageResponse {
public static function makeImageItem($searchItem): ImageItem {
$imageItem = new ImageItem ();
if (isset ( $searchItem->Images ) and isset ( $searchItem->Images->Primary )) {
;
} else {
return $imageItem;
}
$primaryImages = $searchItem->Images->Primary;
// 大きさの優先順位は、ミディアム、ラージ、スモール
if (isset ( $primaryImages->Medium )) {
$imageSize = $primaryImages->Medium;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
if (isset ( $primaryImages->Large )) {
$imageSize = $primaryImages->Large;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
if (isset ( $primaryImages->Small )) {
$imageSize = $primaryImages->Small;
ImageResponse::setImageInfoTo ( $imageItem, $imageSize );
if ($imageItem->getImageURL ()) {
return $imageItem;
}
}
return $imageItem;
}
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 );
}
}
}