Amazonのアフィリエイト商品情報をASINから取得するプログラムをNode.js(javascript)で書いてみました。今回は、Node.jsからアマゾンのURLを取得していく方法を解説します。ASINとは、アマゾンが扱う商品識別用の10桁のコードのことで、Amazonで商品ページURLから確認する事ができます。

URLコードを取得するには、APIをNode.jsやPHP、JAVAなどのプログラム言語から実行します。APIは、PA-API v5.0(Product Advertising API)と呼ばれており、従来使われていたPA-API v4からv5へ移行することになっています。移行期日は2020年3月となっており、それ以降はPA-API v4.0の使用ができません。

今回はその様な背景から、こちらのサイトでも新しいAPIへ切り替えを行ってみました。

目次

PA-API v5.0とNode.jsでAmazonの商品コードを取得する

Node.jsでAmazonのASINをもとに商品情報を取得するには、下記のコードで可能になります。

amazon-resolve.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
const ProductAdvertisingAPIv1 = require('paapi5-nodejs-sdk')
const defaultClient = ProductAdvertisingAPIv1.ApiClient.instance
const api = new ProductAdvertisingAPIv1.DefaultApi()
const getItemsRequest = new ProductAdvertisingAPIv1.GetItemsRequest()

defaultClient.accessKey = '<Amazonアソシエイトで取得したAPIアクセス・キー(後述)>'
defaultClient.secretKey = '<Amazonアソシエイトで取得したAPIシークレット・キー(後述)>'
defaultClient.host = 'webservices.amazon.co.jp'
defaultClient.region = 'us-west-2'
getItemsRequest['PartnerTag'] = '<Amazonアソシエイトで使うID>'
getItemsRequest['PartnerType'] = 'Associates'

// 取得したい商品のASINを指定。配列によって、複数の指定が可能に。
const ASIN = ['B01NCM2AXX']

// 取得したい製品情報の一例。
// その他は以下のリファレンスを参照
// https://webservices.amazon.com/paapi5/documentation/get-items.html
getItemsRequest['Resources'] = ['ItemInfo.Title','Images.Primary.Large','ItemInfo.Features']

getItemsRequest['ItemIds'] = ASIN

api.getItems(getItemsRequest , (error, data, response) => {
if (error) {
// エラー時の処理
console.log('PA-API 5の呼び出しエラー')
console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1))
console.log('Status Code: ' + error['status'])
if (error['response'] !== undefined && error['response']['text'] !== undefined) {
console.log('Error Object: ' + JSON.stringify(error['response']['text'], null, 1))
}
} else {
// 取得成功時の処理
let res = ProductAdvertisingAPIv1.GetItemsResponse.constructFromObject(data)
console.log('Complete Response: \n' + JSON.stringify(res, null, 1))
// 取得後の処理例は後述
}
})

PA-API 5向けのnode.jsパッケージを使用する

今回はProduct Advertising APIのNode.jsクライアントであるpaapi5-nodejs-sdkをnpmパッケージとしてインストールしておきます。

bash
1
$ npm install --save paapi5-nodejs-sdk

paapi5-nodejs-sdkをインストールすると分かるのですが、幾つかの利用シーンを想定したサンプルコードが入っています。そちらのコードを参考にするのもおすすめです。

ポイントとしては、ホストとリージョンをサンプルコードのようにwebservices.amazon.co.jpus-west-2に指定しておく事。npmパッケージに入っている、サンプルコードのように海外のホストを指定すると次のようなTooManyRequestsエラーとなります。

bash
1
2
TooManyRequests
The request was denied due to request throttling. Please verify the number of requests made per second to the Amazon Product Advertising API.

また、PA-API v4.0の解説時に紹介していたnpmパッケージapacは、新しいPA-API v5では非対応になっています。新しいものを使用しましょう。

Amazonアソシエイトでアクセスキーとシークレットキーを取得する

また、上記で解説したコードではアクセスキーとシークレットキーが必要です。予めAmazonアフィリエイトプログラムのツールメニューにあるProduct Advertising APIからクレデンシャル(アクセスキーとシークレットキー)を取得しておいてください。

Product Advertising APIの画面からクレデンシャルを取得する
Product Advertising APIの画面からクレデンシャルを取得する ©

細かい規約はこちらの通りです。

Amazonアフィリエイトプログラム
Amazon.co.jp Product Advertising API ライセンス契約

PA-API5とNode.jsでAmazonの商品情報を取得した結果例

先程のコードを実行すると次のような結果になります。

bash
1
$ node amazon-resolve.js

試しにこちらの商品の情報を取得してみました。

結果はこちらです。

Node.jsでAmazonの商品情報を取得した例(※PA-API v4.0の使用時の結果例です)
Node.jsでAmazonの商品情報を取得した例(※PA-API v4.0の使用時の結果例です) ©

アマゾンで取得した商品情報やURLを整形する

APIから返ってくる値を見てみると、以下の要素が使えそうです。

  • item.ItemInfo.Title.DisplayValue

    商品名

  • item.ItemInfo.Features.DisplayValues

    商品の説明文

  • item.DetailPageURL

    Amazonのアフィリエイト商品リンクURL

  • item.Images.Primary.Large.URL

    Amazonの商品画像URL(<img src="">)に利用できる

  • item.Images.Primary.Large.Width

    Amazonの商品画像の高さ(Pixcel)

  • item.Images.Primary.Large.Height

    Amazonの商品画像の幅(Pixcel)

あとは、こちらをお好みでHTML整形したり、返ってくるJSONを保存すれば、BabyLinkやRinkerのような埋め込みHTMLコードが作れます。

amazon-resolve.js
1
2
3
4
5
6
7
8
// 前コードの、取得成功時の処理の続き
let item = res.ItemsResult.Items[0]
console.log('タイトル: \n', item.ItemInfo.Features.DisplayValues)
console.log('説明: \n', item.ItemInfo.Features.DisplayValues)
console.log('URL: \n', item.DetailPageURL)
console.log('画像 URL: \n', item.Images.Primary.Large.URL)
console.log('画像 幅: \n', item.Images.Primary.Large.Width)
console.log('画像 高さ: \n', item.Images.Primary.Large.Height)

ということで、今回はNode.jsでアマゾンの商品情報を取得する方法を備忘録として解説しました。