楽天APIを使って商品情報を取得するときに注意したいのが、「APIのバージョン」と「レスポンスのデータ構造」です。
2026年7月1日版の「楽天市場商品検索API」では、APIのエンドポイントが変更され、applicationId に加えて accessKey も必須になっています。
また、formatVersion=2 を指定すると、商品情報のJSONレスポンスが従来よりシンプルな構造になります。
この記事では、2026年9月時点の楽天公式仕様をもとに、PHP・Python・JavaScriptで楽天市場の商品情報を取得する基本的な実装例を紹介します。
1. 共通の接続ルール(2026年仕様)
2026年7月1日版の楽天市場商品検索APIでは、エンドポイントが以下の形式になっています。
https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701
楽天公式仕様では、applicationId と accessKey が必須です。
一方、affiliateId と formatVersion は必須ではありません。
今回の基本サンプルでは、シンプルに商品情報を取得するため formatVersion=2 を指定し、affiliateId は省略しています。
主なパラメータ
| 項目 | パラメータ | 必須 | このサンプルでの設定 |
| アプリID | applicationId | 必須 | 指定する |
| Access Key | accessKey | 必須 | 指定する |
| フォーマットバージョン | formatVersion | 任意 | 2 を指定 |
| Affiliate ID | affiliateId | 任意 | 必要に応じて追加する |
2. PHPでの実装例(cURL版)
PHPでは、サーバー側からAPIを呼び出して商品情報を取得できます。
WordPressの独自プラグインや、自分で構築したWebサイトのバックエンドなどで利用する場合に使いやすい方法です。
<?php
// 楽天市場商品検索API(2026年7月1日版)
$base_url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701";
$params = [
'applicationId' => 'あなたのID',
'accessKey' => 'あなたのAccess Key',
'keyword' => '楽天',
'formatVersion' => 2,
];
$url = $base_url . '?' . http_build_query($params);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
if ($response === false) {
echo "APIへの接続に失敗しました。";
curl_close($ch);
exit;
}
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
if ($http_code !== 200 || !is_array($data)) {
echo "APIから正常なレスポンスを取得できませんでした。";
exit;
}
// formatVersion=2では「items」の中に商品情報が入る
if (!empty($data['items'])) {
foreach ($data['items'] as $item) {
echo "商品名: " . htmlspecialchars($item['itemName'], ENT_QUOTES, 'UTF-8') . "<br>";
echo "価格: " . htmlspecialchars((string)$item['itemPrice'], ENT_QUOTES, 'UTF-8') . "円<br>";
echo "商品URL: " . htmlspecialchars($item['itemUrl'], ENT_QUOTES, 'UTF-8') . "<br>";
echo "<hr>";
}
} else {
echo "商品が見つかりませんでした。";
}
?>
PHPコードで注意したいポイント
formatVersion=2 では、商品情報は items 配列の中に直接入ります。
例えば商品名は、items[0].itemName という形で取得します。
従来の formatVersion=1 では、items[0].item.itemName という構造でした。
3. Pythonでの実装例(requests版)
Pythonでは、requests を使うと比較的シンプルに楽天APIへアクセスできます。
商品情報の取得やデータ分析、自動更新処理などにも利用できます。
import requests
url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701"
params = {
"applicationId": "あなたのID",
"accessKey": "あなたのAccess Key",
"keyword": "楽天",
"formatVersion": 2,
}
try:
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
# formatVersion=2では「items」を使用
for item in data.get("items", []):
print(f"商品: {item.get('itemName', '')}")
print(f"価格: {item.get('itemPrice', '')}円")
print(f"URL: {item.get('itemUrl', '')}")
except requests.exceptions.RequestException as e:
print(f"通信エラーが発生しました: {e}")
except ValueError:
print("APIからJSON形式のデータを取得できませんでした。")
ここでも重要なのは、data.get("items", []) の部分です。
formatVersion=2 のレスポンスでは、大文字の Items ではなく小文字の items が正しいキーです。
4. JavaScriptでの実装例(fetch版)
JavaScriptの fetch() を使ってAPIを呼び出す方法もあります。
ただし、ここには重要な注意点があります。
Access Keyをブラウザに直接書かない
JavaScriptをWebページ上で実行すると、ソースコードや通信内容からAccess Keyを確認できる可能性があります。
そのため、Access Keyを含むAPIリクエストをそのまま一般公開するWebページから実行する方法は慎重に検討してください。
実際のWebサイトでは、
「ブラウザ ⇒ 自分のサーバー ⇒ 楽天API」
という形で、自分のサーバーを経由して楽天APIへアクセスする方法も検討できます。
以下は、あくまでJavaScriptからAPIを呼び出す場合の基本的な構造を確認するためのサンプルです。
const url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701";
const params = new URLSearchParams({
applicationId: "あなたのID",
accessKey: "あなたのAccess Key",
keyword: "楽天",
formatVersion: "2"
});
async function getRakutenItems() {
try {
const response = await fetch(`${url}?${params.toString()}`);
if (!response.ok) {
throw new Error(`HTTPエラー: ${response.status}`);
}
const data = await response.json();
// formatVersion=2では「items」を使用
for (const item of data.items ?? []) {
console.log(
`商品名: ${item.itemName} / 価格: ${item.itemPrice}円`
);
}
} catch (error) {
console.error(
"楽天APIからの商品取得に失敗しました:",
error
);
}
}
getRakutenItems();
ブログなどで楽天商品を自動表示する用途では、Access Key保護の観点からもサーバー側でAPIを呼び出す構成のほうが管理しやすい場合があります。
5. formatVersion=2で何が変わる?
formatVersion=2 の最大のポイントは、商品情報の階層がシンプルになることです。
formatVersion=1
従来の形式では、商品名を取得する場合items[0].item.itemNameという階層でした。formatVersion=2formatVersion=2では、items[0].itemNameとなります。同様に商品価格もitems[0].itemPriceのように取得できます。
そのため、古いコードを新しい形式に変更する場合は、単にURLへ formatVersion=2 を追加するだけではなく、JSONを読み取る部分も確認する必要があります。
6. Affiliate IDを使う場合
Affiliate IDはAPIアクセスそのものに必須ではありません。
ただし、アフィリエイトリンク経由の成果を発生させたい場合は、リクエストに affiliateId を追加します。
例えば、PHPのパラメータに以下を追加します。
$params = [
'applicationId' => 'あなたのID',
'accessKey' => 'あなたのAccess Key',
'affiliateId' => 'あなたのAffiliate ID', // 追加
'keyword' => '楽天',
'formatVersion' => 2,
];
affiliateId を指定すると、APIレスポンスに含まれるURLが通常の itemUrl からアフィリエイト用URLである affiliateUrl に切り替わります。そのため、アフィリエイトリンクとして利用したい場合は、出力時に $item['affiliateUrl'] を使用するように変更してください。
7. 商品が取得できないときの確認ポイント
楽天APIが正常に動作しない場合は、以下を確認しましょう。
| 確認項目 | 確認する内容 |
| API URL | https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701 になっているか |
| Application ID | applicationId が指定されているか |
| Access Key | accessKey が指定されているか |
| 検索条件 | keyword・genreId・itemCode・shopCode のいずれかを指定しているか |
| formatVersion | 2 を指定した場合、items の構造に合わせているか |
| Affiliate ID | アフィリエイトURLが必要な場合のみ追加しているか |
| キーワード | UTF-8でURLエンコードされているか |
| ソート | +itemPrice などを指定する場合、値をURLエンコードしているか |
| HTTPステータス | 400、404、429などのエラーが発生していないか |
楽天公式仕様では、検索時に keyword・genreId・itemCode・shopCode のいずれかを指定する必要があります。また、APIではパラメータ不足などに対してHTTP 400、データが見つからない場合に404、リクエスト数超過時に429などが返されます。
8. 3言語のコードを比較
今回紹介した基本的な処理は、どの言語でも大きくは変わりません。
| 言語 | API通信 | JSONの商品取得 |
| PHP | cURL | $data['items'] |
| Python | requests | data.get("items", []) |
| JavaScript | fetch | data.items |
どの言語を使う場合でも、formatVersion=2 を指定したら、商品データが items 配列に入っていることを確認するのがポイントです。
9. 【まとめ】実装時の最終チェックリスト
楽天市場商品検索APIを実装するときは、次の項目を確認しましょう。
- APIのバージョンが
20260701になっているか applicationIdとaccessKeyを指定しているか- 必要な検索条件(
keywordなど)を指定しているか formatVersion=2を指定する場合、新しいJSON構造(小文字のitems)に対応しているか- アフィリエイトURLが必要な場合にのみ
affiliateIdを追加しているか keywordやsortなどの値を適切にURLエンコードしているか- HTTPステータスやJSONレスポンスのエラー処理を行っているか
楽天APIは、商品検索だけでなく、取得した商品情報をWebサイトに表示したり、検索条件を変えて商品一覧を作成したりするなど、さまざまな用途に利用できます。
まずは今回のシンプルなサンプルを動かし、APIから商品名・価格・URLなどを取得できることを確認してから、必要に応じて affiliateId などの機能を付け加えていくと分かりやすいでしょう。
APIの仕様は今後変更される可能性があるため、実装時には楽天ウェブサービスの最新公式ドキュメントも確認してください。



コメント