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

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

「楽天市場商品の検索結果」を取得する処理とは、
キーワードで商品検索して、商品情報を取得する処理です。

この記事で紹介しているソースコードは、楽天市場商品検索APIを直接、呼び出しているソースコードになります。

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

public static function requestIchibaItemSearch(URLInfo $urlInfo, CommonRESTParameter $commonParameter, RESTParameter $restParameter)
{

	$parameterMap = array();

	$parameterMap["applicationId"] = $commonParameter->getApplicationId();
	$parameterMap["affiliateId"] = $commonParameter->getAffiliateId();

	$parameterMap["imageFlag"] = $restParameter->getImageFlag();
	$parameterMap["keyword"] = $restParameter->getKeyword();

	$queryString = HTTPRequest::makeQueryString($parameterMap);

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

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

	return $response;
}

requestIchibaItemSearch()関数は、楽天市場に対してキーワードで商品検索して、「楽天市場商品の検索結果」を取得します。

キーワードによる商品検索では、楽天市場商品検索APIを使用します。

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

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

「楽天市場商品検索APIの入力パラメーター」を、$parameterMap連想配列に設定する

$parameterMap = array();

$parameterMap["applicationId"] = $commonParameter->getApplicationId();
$parameterMap["affiliateId"] = $commonParameter->getAffiliateId();

$parameterMap["imageFlag"] = $restParameter->getImageFlag();
$parameterMap["keyword"] = $restParameter->getKeyword();

$parameterMap連想配列の例。

$parameterMap:array(4)
$parameterMap["applicationId"]:"SAMPLE0f0b9181744bc4d36ad049XXXX"
$parameterMap["affiliateId"]:"SAMPLEfa.fb4d5d26.0447a2fb.9c0bXXXX"
$parameterMap["imageFlag"]:1
$parameterMap["keyword"]:"ダイエット"

「楽天市場商品検索APIの入力パラメーター」を、$parameterMap連想配列に設定します。

$commonParameter変数と$restParameter変数が保持する「楽天市場商品検索APIの入力パラメーター」を、$parameterMap連想配列に代入します。

入力パラメーターを取得するために、例えば、
$commonParameter変数のgetApplicationId()メソッドや、
$restParameter変数のgetKeyword()メソッドなどを呼び出しています。

取得した入力パラメーターは、
入力パラメーターに対応する「$parameterMap連想配列のキー」で指定された配列の場所に、代入されます。

「$parameterMap連想配列のキー」と「楽天市場商品検索APIの入力パラメーター」の対応は、以下の通りです。

$parameterMap連想配列のキー楽天市場商品検索APIの入力パラメーター
applicationId楽天アプリID
または、デベロッパーID
affiliateId楽天アフィリエイトID
imageFlag商品画像有無フラグ

0 : すべての商品を検索対象とする。
1 : 商品画像ありの商品のみを検索対象とする。
keyword検索キーワード
「$parameterMap連想配列のキー」と「楽天市場商品検索APIの入力パラメーター」の対応

楽天アプリID(デベロッパーID)、楽天アフィリエイトID

  • 楽天アプリID、または、デベロッパーID
  • 楽天アフィリエイトID

これらの入力パラメーターは、以下の設定画面で設定されています。

  • 当プラグインの「アフィリエイトの設定」
    • 楽天の設定
      • 楽天アプリID/デベロッパーID
      • 楽天アフィリエイトID

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、楽天の設定

商品画像有無フラグ

入力パラメーターの商品画像有無フラグは、以下のEXISTENCE_IMAGE_FLAG定数が設定されています。

<?php

namespace goodsmemo\option\rakuten;

class RESTParagraphUtils
{

    const EXISTENCE_IMAGE_FLAG = 1; //商品画像ありの商品のみを検索対象とする//TODO Choice部品

}

検索キーワード

入力パラメーターの検索キーワードは、当プラグインのショートコードのkeyword属性で指定された文字列です。

※関連記事:アフィリエイト商品表示・WordPressプラグイン、ショートコードの属性

「楽天市場商品検索APIの入力パラメーターを含むクエリ文字列」を、作成する

$queryString = HTTPRequest::makeQueryString($parameterMap);

$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の入力パラメーターを含むクエリ文字列」を、作成します。

HTTPRequest::makeQueryString()関数は、連想配列のキーと値から、クエリ文字列を作成します。

$parameterMap連想配列のキーは、「楽天市場商品検索APIの入力パラメーター」の名称です。
$parameterMap連想配列の値は、「楽天市場商品検索APIの入力パラメーター」の値です。

