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

楽天市場の商品を表示するWordPressプラグインを、作ってみたいです。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

楽天市場の商品を表示する場合、
ショートコードのservice属性に、rakutenを指定します。

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

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

当プラグインの「楽天の設定」で、各項目を設定する

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

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

楽天に関する設定項目には、例えば、
楽天市場商品検索APIに関する項目があります。

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

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

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

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

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

add_shortcode()関数を用いて、当プラグインのショートコードを登録します。

登録後、以下のような「楽天市場の商品を表示するショートコード」を、利用できるようになります。

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

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

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

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

ショートコードのservice属性がrakutenなら、楽天市場の「アフィリエイト商品のHTML」を作成する関数を呼び出す

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

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

	case "rakuten" :

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

	default :

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

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

service属性がrakutenなら、楽天市場の「アフィリエイト商品のHTML」を作成する関数を呼び出します。

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

$service変数の値がrakutenの場合、
楽天市場の「アフィリエイト商品のHTML」を作成するRakutenAffiliate::makeHTML()関数を呼び出します。

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

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

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

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

当プラグインのShortcodeAttributeクラスについては、以下の記事を参照してください。

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

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

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

当プラグインの「ショートコードの属性のユーティリティクラス」については、以下の記事を参照してください。

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

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

楽天市場商品検索APIを使って、キーワードで商品検索して、「楽天市場商品の検索結果」を取得する処理について、PHPソースコードの解説

IchibaItemSearchオペレーションに対応する関数を呼び出して、楽天市場の「アフィリエイト商品のHTML」を作成する

