Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@sakatech-jp

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

概要

Amazon Product Advertising API 5.0 というAmazonが提供している商品情報検索APIがあります。
SDKが公式から提供されているのですが、サンプルコードのままだとコード内でASINやキーワードを指定するためAPIを単発でしかコールできないため、expressでREST APIとして動作するようにしました。

リポジトリ: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

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?