ぱんぶろ

パンジーの「いいね!」ブログ

楽天商品検索APIの使い方-キーワード検索で最安値の商品を見つけるプログラムを作りましょう(PHP)-

      2016/06/10  

rakuten_api_11

楽天商品検索APIの使い方を紹介していきます!
楽天サービスはたくさんサービスがあってたくさんのAPIが存在するのですが、本エントリーではおそらくみなさんが一番利用するであろう商品検索APIの使い方について取り上げました。

WEB APIというものは基本的には、使い方はどれも同じで、
サービス本体(ここでは楽天)のサーバーへリクエスト(URL)を投げて、結果を返してもらうといったものです。

今回は、楽天のサーバーへリクエストを送るために必須となる、アプリIDとアフィリエイトIDの取得方法について紹介していきます。

スポンサード リンク

アプリIDを取得

楽天ウェブサービスヘアクセス
http://webservice.rakuten.co.jp/

アプリID発行をクリック!
rakuten_api
もしくは、→https://webservice.rakuten.co.jp/app/create

楽天会員としてのログインが求められます。
普段から楽天ショップなど利用してすでに楽天会員である方は、ユーザーIDとパスワードを入力してログインしてください。

まだ、楽天会員でない方は、右上の新規登録から楽天会員になる必要があります。(新規登録の流れは省きますが、アナウンス通りに手順に進んでいけば難しく無いはずです。)
楽天会員になったらまたこのページに戻ってきてログインしてください。

rakuten_api_2

楽天APIを利用するアプリケーションを指定します。
わたしの場合は、当ブログ「ぱんぶろ」の中で利用を考えているので、このような感じです。

rakuten_api_3

「規約に同意して新規アプリを作成する」ボタンを押すと、以下のように、アプリが登録されます!
rakuten_api_4

ここの情報は、楽天のWEB APIを利用する上でめちゃくちゃ重要なものです。

楽天ウェブサービスにログインすればいつでも見れるので特にメモする必要はありませんが、
特に「アプリID」は必ず利用するくらいに思っておいてください。

楽天商品検索APIの必須パラメーター確認

楽天商品検索APIの必須パラメーターを確認しておきましょう。
https://webservice.rakuten.co.jp/api/ichibaitemsearch/

「入力パラメーター」あたりを見てもらうと分かりますが、「アプリID」に「○」が付いていて必須になっているのが分かります。
rakuten_api_5

その他に必須の項目を探してスクロールしていくと、「検索キーワード」「ショップコード」「商品コード」「ジャンルID」に「○」が付いており、その下には「※1」とあります。

(*1)検索キーワード、ジャンルID、商品コード、ショップコードのいずれかが指定されていることが必須です。

とありますので、「検索キーワード」「ショップコード」「商品コード」「ジャンルID」のどれか1つが指定されていることが必須であって、全部を指定する必要はありません。

ということで、楽天商品検索APIで必須のパラメーターは、「アプリID」と「検索キーワード、ショップコード、商品コード、ジャンルID」の中から1つ以上ということが分かりました。

すべての商品からキーワード検索を行う

今回作成するサービスは、すべての商品から「キーワード」で商品を検索するようにしようと思います。
ということで、「検索キーワード、ショップコード、商品コード、ジャンルID」の中からは、「検索キーワード」だけ利用します。

つまり、今回に限って言えば必須のパラメーターは「アプリID」と「検索キーワード」ということになりますね。

最安値を求めるのに必要そうなパラメーター

必須のパラメーターは分かりましたが、今回やりたいのは最安値の商品を探すことです。
そこで、最安値を調べられそうなパラメーターをピックアップしていきましょう。

  • ソート
  • 最小価格

この2つがあれば、十分そうですね。
rakuten_api_7

まぁ、ソートだけで結果を価格の安い順に並べ替えてくれるのですが、なんか楽天って0円とか1円とかの無駄に安すぎる怪しい商品が上の方に出てきたりするので、
そういうのは、「最小価格」で弾いてやりたいと思ってます。

リクエストURLの作り方

必須のURLが分かったところでリクエストURLの作り方を見ていきましょう。
rakuten_api_8

リクエストURLのルールは以下の2点。

  • https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222?[parameter]=[value]&[parameter2]=[value2]&[parameter3]=[value3]・・・の形式であること。
  • パラメーター「keyword」とパラメーター「sort」の値は、UTF-8でエンコードすること。

UTF-8のエンコーディングはプログラムの中でやるとして、今回のパラメーターを使ってリクエストURLを作ると以下のようになります(※イメージ)。

https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222?applicationId=[自分のアプリID]&keyword=[UTF-8でエンコーディングされた任意のキーワード]&sort=[+itemPrice(これもUTF-8でエンコーディング)]&minPrice=10(10円以上で設定しようと思います)

といった感じです。
これを楽天のサーバーに投げて結果を受け取り、プログラムで必要な情報をブラウザに表示されるといった感じです。

