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

楽天商品検索APIのサンプルコードです。
当ホームページでは、PHP5を使用しています。PHP5が使用できない環境の方は、こちらのエックスサーバーをご検討下さい。当ホームページでも使用しているおすすめのサーバーです。

サンプルコード

「PHP プログラミング」というキーワードで、安い順に1件目から30件を取得するサンプルコードです。 サンプルコードの実行結果
検索条件を変えるには、各パラメータを指定して下さい。→ リクエストの作成へ

★★にはデベロッパーIDを、◆◆には、アフィリエイトIDを入れて下さい。
詳しくは、デベロッパーIDアフィリエイトIDを参照下さい。

一部スタイルシートを使用しています。スタイルシートの本

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>楽天商品検索API サンプル</title>
<style type="text/css">
<!--
img {
	border: none;
}
table {
	margin: 10px;
	border-top-width: 1px;
	border-left-width: 1px;
	border-top-style: solid;
	border-left-style: solid;
	border-top-color: gray;
	border-left-color: gray;
}
table td {
	padding: 5px;
	border-right-width: 1px;
	border-bottom-width: 1px;
	border-right-style: solid;
	border-bottom-style: solid;
	border-right-color: gray;
	border-bottom-color: gray;
}
.image {
	width: 80px;
	text-align: center;
}
.price {
	color: #8b0000;
	font-weight: bold;
	width: 80px;
	text-align: center;
}
//-->
</style>
</head>
<body>
<?php
mb_language("Japanese"); mb_internal_encoding ("utf-8");

$hit = '30';
$num = '1';
$word = 'PHP プログラミング';
$base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★';
$affiliateId = '&affiliateId=◆◆';
$operation = '&operation=ItemSearch&version=2008-09-01';
$keyword = '&keyword=' .urlencode($word);
$hits = '&hits=' .$hit;
$page = '&page=' .$num;
$sort = '&sort=%2bitemPrice';
$file = $base .$affiliateId .$operation .$keyword .$hits .$page .$sort;

$data = file_get_contents($file);
$data = str_replace('itemSearch:ItemSearch', 'itemsearch', $data);
$xml = simplexml_load_string($data);

foreach($xml->Body->itemsearch->Items->Item as $item){

  $itemName = $item->itemName;
  $itemPrice = $item->itemPrice;
  $itemCaption = $item->itemCaption;
  $affiliateUrl = $item->affiliateUrl;
  $smallImageUrl = $item->smallImageUrl;

  //文字数を指定して抜き出す 100文字以上なら・・・を追加する
  $content = mb_substr($itemCaption,0,100);
  if( mb_strlen($itemCaption)>100){ $content .= '・・・'; }

print <<< page
<table width="80%" cellspacing="0" cellpadding="0">
  <tr>
    <td class="image" rowspan="2">
      <a href="{$affiliateUrl}" target="_blank"><img src="{$smallImageUrl}"</a>
    </td>
    <td><a href="{$affiliateUrl}" target="_blank">{$itemName}</a></td>
    <td class="price">{$itemPrice}円</td>
  </tr>
  <tr>
    <td colspan="2">{$content}</td>
  </tr>
</table>

page;
}
?>
<!-- Rakuten Web Services Attribution Snippet FROM HERE -->
<a href="http://webservice.rakuten.co.jp/" target="_blank">
Supported by 楽天ウェブサービス</a>
<!-- Rakuten Web Services Attribution Snippet TO HERE -->
</body>
</html>

サンプルコードの説明(PHP部分のみ)

プログラム 説明
mb_language("Japanese");
mb_internal_encoding ("utf-8");
以下で文字を抜きだすときに文字化けを防ぐためのもの
$hit = '30';
$num = '1';
1ページに30件を取得して、その1ページを得るための変数
$word = 'PHP プログラミング'; $word に検索ワード「PHP プログラミング」を代入
$base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★'; 基本URL+デベロッパーID
$affiliateId = '&affiliateId=◆◆'; ◆◆にアフィリエイトidを入れて、アフィリエイトidを指定する
$operation = '&operation=ItemSearch&version=2008-09-01'; API名とバージョンの指定
$keyword = '&keyword=' .urlencode($word); キーワードをエンコードしてキーワードクエリを作成する
$hits = '&hits=' .$hit; 何件取得するかの指定 今回は、$hitに30を指定したので30件
$page = '&page=' .$num; 何ページ目を取得するかの指定 今回は、$hitに1を指定したので1ページ目
$sort = '&sort=%2bitemPrice'; ソートの指定 今回は安い順
$file = $base .$affiliateId .$operation .$keyword .$hits .$page .$sort; クエリをつなげて、リクエストURLを作成する
$data = file_get_contents($file);
$data = str_replace('itemSearch:ItemSearch', 'itemsearch', $data);
フィールド名に「:」があるとパースできない。したがって、「itemSearch:ItemSearch」を「itemsearch」に変換している。
$xml = simplexml_load_string($data); XMLを$xmlに代入する。
foreach($xml->Body->itemsearch->Items->Item as $item){ Itemを変数$itemに代入する。Item分繰り返す。
$itemName = $item->itemName;他 itemNameを$itemNameに代入する。itemPrice以下同様
//文字数を指定して抜き出す
100文字以上なら・・・を追加する
$content = mb_substr($itemCaption,0,100);
if( mb_strlen($itemCaption)>100){ $content .= '・・・'; }
$itemCaptionの文章が長いため、100文字を抜き出しています。100文字以上の場合は、文末に「・・・」を追加しています。
print <<< page ~ page; XMLから抜き出したデータを表示する
<!-- Rakuten Web Services Attribution Snippet FROM HERE ---->以下 クレジット表示(必須)

フィールド名に「:」があると、パースできません

楽天商品検索APIに限らず、フィールド名に「:」があるとパースすることができません。名前空間とか何とからしいですが・・・。
そこでfile_get_contents()でファイル内容を取得し、str_replace()で「:」のある部分「itemSearch:ItemSearch」を「itemsearch」に置換しています。simplexml_load_stringであるところに注意!

$data = file_get_contents($file);
$data = str_replace('itemSearch:ItemSearch', 'itemsearch', $data);
$xml = simplexml_load_string($data);
ホームページ WEBサービス API PHP プログラミング