public static function makeHTML(ShortcodeAttribute $shortcodeAttribute)
{

中略

	$affiliateHTML;

	$operation = $searchOption->getOperation();
	switch ($operation) {
		case SearchParagraphUtils::ICHIBA_ITEM_SEARCH_OPERATION:

			// 現時点では、Operation="IchibaItemSearch"で、楽天市場商品をキーワード検索する処理だけ行う。
			$affiliateHTML = KeywordSearchOperation::makeHTMLOfIchibaItemSearch($urlInfo, $commonParameter, $restParameter, $searchOption, $itemHTMLOption);
			break;

		default:

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

	return $affiliateHTML;
}

ICHIBA_ITEM_SEARCH_OPERATION定数。

/* 
IchibaItem:楽天市場系APIの一つ
Search:楽天市場商品検索API
*/
const ICHIBA_ITEM_SEARCH_OPERATION = "IchibaItemSearch"; //TODO Choice部品

switch文を用いて、楽天市場商品検索APIに対応するオペレーションを判断します。

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

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

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

IchibaItemSearchオペレーションに対応する、楽天市場の「アフィリエイト商品のHTML」を作成する関数は、
KeywordSearchOperation::makeHTMLOfIchibaItemSearch()関数です。

当プラグインで楽天市場の商品を表示させたい場合、

楽天市場商品検索APIを使うだけで充分です。

このAPIを使うだけで、楽天市場の商品について商品情報を取得できます。

実は、楽天市場系APIには、オペレーションという項目はありません。

プログラムコード上、オペレーションという項目を使っていますが、楽天市場商品検索APIを用いた処理を呼び出していることになります。

楽天市場商品検索APIを用いて、楽天市場の「アフィリエイト商品のHTML」を作成する処理、
その詳細については、以下の記事を参照してください。

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

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

楽天市場の商品に対して商品検索を行う関数を呼び出して、楽天市場の「アフィリエイト商品のHTML」を作成する

public static function makeHTMLOfIchibaItemSearch(
    URLInfo $urlInfo,
    CommonRESTParameter $commonParameter,
    RESTParameter $restParameter,
    SearchOption $searchOption,
    ItemHTMLOption $itemHTMLOption
) {

    $itemsHTMLInfoMaker = new RakutenItemsHTMLInfoMaker($commonParameter, $restParameter, $searchOption);
    $itemsHtml = ItemSearchOperation::makeItemsHTML($urlInfo, $itemHTMLOption, $itemsHTMLInfoMaker);
    return $itemsHtml;
}

makeHTMLOfIchibaItemSearch()関数は、楽天市場の商品に対して、キーワードで商品検索を行います。

その検索結果で得た商品情報を元に、楽天市場の「アフィリエイト商品のHTML」を作成します。

商品検索では、楽天市場商品検索APIだけを使用して検索しています。
よって、楽天市場というカテゴリに対して、商品検索を行なっています。

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

楽天市場の商品において、キーワードによる商品検索をすることで、楽天市場の「アフィリエイト商品のHTML」を作成する

楽天市場の商品において、キーワードによる商品検索をすることで、楽天市場の「アフィリエイト商品のHTML」を作成する。 上記の処理を行うPHPソースコードを解説していま…

「楽天市場商品のHTMLに関する情報」を作成する

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

「楽天市場商品のHTMLに関する情報」は、以下の三つです。

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

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

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

「楽天市場商品の検索結果」など、「楽天市場商品のHTMLに関する情報」を作成する

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

楽天市場商品検索APIを使って、キーワードで商品検索して、「楽天市場商品の検索結果」を取得する

$hostname = $urlInfo->getHostname();
$path = $urlInfo->getPath();

$requestURL = 'https://' . $hostname . '/' . $path . '?' . $queryString;
$response = HTTPRequest::getContents($requestURL);

return $response;

$requestURL変数の例。

https://app.rakuten.co.jp/services/api/IchibaItem/Search/20220601?affiliateId=SAMPLEfa.fb4d5d26.0447a2fb.9c0bXXXX&applicationId=SAMPLE0f0b9181744bc4d36ad049XXXX&imageFlag=1&keyword=%E3%83%80%E3%82%A4%E3%82%A8%E3%83%83%E3%83%88

楽天市場商品検索APIのURLを作成して、
HTTPRequest::getContents()関数によって、楽天市場商品検索APIを呼び出します。

そして、「楽天市場商品の検索結果」を取得します。

楽天市場商品検索APIから取得した「楽天市場商品の検索結果」を、$response変数に代入します。

その$response変数を、return文で返します。

楽天市場商品検索APIの「ホスト名」と「リクエストURLのパス」

楽天市場商品検索APIのURLを作成する場合、以下の項目を用意します。

  • 楽天市場商品検索API ホスト名
  • 楽天市場商品検索API リクエストURLのパス

$hostname変数は、楽天市場商品検索APIの「ホスト名」を保持します。
$path変数は、楽天市場商品検索APIの「リクエストURLのパス」を保持します。

$hostname変数と$path変数の例。

$hostname:"app.rakuten.co.jp"
$path:"services/api/IchibaItem/Search/20220601"

楽天市場商品検索APIの入力パラメーターを含むクエリ文字列

楽天市場商品検索APIを使って、「楽天市場商品の検索結果」を取得する場合、
「楽天市場商品検索APIの入力パラメーターを含むクエリ文字列」を、用意します。

$queryString変数の例。

affiliateId=SAMPLEfa.fb4d5d26.0447a2fb.9c0bXXXX&applicationId=SAMPLE0f0b9181744bc4d36ad049XXXX&imageFlag=1&keyword=%E3%83%80%E3%82%A4%E3%82%A8%E3%83%83%E3%83%88

「楽天市場商品検索APIの入力パラメーターを含むクエリ文字列」は、
以下の「楽天市場商品検索APIの入力パラメーター」を、含みます。

  • applicationId:楽天アプリID
  • affiliateId:楽天アフィリエイトID
  • imageFlag:商品画像有無フラグ
  • keyword:検索キーワード

キーワードで商品検索する「楽天市場商品検索APIのURL」

  • 楽天市場商品検索API ホスト名
  • 楽天市場商品検索API リクエストURLのパス
  • 楽天市場商品検索APIの入力パラメーターを含むクエリ文字列

以上の項目を使用して、キーワードで商品検索する「楽天市場商品検索APIのURL」を作成します。

$requestURL変数は、「楽天市場商品検索APIのURL」を保持します。

$requestURL変数の例。

https://app.rakuten.co.jp/services/api/IchibaItem/Search/20220601?affiliateId=SAMPLEfa.fb4d5d26.0447a2fb.9c0bXXXX&applicationId=SAMPLE0f0b9181744bc4d36ad049XXXX&imageFlag=1&keyword=%E3%83%80%E3%82%A4%E3%82%A8%E3%83%83%E3%83%88

上記の「楽天市場商品検索APIのURL」を呼び出すことで、JSON形式の「楽天市場商品の検索結果」を取得できます。

JSON形式の「楽天市場商品の検索結果」を保持する$response変数

$hostname = $urlInfo->getHostname();
$path = $urlInfo->getPath();

$requestURL = 'https://' . $hostname . '/' . $path . '?' . $queryString;
$response = HTTPRequest::getContents($requestURL);

return $response;

$response変数は、JSON形式の「楽天市場商品の検索結果」を保持します。

$response変数の例。

{
"GenreInformation":[],
"Items":
[
{
"Item":
{
"affiliateRate":4,
"affiliateUrl":"https://hb.afl.rakuten.co.jp/hgc/SAMPLE11.6r01m6a5.SAMPLE11.6r01nc2f/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2FSAMPLEms%2F100000333-1%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2FSAMPLEms%2Fi%2F10006846%2F",
"asurakuArea":"",
"asurakuClosingTime":"",
"asurakuFlag":0,
"availability":1,
"catchcopy":"ショップオブザイヤー受賞店舗 総合賞4位 ダイエット・健康ジャンル大賞",
"creditCardFlag":1,
"endTime":"",
"genreId":"567634",
"giftFlag":0,
"imageFlag":1,
"itemCaption":"内容量 1粒重量300mg ×60粒 約1ヶ月分 お召し上がり方 1日2粒を目安にお飲みください。保存方法 高温多湿や直射日光を避け、常温保存してください。 賞味期限 約2年間※偏った食事を取る方や! ▼炭水化物、甘い物が好きな方へ▼ ▼▼オススメ商品▼▼",
"itemCode":"SAMPLEms:10006846",
"itemName":"17日終了!クーポンで198円★サラシア ダイエットサプリ 約1ヶ月分",
"itemPrice":960,
"itemPriceBaseField":"item_price_min3",
"itemPriceMax1":960,
"itemPriceMax2":960,
"itemPriceMax3":960,
"itemPriceMin1":960,
"itemPriceMin2":960,
"itemPriceMin3":960,
"itemUrl":"https://hb.afl.rakuten.co.jp/hgc/SAMPLE11.6r01m6a5.SAMPLE11.6r01nc2f/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2FSAMPLEms%2F100000333-1%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2FSAMPLEms%2Fi%2F10006846%2F",
"mediumImageUrls":
[
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/SAMPLEms/cabinet/images/thum/cpn/sara1_c79.jpg?_ex=128x128"},
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/SAMPLEms/cabinet/images/kikaku/etc/imgrc0071386725.jpg?_ex=128x128"},
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/SAMPLEms/cabinet/imgrc0073616742.jpg?_ex=128x128"}
],
"pointRate":3,
"pointRateEndTime":"2023-07-16 23:59",
"pointRateStartTime":"2023-07-14 13:00",
"postageFlag":0,
"reviewAverage":4.39,
"reviewCount":8963,
"shipOverseasArea":"ワールドワイド",
"shipOverseasFlag":1,
"shopAffiliateUrl":"https://hb.afl.rakuten.co.jp/hgc/SAMPLE11.6r01m6a5.SAMPLE11.6r01nc2f/?pc=https%3A%2F%2Fwww.rakuten.co.jp%2FSAMPLEms%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2FSAMPLEms%2F",
"shopCode":"SAMPLEms",
"shopName":"サプリ専門SHOP サンプル商店",
"shopOfTheYearFlag":1,
"shopUrl":"https://hb.afl.rakuten.co.jp/hgc/SAMPLE11.6r01m6a5.SAMPLE11.6r01nc2f/?pc=https%3A%2F%2Fwww.rakuten.co.jp%2FSAMPLEms%2F&m=http%3A%2F%2Fm.rakuten.co.jp%2FSAMPLEms%2F",
"smallImageUrls":
[
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/SAMPLEms/cabinet/images/thum/cpn/sara1_c79.jpg?_ex=64x64"},
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/SAMPLEms/cabinet/images/kikaku/etc/imgrc0071386725.jpg?_ex=64x64"},
{"imageUrl":"https://thumbnail.image.rakuten.co.jp/@0_mall/SAMPLEms/cabinet/imgrc0073616742.jpg?_ex=64x64"}
],
"startTime":"",
"tagIds":[1004143,1019268],"taxFlag":0
}
},

{
"Item":
{

中略

}
},

中略

],
"TagInformation":[],
"carrier":0,
"count":249409,
"first":1,
"hits":30,
"last":30,
"page":1,
"pageCount":100
}

楽天市場商品検索APIを使って、キーワードで商品検索して、「楽天市場商品の検索結果」を取得する処理、
その詳細については、以下の記事を参照してください。

楽天市場商品検索APIを使って、キーワードで商品検索して、「楽天市場商品の検索結果」を取得する

楽天市場商品検索APIを使って、「楽天市場商品の検索結果」を取得する処理について、PHPソースコードを解説しています。

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

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

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

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

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

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

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

当プラグインの「フッターのHTMLに関する情報」を作成する処理については、以下の記事を参照してください。

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

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