LoginSignup
5
4

More than 1 year has passed since last update.

Amazon Product Advertising API 5.0(PA-API v5)をexpressでREST API化する

Last updated at Posted at 2020-09-24

概要

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

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4