【楽天 API】SDKを利用し楽天市場の商品データを取得・出力する例|WordPress・PHP
Rakuten Developersでは、楽天市場などの情報を扱えるAPIを提供しています。
今回は、そのAPIの中の「楽天商品検索API」を利用し、WordPressで楽天市場の商品データを取得・出力する簡単な例となります。
【楽天】APIを利用し楽天市場の商品データを取得し出力する例
アプリID・アフィリエイトIDを取得
楽天の各サービスのAPIでアフィリエイトを利用するには、Rakuten Developersで発行できる「アプリID」と「アフィリエイトID」が必要となります。
「アプリID」と「アフィリエイトID」の発行・確認方法は、以下のリンク先を参考にしてみてください。
ComposerでRakuten Web Service SDK for PHPをインストール
PHPライブラリの依存関係を管理するComposerでSDKをインストールするため、プロジェクト内のComposerを配置するディレクトリにcdコマンドで移動し、以下のコマンドを実行します。
composer require rakuten-ws/rws-php-sdk
ComposerをMacで利用する方法については、以下のリンク先を参考にしてみてください。
また、Composerを利用しないインストール方法については、文末の参考サイトを確認してみてください。
楽天市場内の商品データを取得し出力
例では、WordPressのサイトで「楽天商品検索API」を利用し、簡単な商品データを表示します。
取得するデータの条件は、楽天市場内をキーワード「自転車」で検索した際にヒットする3件の商品データとします。そして、取得したデータの中から、商品ページへのリンク付きで、商品のタイトル・画像・料金のデータを表示します。
以下、ソースコードとなり商品情報を表示させたい箇所に記述します。
<?php
// SDKを利用するためComposerのautoload.phpを読み込み
require __DIR__ . '/vendor/autoload.php';
$raku_app_id = 'XXXXXXXX'; // アプリIDを指定
$raku_aff_id = 'XXXXXXXX'; // アフィリエイトIDを指定
$keyword = '自転車'; // キーワードを指定
$hits = '3'; // 商品データの取得数を指定
// 楽天のAPIを扱うRakutenRws_Clientクラスのインスタンスを作成
$client = new RakutenRws_Client();
$client->setApplicationId($raku_app_id);
$client->setAffiliateId($raku_aff_id);
$response = $client->execute(
'IchibaItemSearch',
array(
'hits' => $hits,
'keyword' => $keyword,
)
);
// レスポンスが正常かを確認
if ($response->isOk()) {
foreach ($response as $item) {
// 商品のタイトル・画像・価格・アフィリエイトリンクを取得
$title = $item['itemName'];
$price = $item['itemPrice'];
$link = $item["affiliateUrl"];
$image = $item["mediumImageUrls"][0]["imageUrl"];
// 商品情報を出力する際のHTML
echo '<div><a href="' . esc_url( $link ) . '" target="_blank" rel="nofollow">';
echo '<h3>' . esc_html( $title ) . '</h3>';
echo '<img src="' . $image . '" alt="' . esc_attr( $title ) . '">';
echo '<p>【価格】' . esc_html( $price ) . '円</p>';
echo '</a></div>';
}
} else {
// レスポンスがエラーの場合。getMessage() でレスポンスメッセージを取得
echo 'Error:'.$response->getMessage();
}
?>
SDKでSSL証明書のエラーが表示される場合
楽天APIのSDKをWindowsのローカル環境で利用すると、cURLでAPIに接続する際にSSL証明書のエラーが表示され商品データが取得できません。
そのような場合には、ローカル環境でSSL証明書を利用するか、SDKを使わずにAPIを利用する必要があります。
APIで取得したデータをキャッシュする場合
上記例の場合、商品データを取得するため、アクセス時に毎回APIリクエストを行いますが、取得したデータをデータベースにキャッシュ(一時保存)して、APIリクエストの回数を減らすことも可能です。
詳しくは、以下のリンク先を参考にしてみてください。
PHPコードの説明
以下、例のソースコードの簡単な説明となります。
APIリクエストを指定して送信
以下の箇所では、楽天のAPIを扱うRakutenRws_Clientクラスのインスタンスを作成し、商品データを取得するリクエストパラメータなどを指定しています。
そして、作成したインスタンスのexecuteメソッドでAPIリクエストを送信し、レスポンスデータを取得しています。
例のソースコード2行目からの箇所
$raku_app_id = 'XXXXXXXX'; // アプリIDを指定
$raku_aff_id = 'XXXXXXXX'; // アフィリエイトIDを指定
$keyword = '自転車'; // キーワードを指定
$hits = '3'; // 商品データの取得数を指定
// 楽天のAPIを扱うRakutenRws_Clientクラスのインスタンスを作成
$client = new RakutenRws_Client();
$client->setApplicationId($raku_app_id);
$client->setAffiliateId($raku_aff_id);
$response = $client->execute(
'IchibaItemSearch',
array(
'hits' => $hits,
'keyword' => $keyword,
)
);
「楽天商品検索API」の必須パラメータ
xxxxxxxxxxxxxとなっている$raku_app_id と$raku_aff_idの変数の値には、それぞれ自身の「アプリID」と「アフィリエイトID」を指定します。
また、「楽天商品検索API」のパラメータは、「アプリID」と、以下の中で最低1つが必須となります。今回の例では、keywordのパラメータを利用しています。
- keyword(検索キーワード )
- shopCode (ショップコード)
- itemCode (アイテムコード)
- genreId(ジャンルID)
パラメータに指定できる値について
パラメータに指定できる値については、以下のリンク先を参考にしてみてください。
楽天ウェブサービス: 楽天商品検索API(version:2017-07-06) | API一覧
商品情報を取得・出力
以下の箇所では、レスポンスデータの商品情報の配列から必要な情報を取得し、ループを使いHTMLとして出力します。また、取得したデータ出力する際には、データに応じてエスケープしています。
例のソースコード15行目からの箇所
// レスポンスが正常かを確認
if ($response->isOk()) {
foreach ($response as $item) {
// 商品のタイトル・画像・価格・アフィリエイトリンクを取得
$title = $item['itemName'];
$price = $item['itemPrice'];
$link = $item["affiliateUrl"];
$image = $item["mediumImageUrls"][0]["imageUrl"];
// 商品情報を出力する際のHTML
echo '<div><a href="' . esc_url( $link ) . '" target="_blank" rel="nofollow">';
echo '<h3>' . esc_html( $title ) . '</h3>';
echo '<img src="' . $image . '" alt="' . esc_attr( $title ) . '">';
echo '<p>【価格】' . esc_html( $price ) . '円</p>';
echo '</a></div>';
}
} else {
// レスポンスがエラーの場合。getMessage() でレスポンスメッセージを取得
echo 'Error:'.$response->getMessage();
}
まとめ
以上が「楽天商品検索API」を利用し、WordPressで楽天市場の商品データを取得・出力する簡単な例となります。
また、実際にAPIを利用する場合には、関数やクラス内で利用すると便利だと思います。
例で使用したRakuten Developersの「楽天商品検索API」では、他にも指定できるリクエストパラメータや、取得できる情報(レスポンスフィールド)はあります。詳しくは文末の参考サイト内を確認してみてください。