Amazon Product Advertising API v5.0 を Node.js で動かしてみた
「カエレバ」的な Amazon アソシエイトの広告コードを自分で作ってみたいと思い調べてみたところ、Amazon Product Advertising API v5.0 という API で作れるらしいことが分かった。早速やってみる。
目次
- アクセスキー・シークレットキーを発行する
- Node.js SDK を用意する
- Node.js スクリプトを書いてみる
- 429 TooManyRequests エラーが発生する場合
- 素の JS としては動かせない
アクセスキー・シークレットキーを発行する
まずは API を利用するためのアクセスキーとシークレットキーのペアを発行する。Amazon アソシエイトの管理画面 → ツール → Product Advertising API と進み、「認証情報を追加する」ボタンを押下すると発行できる。
- 参考 : Buyer@Amazon
お試しで API を叩いてみたい場合は、公式の Scratchpad が使えるだろう。
Node.js SDK を用意する
Amazon PA API を利用するには、リクエストパラメータをあれこれ組み立てたりする必要があり、スクラッチで開発するのはとても手間がかかる。そこで、公式が用意している SDK を利用する。
- 参考 : Using SDK · Product Advertising API 5.0
- 参考 : 【PA-API 5.0】Amazon Product Advertising APIをNode.jsで動かす方法 | ぐるたかログ
Node.js SDK は Zip 形式でしか配布されていないのだが、有志が npm パッケージとして配布しているモノがいくつかある。以下は自分が実際に使えた npm パッケージだ。
- GitHub - wusoma/paapi5-nodejs-sdk: Product Advertising API 5.0 SDK for NodeJS
paapi5-nodejs-sdk
- 公式 SDK に近い
- GitHub - jorgerosal/amazon-paapi: 🔥Amazon Product Advertising API for NodeJs. A PAAPI 5.0 sdk wrapper.
amazon-paapi
- 公式 SDK の手前に薄いラッパーがある
いずれも、公式 SDK のソースコードを内部的に利用しており、やっていることは同じだ。
自分は今回、amazon-paapi
パッケージを利用することにした。
Node.js スクリプトを書いてみる
練習用リポジトリを立ててみた。コード全量はコチラを参考にドウゾ。
次のように作業ディレクトリを用意し、スクリプトを書いていく。
$ npm init -y
$ npm install -S amazon-paapi
$ touch index.js
index.js
const amazonPaapi = require('amazon-paapi');
(async () => {
try {
const commonParameters = {
AccessKey : '【アクセスキー】',
SecretKey : '【シークレットキー】',
PartnerTag : '【アソシエイト ID or トラッキング ID】',
PartnerType: 'Associates',
Marketplace: 'www.amazon.co.jp'
};
const data = await amazonPaapi.SearchItems(commonParameters, {
Keywords : '【任意のキーワード】',
SearchIndex: 'All',
ItemCount : 10,
Resources : [
'ItemInfo.Title',
'Images.Primary.Medium',
'Offers.Listings.Price'
]
});
if(!data.SearchResult || !data.SearchResult.Items) return console.warn('Error', data);
data.SearchResult.Items.forEach(item => {
console.log({
asin : item.ASIN,
detailPageUrl: item.DetailPageURL,
title : item.ItemInfo.Title.DisplayValue,
imageUrl : item.Images.Primary.Medium.URL,
imageWidth : item.Images.Primary.Medium.Width,
imageHeight : item.Images.Primary.Medium.Height,
price : item.Offers.Listings[0].Price.DisplayAmount
});
});
}
catch(error) {
console.error('Error', error);
// error.status が 429 (TooManyRequests) の場合はリトライしたい
}
})();
かなりシンプルだが、最低限のことはできている。
$ node index.js
で実行してみよう。
オブジェクトがやたらとネストされているので、Lodash の get()
関数のように安全にオブジェクトを掘り下げられるヘルパー関数を用意しておくとよいだろう。
素の SDK を利用している場合は、以下のホスト・リージョン情報を指定することで、日本の Amazon での検索ができる。
- Host :
webservices.amazon.co.jp
- Region :
us-west-2
item.DetailPageURL
がアソシエイトリンクになっているので、これらの情報を利用して HTML コードを組み立ててやれば、オリジナルの Amazon アソシエイトリンクが作れるだろう。
429 TooManyRequests エラーが発生する場合
API をコールすると 429 TooManyRequests エラーが発生する場合がある。コレはどうも、アソシエイトの売上に応じて API コールに制限がかかる仕組みらしい。それ以外にもどういうワケかこのエラーが発生する場合があり、何回かリトライしていると上手くデータが取れたりする。
なので、429 エラーが発生した場合は3回とか5回とか、適当に API コールをリトライしてみると良いだろう。
素の JS としては動かせない
Node.js SDK が使用しているのは crypto-js と superagent なので、ブラウザ上でも動かせそうな気がするのだが、host
や user-agent
などの HTTP ヘッダを変更しようとしており、コレがブラウザ上では上手くいかないために API がコールできない。
フロントエンドオンリーで動いてくれれば嬉しかったのだが、どうもダメそうなので、PA API をコールする部分だけ、サーバレス環境で実行することにしよう。Functions として実装するなら、AWS Lambda、Netlify Functions、Vercel Serverless Functions あたりが無料で使える。PaaS で良ければ Heroku や Glitch を使えば、無料で Node.js サーバを公開できるので、いかようにも実装できるだろう。
とゆーワケで以上。
- 参考 : Introduction · Product Advertising API 5.0
- 参考 : Product Advertising API
- 参考 : Node.jsでAmazonアフィリエイトの商品URLコードを取得する方法|おちゃカメラ。
- 参考 : カエレバ風
- 参考 : Amazon JS – WordPress プラグイン | WordPress.org 日本語
- 参考 : AmaQuick 公式ページ | Creazy!
- 参考 : しょうがないので Amazon アフィリエイト・リンク作成ツールを作ったですよ | text.Baldanders.info
- 参考 : Amazon Product Advertising API 5.0(PA-API v5)をexpressでREST API化する - Qiita