ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Amazon PA-API(Product Advertising API)とは
Amazon の商品情報を取得するための公式 API です。アフィリエイト(Amazon アソシエイト)プログラム参加者向けに提供されており、商品検索・詳細取得・カート操作が可能です。2020 年 3 月に PA-API 5.0 が正式版になり、4.0 は廃止されました。
主要エラー一覧
| エラーコード | 意味 | 主な原因 |
|---|---|---|
InvalidParameterValue | パラメータ値不正 | ASIN / 国コード / 通貨 |
MissingParameter | 必須パラメータ欠落 | PartnerTag 等の未指定 |
InvalidSignature | 署名不一致 | SigV4 計算ミス、時刻ずれ |
AccessDeniedException | アクセス権限なし | アソシエイト未承認 / 失効 |
RequestThrottled | スロットリング | TPS 超過 |
TooManyRequests | レート制限 | 1 日のリクエスト上限 |
ItemNotAccessible | 商品アクセス不可 | 地域限定 / 廃番 |
InvalidAssociate | アソシエイト ID 無効 | PartnerTag のスペルミス |
NoResults | 結果ゼロ | 検索キーワード合致なし |
InvalidPartnerTag | PartnerTag 不正 | 登録外のタグ使用 |
エラー1: InvalidParameterValue
もっとも頻発するエラー。リクエストパラメータの値が API の期待形式と違います:
{
"Errors": [{
"Code": "InvalidParameterValue",
"Message": "The ItemId provided in the request is invalid."
}]
}
確認ポイント:
- ASIN: 10 桁の半角英数字(例:
B08N5WRWNW)、ハイフン不可 - Marketplace:
www.amazon.co.jp/www.amazon.com等、URL 形式 - Resources:
ItemInfo.Title等、ドット区切りで正確に - Condition:
New/Used/Collectible/Refurbished(大文字小文字)
エラー2: InvalidSignature
AWS Signature Version 4 の計算ミスで発生:
// 署名計算の正しい流れ(PHP の例)
$method = "POST";
$service = "ProductAdvertisingAPI";
$region = "us-west-2"; // ★ PA-API 固定
$host = "webservices.amazon.co.jp";
$endpoint = "https://" . $host . "/paapi5/searchitems";
$amz_date = gmdate('Ymd\THis\Z');
$date_stamp = gmdate('Ymd');
// Canonical Request
$canonical_uri = "/paapi5/searchitems";
$canonical_querystring = "";
$canonical_headers = "host:" . $host . "\n" .
"x-amz-date:" . $amz_date . "\n" .
"x-amz-target:com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems\n";
$signed_headers = "host;x-amz-date;x-amz-target";
$payload_hash = hash('sha256', $payload);
$canonical_request = $method . "\n" . $canonical_uri . "\n" .
$canonical_querystring . "\n" . $canonical_headers . "\n" .
$signed_headers . "\n" . $payload_hash;
// String to Sign
$algorithm = "AWS4-HMAC-SHA256";
$credential_scope = $date_stamp . "/" . $region . "/" . $service . "/aws4_request";
$string_to_sign = $algorithm . "\n" . $amz_date . "\n" . $credential_scope . "\n" .
hash('sha256', $canonical_request);
// Signature
$signing_key = hash_hmac('sha256', $date_stamp, "AWS4" . $secret_key, true);
$signing_key = hash_hmac('sha256', $region, $signing_key, true);
$signing_key = hash_hmac('sha256', $service, $signing_key, true);
$signing_key = hash_hmac('sha256', 'aws4_request', $signing_key, true);
$signature = hash_hmac('sha256', $string_to_sign, $signing_key);
失敗するケース:
- システム時刻が UTC からずれている(±15 分以内必須)
- SecretKey の改行・空白混入
- Payload JSON のキー順序・空白の違い
- Region を
us-west-2以外で計算
エラー3: RequestThrottled / TooManyRequests
PA-API の上限:
| 制限 | 初期値 | 備考 |
|---|---|---|
| TPS (Transactions Per Second) | 1 TPS | 1 秒に 1 リクエスト |
| 1 日のリクエスト数 | 8,640 件 | 1 TPS × 86,400 秒の 1/10 程度 |
| 売上連動増加 | 30 日売上 × 1 TPS / $1 | 売上多いほど枠拡大 |
| 新規アカウント | 初回 180 日以内に売上必須 | 未達で失効 |
対処: 指数バックオフでの再送:
function callWithRetry($callback, $maxRetries = 5) {
$delay = 1;
for ($i = 0; $i < $maxRetries; $i++) {
try {
return $callback();
} catch (Exception $e) {
if (strpos($e->getMessage(), "RequestThrottled") !== false ||
strpos($e->getMessage(), "TooManyRequests") !== false) {
sleep($delay);
$delay *= 2; // 1, 2, 4, 8, 16 秒
continue;
}
throw $e;
}
}
throw new Exception("Max retries exceeded");
}
// 使用例
$result = callWithRetry(function() use ($api, $request) {
return $api->searchItems($request);
});
エラー4: AccessDeniedException
「アクセスが拒否されました」: アソシエイトプログラム関連の権限問題:
- アソシエイトプログラム未承認 → 申請から数日かかる
- 180 日売上ゼロで失効 → 1 件以上の売上が必要
- アカウント停止 → ガイドライン違反でアカウント凍結
- API キーが別アカウント用 → 国別(.co.jp / .com)で別キー
確認: https://affiliate.amazon.co.jp にログインし「ツール → Product Advertising API」でステータスを確認します。
エラー5: ItemNotAccessible
商品が API でアクセスできない:
- 地域限定商品: 日本マーケットからは見えない海外限定品
- 廃番: ASIN は存在するが販売終了
- 大人カテゴリ: 一部の制限付きカテゴリは API で取得不可
- Marketplace 不一致:
.co.jpのキーで.comの ASIN を取得しようとした
PA-API 4.0 → 5.0 移行時のエラー
| 変更点 | 4.0 | 5.0 |
|---|---|---|
| エンドポイント | ecs.amazonaws.jp | webservices.amazon.co.jp/paapi5/ |
| プロトコル | GET + クエリ文字列 | POST + JSON |
| 署名 | SigV2 | SigV4 |
| 操作名 | ItemSearch / ItemLookup | SearchItems / GetItems |
| レスポンス | XML | JSON |
| SDK | 独自実装 | 公式 SDK 各言語 |
公式 SDK の利用(推奨)
署名計算のミスを避けるため、公式 SDK を使うのが最善:
# PHP の場合
composer require amazon-paapi5/paapi5-php-sdk
# Python
pip install paapi5-python-sdk
# JavaScript (Node.js)
npm install paapi5-nodejs-sdk
# Java
# Maven 経由で paapi5-java-sdkuse Amazon\ProductAdvertisingAPI\v1\com\amazon\paapi5\v1\api\DefaultApi;
use Amazon\ProductAdvertisingAPI\v1\com\amazon\paapi5\v1\SearchItemsRequest;
$config = new Configuration();
$config->setAccessKey("AKIA...");
$config->setSecretKey("xxxxxxxx");
$config->setHost("webservices.amazon.co.jp");
$config->setRegion("us-west-2");
$apiInstance = new DefaultApi(new GuzzleHttp\Client(), $config);
$request = new SearchItemsRequest();
$request->setPartnerTag("yourtag-22");
$request->setPartnerType(PartnerType::ASSOCIATES);
$request->setKeywords("Harry Potter");
$request->setSearchIndex("All");
$request->setResources([
SearchItemsResource::ITEM_INFOTITLE,
SearchItemsResource::OFFERSLISTINGSPRICE
]);
try {
$response = $apiInstance->searchItems($request);
// 成功
} catch (ApiException $e) {
echo "Error: " . $e->getMessage();
}
FAQ
Q: 売上ゼロで API が止まった
A: 180 日以内に売上 1 件が必要。再開には売上発生 → 数日後に自動復活。アカウント自体が停止された場合は再申請。
Q: TPS をもっと増やしたい
A: 売上を増やすと自動で枠が拡大します(30 日売上 × 係数)。手動申請はできません。
Q: PA-API 4.0 のコードはまだ動く?
A: 2020 年 3 月で完全廃止。すべて 5.0 への移行が必須です。
Q: 開発環境(Sandbox)はある?
A: ありません。本番 API を低 TPS で叩くしかありません。テスト用に専用 PartnerTag を作るのが推奨。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
- Error 400 : Bad Request Parameter Operation is missing
- MissingParameter. The request must contain the parameter Signature.
- RequestThrottled. AWS Access Key ID: ... . You are submitting requests too quickly
- SignatureDoesNotMatch. The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
- failed to open stream: HTTP request failed! HTTP/1.1 503 Service Unavailable
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?