よって、HTTPRequest::makeQueryString()関数は、
$parameterMap連想配列から、「楽天市場商品検索APIの入力パラメーターを含むクエリ文字列」を、作成します。

作成された「楽天市場商品検索APIの入力パラメーターを含むクエリ文字列」を、$queryString変数に代入します。

ウェブサーバーに対して特定の情報や要求を伝える、クエリ文字列

クエリ文字列とは、URLの末尾に付加されるパラメータを含む文字列のことです。

クエリ文字列は、ウェブサーバーに対して特定の情報や要求を伝えるために使われます。

クエリ文字列は、?で始まり、&で区切られたキーと値の組み合わせで構成されます。
例えば、以下のURLでは、

https://example.com/search?keyword=ダイエット&lang=ja

keywordというキーにダイエットという値、
langというキーにjaという値が、設定されています。

これによりウェブサーバーは、ユーザーが、ダイエットというキーワード文字列で、日本語の検索を行いたいことを知ることができます。

実際のURLでは、キーワードの”ダイエット”という文字列を、URLエンコードによって、特定の文字を16進数で表して「%」に続けて表記することになります。

“ダイエット”という文字列を、URLエンコードした例。

keyword=%E3%83%80%E3%82%A4%E3%82%A8%E3%83%83%E3%83%88

楽天市場商品検索APIを呼び出して、JSON形式の「楽天市場商品の検索結果」を取得する

$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を呼び出して、JSON形式の「楽天市場商品の検索結果」を取得します。

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

HTTPRequest::getContents()関数によって、楽天市場商品検索APIを呼び出します。
そして、JSON形式の「楽天市場商品の検索結果」を取得します。

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

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

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

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

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

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

「ホスト名」と「リクエストURLのパス」は、以下の設定画面で設定されています。

  • 当プラグインの「アフィリエイトの設定」
    • 楽天の設定
      • 楽天市場商品検索API ホスト名
      • 楽天市場商品検索API リクエストURLのパス

※関連記事:アフィリエイト商品表示・WordPressプラグイン、アフィリエイトの設定、楽天の設定

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

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

このURLは、URLの末尾に、「楽天市場商品検索APIの入力パラメーターを含むクエリ文字列」が付加されています。

$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形式の「楽天市場商品の検索結果」を保持する$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
}

“Items”項目には、30個の商品情報があります。
※1ページあたりの取得件数を示す”hits”項目の値が、30の場合。

楽天市場商品検索APIの出力パラメーターが保持する、
1個の商品情報については、例えば以下のような情報があります。

商品情報の項目商品情報の項目の内容
itemName商品名
catchcopyキャッチコピー
itemPrice商品価格
itemCaption商品説明文
affiliateUrlアフィリエイトURL
PC/mobile両対応のURL
mediumImageUrls商品画像128px * 128pxのURL
最大3枚の画像(画像サイズ128px * 128px)URLの配列
taxFlag消費税フラグ
0:税込
1:税別
postageFlag送料フラグ
0:送料込
1:送料別
pointRate商品別ポイント倍付け
例:5  ポイント5倍
pointRateStartTime商品別ポイント倍付け開始日時
商品別ポイント倍付け(pointRate)の適用開始日時
pointRateEndTime商品別ポイント倍付け終了日時
商品別ポイント倍付け(pointRate)の適用終了日時
shopName店舗名
1個の商品情報

RakutenRequest.phpのソースコード

<?php

namespace goodsmemo\rakuten;

use goodsmemo\rakuten\CommonRESTParameter;
use goodsmemo\rakuten\RESTParameter;
use goodsmemo\network\HTTPRequest;
use goodsmemo\network\URLInfo;

require_once GOODS_MEMO_DIR . "rakuten/CommonRESTParameter.php";
require_once GOODS_MEMO_DIR . "rakuten/RESTParameter.php";
require_once GOODS_MEMO_DIR . "network/HTTPRequest.php";
require_once GOODS_MEMO_DIR . "network/URLInfo.php";

class RakutenRequest
{

	public static function requestIchibaItemSearch(URLInfo $urlInfo, CommonRESTParameter $commonParameter, RESTParameter $restParameter)
	{

		$parameterMap = array();

		$parameterMap["applicationId"] = $commonParameter->getApplicationId();
		$parameterMap["affiliateId"] = $commonParameter->getAffiliateId();

		$parameterMap["imageFlag"] = $restParameter->getImageFlag();
		$parameterMap["keyword"] = $restParameter->getKeyword();

		$queryString = HTTPRequest::makeQueryString($parameterMap);

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

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

		return $response;
	}
}