コードを書いていきましょう!

なんとなく、リクエストURLなるものを作って楽天のサーバーにアクセスするということが分かったかと思います。
たぶん、いろいろ説明するよりも実際のコードを見て、自分で動かしながら確認したほうが理解が早いと思うので、早速コードを書いていきましょう!

楽天商品検索APIのサンプルコード

<!DOCTYPE html>
<html lang='ja'>
<head>
<title>楽天商品検索API テスト</title>
<meta charset='utf-8'>
</head>
<body>
<?php
$rakuten_relust = getRakutenResult('進撃の巨人', 1000); // キーワードと最低価格を指定
foreach ($rakuten_relust as $item) :
?>
<div style='margin-bottom: 20px; padding: 30px; border: 1px solid #000; overflow:hidden;'>
 <div style='float: left;'><img src='<?php echo $item['img']; ?>'></div>
 <div style='float: left; padding: 20px;'>
 <div><?php echo $item['name']; ?></div>
 <div><a href='<?php echo $item['url']; ?>' target="_blank"><?php echo $item['url']; ?></a></div>
 <div><?php echo $item['price']; ?>円</div>
 <div><?php echo $item['shop']; ?></div>
 </div>
</div>
<?php
endforeach;
?>
</body>
</html>
 
<?php 

function getRakutenResult($keyword, $min_price) {

// ベースとなるリクエストURL
$baseurl = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20140222';
// リクエストのパラメータ作成
$params = array();
$params['applicationId'] = '[自分のアプリID]'; // アプリID
$params['keyword'] = urlencode_rfc3986($keyword); // 任意のキーワード。※文字コードは UTF-8
$params['sort'] = urlencode_rfc3986('+itemPrice'); // ソートの方法。※文字コードは UTF-8
$params['minPrice'] = $min_price; // 最低価格

$canonical_string='';

foreach($params as $k => $v) {
	$canonical_string .= '&' . $k . '=' . $v;
}
// 先頭の'&'を除去
$canonical_string = substr($canonical_string, 1);

// リクエストURL を作成
$url = $baseurl . '?' . $canonical_string;

// XMLをオブジェクトに代入
$rakuten_json=json_decode(@file_get_contents($url, true));

$items = array();
foreach($rakuten_json->Items as $item) {
	$items[] = array(
					'name' => (string)$item->Item->itemName,
					'url' => (string)$item->Item->itemUrl,
					'img' => isset($item->Item->mediumImageUrls[0]->imageUrl) ? (string)$item->Item->mediumImageUrls[0]->imageUrl : '',
					'price' => (string)$item->Item->itemPrice,
					'shop' => (string)$item->Item->shopName,
					);
}

return $items;
}

// RFC3986 形式で URL エンコードする関数
function urlencode_rfc3986($str) {
	return str_replace('%7E', '~', rawurlencode($str));
}?>

36行目は、今回作成したご自身のアプリIDを入力します。

10行目の「進撃の巨人」や「1000」の値は好きな値に変えてください。
(変えながら動作を確認してください。)

実行すると以下のような感じになります。(cssつけて最低限のデザインはしました。)
rakuten_api_9

PHPの動作環境が必要

このコードはPHPで書かれています。
動作を確認するためにはPHPの動作環境が必要です。

もし手元にPHPの動作環境がなければ、ローカル(自分のパソコン)に環境を作っちゃいましょう。
方法は以下を参考に。
超簡単!PHPプログラムをローカルで動作確認するための環境構築方法

結果の内容を見ることが大事

今回は取得した内容から選んで分かりやすい形で表示するところまでをわたしが作りました。
本来であれば、みなさんがレスポンス内容から必要そうなデータを(PHPで)抜き出し、そして見やすい形に(HTMLやCSSで)整形するわけです。

必要そうなデータを抜き出すときに大事なのが、どういうデータが返ってきているかを知ることです。
52行目で取得した$rakuten_jsonvar_dump($rakuten_json)することで確認できます。

確認したい方は、53行目あたりにvar_dump($rakuten_json);を追加してみてください。
(preで挟んだほうが整形が崩れなくていいかもしれません。)

echo <pre>
var_dump($rakuten_json);
echo </pre>

見てみるとこんな感じでデータが返ってきてるんだなということが実感できるはずです。
rakuten_api_10

まとめ

楽天APIを利用するためのアプリIDの取得や基本的な操作方法は理解できたのではないでしょうか。
今回はほんの触り程度です。

楽天検索APIだけとってもまだまだ利用していないパラメーターもたくさんあります。
https://webservice.rakuten.co.jp/api/ichibaitemsearch/と睨めっこしつつ、楽天の検索サービスを利用して自分が作りたいものがあればどんどん作っていきましょう!

言うまでもなく、実際に自分でコードを書いて実行していくことで理解していきますよ!