楽天APIを使えば簡単に商品検索機能が作れるって聞いたんだけど、具体的にどうすればいいんだろう……?
楽天では商品情報を外部アプリから取得するための仕組み=APIがいくつか用意されています。
今回はその内のひとつ「楽天市場商品検索API」をPHPで扱う方法を解説します。
- APIとは何か?
- 楽天API使用してPHPで自分のWebサイト(アプリ)上に「楽天商品の検索機能」を実装する方法
APIとは?
まずは、「そもそもAPIとは何か?」についてお伝えします!
2つのアプリ同士が情報をやり取りする際に使用される、プログラミング上の専用通路のこと
つまり、今回ご紹介する「楽天市場商品検索API」は外部アプリが楽天市場の商品情報を取得するためのAPIです。
APIを使用するためには「ID情報」が必要
APIを使用するためには、基本的にそのAPIを使用するための「ID情報」が必要になります。
ID情報とは、もう少し別の言い方をすると「通行許可証」のことです。
APIは、外部アプリへ商品情報などを受け渡す通路です。
そのため、「通行許可証=ID情報」を発行することで、APIの使用許可を出しています。
APIの使用者は、この「通行許可証=ID情報」をプログラムを通して提示することにより、初めて情報取得の許可を得ることができるということです。
【手順】PHPで楽天APIを使用する主な手順
「APIとは何か?」を理解できたところで、実際にPHPで楽天APIを使用する主な手順をお伝えします。
- 楽天DevelopersでアプリIDを発行する
- 必要な「SDK」をプロジェクトディレクトリへ導入する
- ソースコードを記述する
以下よりひとつずつ丁寧に解説していきます!
STEP1 楽天DevelopersでアプリIDを発行する
前述のとおり、APIを使用するためには「通行許可証=ID情報」が必要です。
楽天APIを使用するときも、まずは楽天アプリIDを発行する必要があります。
- 楽天に会員登録する
- 楽天Developersに楽天会員情報でログインする
- ヘッダ―メニューにある「アプリID発行」からアプリIDの新規発行を進める
【楽天Developers】https://webservice.rakuten.co.jp
なお、すでに楽天会員の方は、手順②から進めていただければ大丈夫です。
【参考】手順③「アプリID発行」
STEP2 必要な「SDK」をプロジェクトディレクトリへ導入する
PHPで楽天APIを簡単に利用できるようにするための「SDK」をダウンロード&プロジェクトディレクトリへ配置します。
SDK(Software Development Kit)は、日本語で「ソフトウェア開発キット」のことです。
ソフトウェアを開発する際に必要なプログラムやAPIなどをまとめてパッケージ化したものを「SDK」と呼びます。
今回ご紹介する楽天APIではRakuten Web Service SDK for PHPというSDKを利用します。
Composerについて知りたい方向けの記事
以下よりSDKの導入手順をステップごとにお伝えします!
以下のGithubページから「SDK」のzipファイルをダウンロードします。
https://github.com/rakuten-ws/rws-php-sdk/blob/master/README.md
解凍ができたら、必要なファイルをプロジェクトディレクトリへ配置します。
lib
ディレクトリautoload.php
ファイル
以上でSDKの導入(インストール)は完了です!
STEP3 ソースコードを記述する
楽天APIで商品検索機能を作成するソースコードは以下の通りです。
※詳しい解説は後述します。
<?php
//「Deprecated:~」というエラーが表示されたら下記を記述する
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
require_once dirname(__FILE__) . '/autoload.php';
// 検索キーワード設定
$keyword = "PHP";
if( isset( $_GET['keyword'] ) ) $keyword = $_GET['keyword'];
// 楽天APIクライアントの生成
$client = new RakutenRws_Client();
$client->setApplicationId( 'アプリID' ); // アプリID
//入力パラメータを指定
$response = $client->execute('IchibaItemSearch', array(
'keyword' => $keyword, // キーワード
'hits' => '20', // 検索件数
'page' => '1', // 全検索結果中の内、「何ページ目」の結果を表示するか
'imageFlag' => '1', // 商品画像ありの商品のみを検索対象とする ※「画像なし」も含みたいときは「0」を指定
'affiliateId' => 'アフィリエイトID', // アフィリエイトID ※アフィリエイト用リンクが不要のときは削除
));
$html = '';
if ($response->isOk()) {
//検索結果を1件ずつチェック
$html .= '<ul>';
foreach ($response as $item) {
// 出力パラメータをキーとして結果を参照する
$html .= '<li>';
$html .= '<a href="' . $item['affiliateUrl'] . '">';
$html .= '<img src="' . $item['mediumImageUrls'][0]["imageUrl"] . '">';
$html .= '<h3>' . $item['itemName'] . '</h3>';
$html .= '</a>';
$html .= '</li>';
$html .= '<hr>';
}
$html .= '</ul>';
} else {
echo $html .= '予期しないエラーが発生しました。';
}
?>
<!-- 検索フォーム -->
<form action="" method="get">
<input type="text" name="keyword" placeholder="検索キーワード" value="<?php echo htmlspecialchars( $keyword, ENT_QUOTES, "UTF-8" ); ?>">
<input type="submit" value="検索">
</form>
<hr>
<hr>
<!-- 取得情報の出力 -->
<?php echo $html; ?>
「アプリID」と「アフィリエイトID」は、楽天Developersの「アプリ情報の確認」からご確認いただけます。
出力結果
【解説】「商品検索機能」のソースコード
本章では前章でご提示したソースコードの解説をしていきます!
エラー表示対策
※本筋であるAPI連携とはあまり関係のない処理です。
//「Deprecated:~」というエラーが表示されたら下記を記述する
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);
今回使用するSDKの中で非推奨関数が使用されており、環境によっては「Deprecated:~」というエラーが表示されてしまいます。
上記のコードは、それを非表示にするための処置です。
APIを利用するファイルにインストールしたSDKのファイル読み込み
※autoload.phpまでのパスを記述
require_once dirname(__FILE__) . '/autoload.php';
Composerの機能のひとつ「オートロード」を利用するためのファイルです。
詳しい内容が知りたい方は以下の記事をご覧ください。
検索キーワードを取得
※初めてページが開かれたときは「PHP」をキーワードとして設定
// 検索キーワード設定
$keyword = "PHP";
if( isset( $_GET['keyword'] ) ) $keyword = $_GET['keyword'];
楽天APIで商品情報を取得するために必要な各種情報を設定
// 楽天APIクライアントの生成
$client = new RakutenRws_Client();
$client->setApplicationId( 'アプリID' ); // アプリID
//入力パラメータを指定
$response = $client->execute('IchibaItemSearch', array(
'keyword' => $keyword, // キーワード
'hits' => '20', // 検索件数
'page' => '1', // 全検索結果中の内、「何ページ目」の結果を表示するか
'imageFlag' => '1', // 商品画像ありの商品のみを検索対象とする ※「画像なし」も含みたいときは「0」を指定
'affiliateId' => 'アフィリエイトID', // アフィリエイトID ※アフィリエイト用リンクが不要のときは削除
));
「入力パラメータ」については公式ドキュメントをご参照下さい。
■楽天商品検索API:https://webservice.rakuten.co.jp/documentation/ichiba-item-search
楽天APIからのレスポンス(商品情報)を受け取る → HTML出力用変数「$html」に格納
$html = '';
if ($response->isOk()) {
//検索結果を1件ずつチェック
$html .= '<ul>';
foreach ($response as $item) {
// 出力パラメータをキーとして結果を参照する
$html .= '<li>';
$html .= '<a href="' . $item['affiliateUrl'] . '">';
$html .= '<img src="' . $item['mediumImageUrls'][0]["imageUrl"] . '">';
$html .= '<h3>' . $item['itemName'] . '</h3>';
$html .= '</a>';
$html .= '</li>';
$html .= '<hr>';
}
$html .= '</ul>';
} else {
echo $html .= '予期しないエラーが発生しました。';
}
「出力パラメータ」については公式ドキュメントに記載があります。
……が、記載通りのキーが存在していないことや、キー名が誤っていることがあるため、基本的に出力パラメータの確認はvar_dump()
でおこなった方が確実です。
検索フォームの設置と取得情報の出力
<!-- 検索フォーム -->
<form action="" method="get">
<input type="text" name="keyword" placeholder="検索キーワード" value="<?php echo htmlspecialchars( $keyword, ENT_QUOTES, "UTF-8" ); ?>">
<input type="submit" value="検索">
</form>
<hr>
<hr>
<!-- 取得情報の出力 -->
<?php echo $html; ?>
この検索フォームにキーワードを入力して「検索」ボタンを押すことで、先ほど登場した「検索キーワード取得処理」に値が受け渡されます。
XSSについてはこちらの記事をご覧ください。
解説は以上です! お疲れさまでした!
そのほか、補足事項がいくつかあるため以下よりご説明していきます。
【補足①】特定のショップのみ表示したいとき
楽天では様々なショップが商品を出品しています。
例えば書籍の場合だと、公式である「楽天ブックス」が取り扱っているものと同じ書籍を出品しているショップがほかにいくつも存在します。
そうすると、APIで取得する書籍情報が重複してしまうことがよくあります。
書籍情報の重複を避ける方法はいくつかありますが、ここでは例として「楽天ブックス」の商品情報だけを出力する方法をご紹介します。
「楽天ブックス」以外はすべて除外
$html = '';
if ($response->isOk()) {
//検索結果を1件ずつチェック
$html .= '<ul>';
foreach ($response as $item) {
// 楽天ブックス以外は除外
if ($item['shopName'] !== '楽天ブックス') continue;
// 出力パラメータをキーとして結果を参照する
$html .= '<li>';
$html .= '<a href="' . $item['affiliateUrl'] . '">';
$html .= '<img src="' . $item['mediumImageUrls'][0]["imageUrl"] . '">';
$html .= '<h3>' . $item['itemName'] . '</h3>';
$html .= '</a>';
$html .= '</li>';
$html .= '<hr>';
}
$html .= '</ul>';
} else {
echo $html .= '予期しないエラーが発生しました。';
}
【補足②】出力する画像サイズを調整したいとき
楽天APIでは表示する画像URLも取得することが可能です。
しかし、元々用意されている画像サイズでは少し小さいと感じる方も恐らく多いかと思います。
そのようなときは、以下のコードを追記することで、画像サイズを任意のものへ調整することが可能です。
画像サイズを任意のものへ変更する
$html = '';
if ($response->isOk()) {
//検索結果を1件ずつチェック
$html .= '<ul>';
foreach ($response as $item) {
// 出力パラメータをキーとして結果を参照する
$html .= '<li>';
$html .= '<a href="' . $item['affiliateUrl'] . '">';
$html .= '<img src="<?php echo str_replace("_ex=128x128", "_ex=200x200", $item['mediumImageUrls'][0]['imageUrl']); ?>">';
$html .= '<h3>' . $item['itemName'] . '</h3>';
$html .= '</a>';
$html .= '</li>';
$html .= '<hr>';
}
$html .= '</ul>';
} else {
echo $html .= '予期しないエラーが発生しました。';
}
楽天APIで取得できる画像URLのサイズは、URL内にある「_ex=128×128」の部分で指定されています。
そのため、str_replace()
関数で「数値×数値」のように置換することでサイズ調整が可能です。
まとめ
いかがだったでしょうか。
この記事では
- APIとは何か?
- 楽天APIをPHPで使用する方法
について解説をしてきました。
楽天APIが使用できれば商品検索ページを実装する以外にも、ライバル店の商品情報を分析するのにも役立ちます。
また、世の中には、楽天API以外に数多くのAPIが存在します。
APIへの理解が深まれば、それらを駆使して便利なWebアプリを効率よく開発することができます。
この記事が少しでもお役に立ったなら何よりです!
このブログではPHPやWordPress、Web制作に関する情報を発信しています。
ご興味のある方はほかの記事もご覧いただけるとうれしいです。
【公式ドキュメント】楽天Developers 楽天商品検索API 詳細
https://webservice.rakuten.co.jp/documentation/ichiba-item-search
コメント