この記事にはプロモーションが含まれています。

【PHP】APIとは?楽天APIで商品検索機能を作成する方法

【PHP】APIとは?楽天APIで商品検索機能を作成する方法

ケケンタ

楽天APIを使えば簡単に商品検索機能が作れるって聞いたんだけど、具体的にどうすればいいんだろう……?

楽天では商品情報を外部アプリから取得するための仕組み=APIがいくつか用意されています。

今回はその内のひとつ「楽天市場商品検索API」をPHPで扱う方法を解説します。

この記事で分かること
  • APIとは何か?
  • 楽天API使用してPHPで自分のWebサイト(アプリ)上に「楽天商品の検索機能」を実装する方法



ケケンタ

ケケンタのITブログでは、WebアプリPHPLaravel)やWeb制作WordPressコーディング)について情報を発信しています。
学習中の方や実務をされている方など多くの方にアクセスいただいていますので、ぜひほかの記事も参考にしてみてください!


運動不足、気になっていませんか?

もしプログラミング学習やお仕事で運動不足が気になっているなら
連続屈伸運動がおすすめです!

ボタンにカーソルを合わせるだけ
カウントダウンが始まるタイマーをご用意してみました!

ケケンタ

無理のない範囲で、ぜひ隙間時間に屈伸運動を取り入れてみて下さい!

タイマースタート

3:00

※運動不足だと連続3分で取り組んでもかなり息が切れます
(僕は加えて気分もちょっと悪くなりました……)
絶対にご無理の無い範囲でお取り組みください!


目次

APIとは?

ケケンタ

まずは、「そもそもAPIとは何か?」についてお伝えします!

API(Application Programming Interface)とは?

2つのアプリ同士が情報をやり取りする際に使用される、プログラミング上の専用通路のこと

つまり、今回ご紹介する「楽天市場商品検索API」は外部アプリが楽天市場の商品情報を取得するためのAPIです。

APIの仕組み①(例)楽天API
APIの仕組み①(例)楽天API

「商品情報を取得するためのAPI」とお伝えしましたが、もう少し正確に言うと、「『商品情報検索機能』を使用するためのAPI」です。
商品情報そのものというよりも、商品情報を取得するための機能を借りるイメージです。

APIを使用するためには「ID情報」が必要

APIを使用するためには、基本的にそのAPIを使用するための「ID情報」が必要になります。

ID情報とは、もう少し別の言い方をすると「通行許可証」のことです。

ケケンタ

APIは、外部アプリへ商品情報などを受け渡す通路です。
そのため、「通行許可証=ID情報」を発行することで、APIの使用許可を出しています。

APIの使用者は、この「通行許可証=ID情報」をプログラムを通して提示することにより、初めて情報取得の許可を得ることができるということです。

APIの仕組み②(例)楽天API
APIの仕組み②(例)楽天API

【手順】PHPで楽天APIを使用する主な手順

「APIとは何か?」を理解できたところで、実際にPHPで楽天APIを使用する主な手順をお伝えします。

PHPで楽天APIを使用する主な手順
  • 楽天DevelopersでアプリIDを発行する
  • 必要な「SDK」をプロジェクトディレクトリへ導入する
  • ソースコードを記述する
ケケンタ

以下よりひとつずつ丁寧に解説していきます!

STEP1 楽天DevelopersでアプリIDを発行する

前述のとおり、APIを使用するためには「通行許可証=ID情報」が必要です。

楽天APIを使用するときも、まずは楽天アプリIDを発行する必要があります。

楽天DevelopersでアプリIDを発行する手順
  • 楽天に会員登録する
  • 楽天Developersに楽天会員情報でログインする
  • ヘッダ―メニューにある「アプリID発行」からアプリIDの新規発行を進める

手順③でアプリIDを発行する際には、APIを使用するWebサイト(アプリ)のURL情報を入力する必要があります。

【楽天Developers】https://webservice.rakuten.co.jp

なお、すでに楽天会員の方は、手順②から進めていただければ大丈夫です。

参考手順③「アプリID発行」

アプリIDの発行
アプリIDの発行

STEP2 必要な「SDK」をプロジェクトディレクトリへ導入する

PHPで楽天APIを簡単に利用できるようにするための「SDK」をダウンロード&プロジェクトディレクトリへ配置します。

SDKとは?

SDK(Software Development Kit)は、日本語で「ソフトウェア開発キット」のことです。

ソフトウェアを開発する際に必要なプログラムやAPIなどをまとめてパッケージ化したものを「SDK」と呼びます。

今回ご紹介する楽天APIではRakuten Web Service SDK for PHPというSDKを利用します。

なお、本章でご紹介するSDKの導入手順は、Composerでのインストールを手動化したものです。
Composerを使ったことが無い方向けに、あえて手動での手順をご紹介しています。

Composerについて知りたい方向けの記事

ケケンタ

以下よりSDKの導入手順をステップごとにお伝えします!

STEP
「SDK」のzipファイルをダウンロードする

以下のGithubページから「SDK」のzipファイルをダウンロードします。

https://github.com/rakuten-ws/rws-php-sdk/blob/master/README.md

SDKのダウンロード
SDKのダウンロード
STEP
ダウンロードしたzipファイルを解凍する
STEP
必要なファイルをプロジェクトディレクトリへ配置する

解凍ができたら、必要なファイルをプロジェクトディレクトリへ配置します。

プロジェクトディレクトリへ配置するファイル
  • 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の「アプリ情報の確認」からご確認いただけます。

アプリID・アフィリエイトIDの確認
アプリID・アフィリエイトIDの確認

出力結果

楽天APIの出力結果
楽天APIの出力結果

【解説】「商品検索機能」のソースコード

ケケンタ

本章では前章でご提示したソースコードの解説をしていきます!

エラー表示対策
※本筋であるAPI連携とはあまり関係のない処理です。

//「Deprecated:~」というエラーが表示されたら下記を記述する
error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED);

今回使用するSDKの中で非推奨関数が使用されており、環境によっては「Deprecated:~」というエラーが表示されてしまいます。
上記のコードは、それを非表示にするための処置です。

APIを利用するファイルにインストールしたSDKのファイル読み込み
※autoload.phpまでのパスを記述

require_once dirname(__FILE__) . '/autoload.php'; 
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()でおこなった方が確実です。

上記のソースコードで言うと、ループ内でvar_dump( $item );とすることで、出力可能なキー名が確認できます。

affiliateUrl(アフィリエイトリンク)については「入力パラメータ」でアフィリエイトIDを指定しないと出力されません。

検索フォームの設置と取得情報の出力

<!-- 検索フォーム -->
<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(クロスサイトスクリプティング攻撃)対策としてhtmlspecialchars()を使用している点にご留意ください。

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 .= '予期しないエラーが発生しました。';
}

ハイライト行のimgタグ内のsrc属性の中を修正しました。

楽天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

【PHP】APIとは?楽天APIで商品検索機能を作成する方法のアイキャッチ画像

この記事が気に入ったら
フォローしてね!

この記事が良いと思ったらシェアしてね!

コメント

コメントする

CAPTCHA


目次