PR

楽天APIで商品取得!formatVersion=2を使ったシンプルな実装サンプルまとめ

楽天ウェブサービス
記事内に広告が含まれています。

楽天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 は省略しています。

主なパラメータ

項目パラメータ必須このサンプルでの設定
アプリIDapplicationId必須指定する
Access KeyaccessKey必須指定する
フォーマットバージョンformatVersion任意2 を指定
Affiliate IDaffiliateId任意必要に応じて追加する

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=2
    formatVersion=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 URLhttps://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260701 になっているか
Application IDapplicationId が指定されているか
Access KeyaccessKey が指定されているか
検索条件keyword・genreId・itemCode・shopCode のいずれかを指定しているか
formatVersion2 を指定した場合、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の商品取得
PHPcURL$data['items']
Pythonrequestsdata.get("items", [])
JavaScriptfetchdata.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の仕様は今後変更される可能性があるため、実装時には楽天ウェブサービスの最新公式ドキュメントも確認してください。

コメント

タイトルとURLをコピーしました