PR

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

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

楽天APIを使って効率よく商品情報を取得したい時、避けて通れないのが「APIのバージョン変更」と「データの階層構造」です。
特に2026年以降の新仕様では、エンドポイントの書き方や必須キーの名称が変わっており、古い情報のままではエラーが出てしまいます。

今回は、データが扱いやすくなる formatVersion=2 を活用した、主要3言語の最新実装コードをまとめました。

スポンサーリンク

1. 共通の接続ルール(2026年仕様)

すべてのコードで共通する、最も重要な「変更点」です。

  • エンドポイント: https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260401
    • 旧来の末尾パラメータではなく、URLのパスに日付が入ります。
  • 必須パラメータ:
    • accessKey: Kは大文字。新規発行された「pk_」から始まるキーです。
    • affiliateId: 収益化には必須。入れ忘れると報酬が発生しません。
    • formatVersion: 2 を指定することで、データ階層が1つ浅くなり扱いやすくなります。

2. PHPでの実装例(cURL版)

サーバーサイドで安全かつ詳細なエラー制御を行いたい場合の推奨コードです。
WordPressのプラグイン自作や、自社サイトのバックエンドに適しています。

<?php
// エンドポイント(2026年版パス形式)
$base_url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260401";

$params = [
    'applicationId' => 'あなたのID',
    'accessKey'     => 'あなたのKey', // Kは大文字
    'affiliateId'   => 'あなたのアフィID',
    'keyword'       => '楽天',
    'formatVersion' => 2, // 階層を浅くする
];

$ch = curl_init($base_url . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

// formatVersion=2 なので、['Item'] 階層を挟まずにループ可能
if (!empty($data['Items'])) {
    foreach ($data['Items'] as $item) {
        // 取得したデータを表示
        echo "商品名: " . htmlspecialchars($item['itemName']) . "\n";
        echo "URL: " . $item['affiliateUrl'] . "\n";
    }
} else {
    echo "商品が見つかりませんでした。";
}
?>

3. Pythonでの実装例(requests版)

データ解析や自動更新ツールなどで使いやすい、可読性の高いコードです。
「とにかくシンプルに短く書きたい」という場合にも最適です。

import requests

url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260401"

params = {
    'applicationId': 'あなたのID',
    'accessKey':     'あなたのKey',
    'affiliateId':   'あなたのアフィID',
    'keyword':       '楽天',
    'formatVersion': 2,
}

try:
    response = requests.get(url, params=params)
    response.raise_for_status() # エラーがあれば例外を発生させる
    data = response.json()

    # 直接アイテムリストにアクセスできるのがVersion2の強み
    for item in data.get('Items', []):
        print(f"商品: {item['itemName']} / 価格: {item['itemPrice']}円")

except requests.exceptions.RequestException as e:
    print(f"通信エラーが発生しました: {e}")

4. JavaScriptでの実装例(fetch版)

フロントエンドで動的に商品を表示させたい場合のモダンな書き方です。
非同期処理(Promise)を利用し、ページをリロードせずに情報を書き換える際に役立ちます。

const url = "https://openapi.rakuten.co.jp/ichibams/api/IchibaItem/Search/20260401";

const params = new URLSearchParams({
    applicationId: 'あなたのID',
    accessKey:     'あなたのKey',
    affiliateId:   'あなたのアフィID',
    keyword:       '楽天',
    formatVersion: 2
});

async function getRakutenItems() {
    try {
        const res = await fetch(`${url}?${params}`);
        if (!res.ok) throw new Error('ネットワーク応答が正常ではありません');
        
        const data = await res.json();
        
        data.Items.forEach(item => {
            console.log(`商品名: ${item.itemName} / URL: ${item.affiliateUrl}`);
        });
    } catch (err) {
        console.error("データの取得に失敗しました:", err);
    }
}

getRakutenItems();

5. 【まとめ】実装時の最終チェックリスト

最後に、開発者が陥りやすい「ここが惜しい」ポイントを一覧表にしました。
動かない時はまずここを確認しましょう。

確認項目正解の状態よくあるミス
URLパス.../Search/20260401?version=... と末尾に書く
キー名称accessKeyaccesskey(小文字のみ)
データ取得data['Items'][0]['itemName']data['Items'][0]['Item']['itemName']
収益設定affiliateId が含まれている商品は出るがリンクが通常URLになる

楽天APIは一度マスターすれば、自動で売れ筋ランキングを作ったり、特定のキーワードに絞った特化型ショップを作ったりと、活用の幅が大きく広がります。

まずはこのシンプルなテンプレートをベースに、自分なりの機能を付け加えてみてください。

コメント

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