概要
Amazon Product Advertising API 5.0 というAmazonが提供している商品情報検索APIがあります。
SDKが公式から提供されているのですが、サンプルコードのままだとコード内でASINやキーワードを指定するためAPIを単発でしかコールできないため、expressでREST APIとして動作するようにしました。
Dockerによる実行も可能です。Dockerfileは下記リポジトリにあります。
ソースコード:https://github.com/sakatech-jp/paapi5-express-sample
【参考】
・Product Advertising API 5.0 Documentation
・Product Advertising API 5.0 SDK for NodeJS
前提条件
- Amazonアソシエイト・プログラムに承認されたアカウントを所持している
- 認証キーを発行している
- Node.jsが実行できる
使用方法
実行環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.6
BuildVersion: 19G2021
$ node -v
v14.1.0
$ docker -v
Docker version 19.03.12, build 48a66213fe
セットアップ
クローンまたはフォークして依存パッケージをインストールします。
$ git clone https://github.com/sakatech-jp/paapi5-express-sample.git
$ cd paapi5-express-sample
$ npm install
config.js内に認証キーとアソシエイトタグを設定します。
module.exports = {
ACCESS_KEY: '<YOUR ACCESS KEY>', // アクセスキーをセット
SECRET_KEY: '<YOUR SECRET KEY>', // シークレットキーをセット
API_HOST: 'webservices.amazon.co.jp',
REGION: 'us-west-2',
PARTNER_TAG: '<YOUR PARTNER TAG>', // アソシエイトタグをセット
PARTNER_TYPE: 'Associates'
}
app.jsを実行することでAPIを立ち上げることができます。
$ node app.js
Listening to PORT: 3000
エンドポイント
以下の4つのエンドポイントがあります。
/searchItems
検索条件から商品データを取得することができます。
/getItems
指定したASINを持つ商品の情報を取得することができます。
/getVariations
指定したASINを持つ商品のバリエーション(サイズや色など)を取得することができます。
/getBrowseNodes
指定した商品カテゴリの情報を取得することができます。
リクエストとレスポンスのサンプル
各エンドポイントへのリクエストのサンプルとそれに対するレスポンスです。
/searchItems
「Node.js」でキーワード検索をしてみます。
$ curl -X GET localhost:3000/searchItems \
-d '{
"Keywords": "Node.js",
"Resources": ["Images.Primary.Medium", "ItemInfo.Title", "Offers.Listings.Price"],
"ItemCount": 1
}'
「Node.js超入門[第3版]」という書籍の情報が返ってきます。
{
"SearchResult": {
"TotalResultCount": 146,
"SearchURL": "https://www.amazon.co.jp/s?k=Node.js&rh=p_n_availability%3A-1&tag=***&linkCode=osi",
"Items": [
{
"ASIN": "B08HRMTXHB",
"DetailPageURL": "https://www.amazon.co.jp/dp/B08HRMTXHB?tag=***&linkCode=osi&th=1&psc=1",
"Images": {
"Primary": {
"Medium": {
"URL": "https://m.media-amazon.com/images/I/51SoAyWCBdL._SL160_.jpg",
"Height": 160,
"Width": 124
}
}
},
"ItemInfo": {
"Title": {
"DisplayValue": "Node.js超入門[第3版]",
"Label": "Title",
"Locale": "ja_JP"
}
},
"Offers": {
"Listings": [
{
"Id": "rnBB%2BZKboyhEDyET8hzwlpvGBT%2FHZ%2BfRAoEtE4FR6i7%2Bv%2B5YeQ1ap7PjpdIUPxEugDBSHdeZavd6BbESDvgw6Q6zLIAPCpYKOoboMSZgkd6bu1zutQ5byVmg55svmhuJlopqxFxF3WQs4aCICTPDPUWEokDz1%2Fj%2FJgC3VYcQoodSEWsCS1Zu0A%3D%3D",
"Price": {
"Amount": 3168,
"Currency": "JPY",
"DisplayAmount": "¥3,168"
},
"ViolatesMAP": false
}
]
}
}
]
}
}
/getItems
「B08HRMTXHB」というASINを持つ商品の情報を取得してみます。
$ curl -X GET localhost:3000/getItems \
-d '{
"ItemIds": ["B08HRMTXHB"],
"Resources": ["Images.Primary.Medium", "ItemInfo.Title", "Offers.Listings.Price"]
}'
Node.js超入門[第3版]」という書籍の情報が返ってきます。
{
"ItemsResult": {
"Items": [
{
"ASIN": "B08HRMTXHB",
"DetailPageURL": "https://www.amazon.co.jp/dp/B08HRMTXHB?tag=***&linkCode=ogi&th=1&psc=1",
"Images": {
"Primary": {
"Medium": {
"URL": "https://m.media-amazon.com/images/I/51SoAyWCBdL._SL160_.jpg",
"Height": 160,
"Width": 124
}
}
},
"ItemInfo": {
"Title": {
"DisplayValue": "Node.js超入門[第3版]",
"Label": "Title",
"Locale": "ja_JP"
}
},
"Offers": {
"Listings": [
{
"Id": "2QzP8U6GS%2BOE3G8ybPwm1FbqJ8V%2Fh6jc24%2Bmw%2FeCFpItFscuzkMg8wE5rhC%2BVJ4bttattXONPnhLtfj%2BI2UQiM3rvFpB7SIcX3YozDc9Gb1UjeyINE%2Btn0Vl%2BdI8hjNwvDExYbcO5QCSnqCcxs%2BwuKUam5dl5tXoc6syYJ3Blv0xxDt6RyoiaA%3D%3D",
"Price": {
"Amount": 3168,
"Currency": "JPY",
"DisplayAmount": "¥3,168"
},
"ViolatesMAP": false
}
]
}
}
]
}
}
/getVariations
いろはすのペットボトルのASINである「B0026IAWMU」で情報を取得してみます。
$ curl -X GET localhost:3000/getVariations \
-d '{
"ASIN" : "B0026IAWMU"
}'
24本と48本の2種類が返ってきます。
{
"VariationsResult": {
"Items": [
{
"ASIN": "B0026IAWMU",
"DetailPageURL": "https://www.amazon.co.jp/dp/B0026IAWMU?tag=***&linkCode=ogv&th=1&psc=1",
"ItemInfo": {
"Title": {
"DisplayValue": "コカ・コーラ い・ろ・は・す 天然水 555mlPET×24本",
"Label": "Title",
"Locale": "ja_JP"
}
},
"VariationAttributes": [
{
"Name": "size_name",
"Value": "1) 555ml×24本"
}
]
},
{
"ASIN": "B007B9T4UK",
"DetailPageURL": "https://www.amazon.co.jp/dp/B007B9T4UK?tag=***&linkCode=ogv&th=1&psc=1",
"ItemInfo": {
"Title": {
"DisplayValue": "I LOHAS(い・ろ・は・す) いろはす 555ml×24本×2ケース",
"Label": "Title",
"Locale": "ja_JP"
}
},
"VariationAttributes": [
{
"Name": "size_name",
"Value": "555mlx48本"
}
]
}
],
"VariationSummary": {
"PageCount": 1,
"VariationCount": 2
}
}
}
/getBrowseNodes
商品カテゴリID「2275256051」の情報を取得してみます。
$ curl -X GET localhost:3000/getBrowseNodes \
-d '{
"BrowseNodeIds": ["2275256051"]
}'
「Kindle本」というカテゴリ情報が返ってきます。
{
"BrowseNodesResult": {
"BrowseNodes": [
{
"ContextFreeName": "Kindle本",
"DisplayName": "Kindle本",
"Id": "2275256051",
"IsRoot": false
}
]
}
}
指定できるパラメータについて
上記のサンプルで指定しているもの以外にもパラメータは多く定義されています。
詳しくは公式ドキュメントをご覧ください。
searchItems
getItems
getVariations
getBrowseNodes