楽天市場商品検索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 | 検索キーワード |
楽天アプリ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 | 店舗名 |
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;
}
}