ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
PA-API とは
Product Advertising API(PA-API)は、Amazon アソシエイト(アフィリエイト)が Amazon 商品情報・価格・在庫状況・カスタマーレビュー要約などをプログラムから取得するための公式 API です。アフィリエイトリンク自動生成、比較サイト構築、書籍データベースの集計などに使われます。
| 項目 | 内容 |
|---|---|
| 現行バージョン | PA-API 5.0(4.0 は 2020 年廃止) |
| 必要なアカウント | Amazon アソシエイト(地域別) |
| 認証 | AWS Signature Version 4 (Sigv4) |
| レスポンス | JSON(POST + JSON ペイロード) |
| レート制限 | 既定 1 req/s, 8640 req/day(売上で緩和) |
| 料金 | 無料(アソシエイト収益が条件) |
利用条件と制約
- Amazon アソシエイトアカウントが必要(地域別、日本なら
affiliate.amazon.co.jp) - 承認後 180 日以内に売上発生 がないと API キーが停止される(要再申請)
- 取得した情報は規約内での利用(24 時間以上のキャッシュ禁止 等)
- レート制限は過去の売上実績に応じて緩和(最大 8640 req/day → 数万 req/day へ)
認証情報の取得
- Amazon アソシエイトにログイン
- 「ツール」→「Product Advertising API」→ 「認証情報を管理する」
- Access Key ID と Secret Access Key(Sigv4 署名用)を発行
- 同ページで Partner Tag(トラッキング ID)を確認
Secret Key は表示時に必ず保管してください。後から再表示できません。
エンドポイントと地域
| 地域 | Marketplace | Host | Region |
|---|---|---|---|
| 日本 | www.amazon.co.jp | webservices.amazon.co.jp | us-west-2 |
| 米国 | www.amazon.com | webservices.amazon.com | us-east-1 |
| 英国 | www.amazon.co.uk | webservices.amazon.co.uk | eu-west-1 |
| ドイツ | www.amazon.de | webservices.amazon.de | eu-west-1 |
主要オペレーション
| オペレーション | 用途 |
|---|---|
SearchItems | キーワード/カテゴリ検索 |
GetItems | ASIN 指定で個別取得(最大 10 件) |
GetVariations | 色違い/サイズ違いのバリエーション取得 |
GetBrowseNodes | カテゴリ階層取得 |
Resources パラメータ
レスポンスに含めるフィールドを Resources で明示します。指定しないとごく一部しか返らないので注意。
{
"Keywords": "ノートPC",
"SearchIndex": "Electronics",
"PartnerTag": "yourtag-22",
"PartnerType": "Associates",
"Marketplace": "www.amazon.co.jp",
"Resources": [
"ItemInfo.Title",
"ItemInfo.Features",
"Images.Primary.Large",
"Offers.Listings.Price",
"Offers.Listings.Availability.Message",
"BrowseNodeInfo.BrowseNodes"
]
}
cURL でリクエスト例
Sigv4 署名生成が複雑なので、本来は SDK 利用が推奨ですが、雰囲気をつかむための例:
# 署名生成済を前提とした POST 例
curl -X POST \
-H "Host: webservices.amazon.co.jp" \
-H "Content-Type: application/json; charset=UTF-8" \
-H "X-Amz-Date: 20260610T000000Z" \
-H "X-Amz-Target: com.amazon.paapi5.v1.ProductAdvertisingAPIv1.SearchItems" \
-H "Content-Encoding: amz-1.0" \
-H "Authorization: AWS4-HMAC-SHA256 Credential=..., SignedHeaders=..., Signature=..." \
--data @body.json \
https://webservices.amazon.co.jp/paapi5/searchitems
SDK 利用(PHP)
composer require amazon-paapi5-php-sdkuse Amazon\ProductAdvertisingAPI\v1\ApiException;
use Amazon\ProductAdvertisingAPI\v1\Configuration;
use 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('xxxxxxx');
$config->setHost('webservices.amazon.co.jp');
$config->setRegion('us-west-2');
$api = new DefaultApi(new \GuzzleHttp\Client(), $config);
$req = new SearchItemsRequest();
$req->setSearchIndex('Books');
$req->setKeywords('PHP');
$req->setItemCount(5);
$req->setPartnerTag('yourtag-22');
$req->setPartnerType('Associates');
$req->setResources(['Images.Primary.Large','ItemInfo.Title','Offers.Listings.Price']);
try {
$res = $api->searchItems($req);
foreach ($res->getSearchResult()->getItems() as $item) {
echo $item->getItemInfo()->getTitle()->getDisplayValue(), "\n";
}
} catch (ApiException $e) {
echo $e->getMessage();
}
SDK 利用(Python)
from paapi5_python_sdk.api.default_api import DefaultApi
from paapi5_python_sdk.search_items_request import SearchItemsRequest
from paapi5_python_sdk.partner_type import PartnerType
api = DefaultApi(
access_key='AKIA...', secret_key='xxxx',
host='webservices.amazon.co.jp', region='us-west-2'
)
req = SearchItemsRequest(
partner_tag='yourtag-22',
partner_type=PartnerType.ASSOCIATES,
keywords='Python',
search_index='Books',
item_count=5,
resources=['Images.Primary.Large','ItemInfo.Title','Offers.Listings.Price'],
)
res = api.search_items(req)
for it in res.search_result.items:
print(it.item_info.title.display_value)
レート制限とリトライ
制限を超えると 429 Too Many Requests / RequestThrottled エラーが返ります。指数バックオフで再試行してください。
import time, random
for attempt in range(5):
try:
res = api.search_items(req); break
except ApiException as e:
if e.status == 429:
time.sleep((2 ** attempt) + random.random())
else:
raise
他 EC プラットフォームの API との比較
| API | 認証 | レート | 備考 |
|---|---|---|---|
| Amazon PA-API 5.0 | Sigv4 | 1 req/s〜 | アソシエイト連携前提 |
| 楽天市場 商品検索 API | App ID | 1 req/s 目安 | アフィリエイト ID 任意 |
| Yahoo!ショッピング API | Yahoo! Client ID | 制限あり(公開値) | 商品検索 / カテゴリ取得 |
| 楽天ブックス/Kobo | App ID | 同上 | 書籍特化 |
規約上の重要ポイント
- 取得データの24 時間以上の保管禁止(価格情報は特に)
- 表示する場合は「価格は変動する可能性があります」等の文言
- API キーの他者共有禁止
- 取得した画像のサイズ改変は許可範囲内(規約参照)
- アソシエイト規約に従って Partner Tag を必ず含める
FAQ
Q: 4.0 系のサンプルコードがネット上に大量にあるが、まだ使える?
A: 使えません。4.0 は 2020 年 3 月で完全廃止。5.0 のドキュメントを参照してください。
Q: 「Your account is missing approved sales」エラーが返る
A: アソシエイトで承認後 180 日間売上ゼロだとキーが停止します。Amazon アソシエイトサイトから API 再申請が必要です。
Q: SearchItems で「ノートPC」を検索しても 0 件
A: SearchIndex が Books 等になっていませんか。All または Electronics を指定してみてください。Marketplace が違うとレコードゼロもよくあります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページはありません
人気ページ
- 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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?