Amazon MWS APIを利用して出品手数料を計算・取得する方法 – getMyFeesEstimateをnode.jsで叩く

Photo by Samuel Zeller on Unsplash
スポンサーリンク

この記事では、Amazonの出品者向けのAPIであるAmazon MWS APIを使って、出品時にかかるAmazon手数料を取得する方法を紹介します。

最近AmazonのMWS APIをよく使うんだけど、公式が用意してくれてるクライアントライブラリにNode.jsのバージョンはない。

なので、Node.jsからMWS APIを使う場合はmws-productとかmws-sdk,mwsなど、心優しい先輩が作ってくれてるnpmモジュールのお世話になるのが楽だし確実。

なんだけど、Amazonマーケットプレイスでの出品時のAmazon手数料を取得できる’getMyFeesEstimate’なんかは、割と新しめなオペレーションのため対応しているモジュールが意外となかったりする。

今回、この’getMyFeesEstimate’が使えるモジュールが見つからなかったので、自作してみた。
細かい解説は面倒なので、それなりにアクセスがあって需要がありそうなら後日追記する。かも。

準備

必要なモジュールをnpmからインストールする

今回のサンプルでは、以下のモジュールを使うのでnpmから入手しておいてください。

crypto

node.jsで暗号化とかハッシュといえばこのcrypto。
AmazonAPIにリクエストを送信する際、HmacSHA256を使って署名する必要があるのでcryptoのお世話になることにします。

$ npm install crypto
[2017/10/4追記] 改めてnpmのcryptoのページをみたところ、現在cryptoはNode本体に組み込まれたようなので、npm installする必要ないっぽいです。

単にソース内に

const crypto = require(‘crypto’);

としてやればokのようです。

これで動かない場合のみnpm installしてみてください。

https://nodejs.org/api/crypto.html

lodash

lodashはzip,zipWithなどの便利メソッドが用意されており、配列操作が何かと楽なので使ってます。

ただzip,zipWithとかぶっちゃけmap()で済むし、他もだいたいfilter(),reduce()で出来ると思うので、腕に覚えのある方なら要らないのかもしれない。でも僕はlodash好きだから使っちゃう。

$ npm install lodash

https://lodash.com/

moment

momentは時間の扱いが劇的に楽になるモジュールです。一度使うと手放せない。
今回はMWS API必須リクエストパラメーターのtimestampを作成するのに使います。

生のjsで時間を扱おうとすると何かと面倒が多く、指定形式にフォーマットされたタイムスタンプを作成するとかめんどくさすぎて無理なので、ここはぜひmomentを。

$ npm install moment

https://momentjs.com/

request

リクエスト送ってレスポンスもらうやつです。

$ npm install request

https://www.npmjs.com/package/request

MWS API ProductsセクションのgetMyFeesEstimate.jsを叩いて手数料額を取得する

Amazon APIの認証情報は別ファイルで管理する

はじめにちょっと注意事項。
Amazon MWS APIのシークレットキー、セラーIDなどの機密情報は、上記のソースにベタ書きせずに、別途jsonファイルを作って管理するのがベターだろう。

特にGitでソースを管理している場合など、外部に漏れたらマズい情報をソースに乗せていると間違えてうっかり晒してしまうこともあるので注意。

今回は’amazon_credential.json’という名前で認証情報を管理するjsonファイルを作り、そこから読み込むようにしている。

その上で.gitignoreなるものでGitの管理に含めないファイル/ディレクトリを指定できるので、このamazon_credencialをGitに晒さないように設定しておくといいだろう。

[参考].gitignore の書き方
https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff

ソース:getMyFeeEstimate.js

コンソールから実行

$ node
node > const params = {
IdType: ‘ASIN’,
IdValue: ‘B000000000’, // 任意のASIN
IsAmazonFulfilled: ‘true’, // FBAを利用しているかどうか
ListingPrice: {
Amount: ‘5000’, // 商品の販売価格
CurrencyCode: ‘JPY’, // 通貨単位(日本円)
},
Shipping: {
Amount: ‘0’, // 配送料
CurrencyCode: ‘JPY’,
},
Points: {
PointsNumber: ‘0’, // 付与するポイント
PointsMonetaryValue: {
Amount: ‘0’,
CurrencyCode: ‘JPY’,
},
},
};
node > const gmfe = require(‘./getMyFeesEstimate.js’);
node > gmfe.getMyFeesEstimate(params);

実行結果

successの場合、こんな感じでXMLが返ってくる。

なげえ!!

が、この場合必要になるのは

<TotalFeesEstimate>

以下の

<amount>

部分だけでしょう。このamountで返される数字が手数料額の合計になります。

その他、手数料の内訳などのデータも帰ってくるので、必要に応じて。

取得したxmlを見やすく加工する

ご覧の通り、Amazonから返されたxmlはそのままでは非常に見づらい&扱いづらいので、xmlやhtmlをjQueryライクに読み込むことができるモジュール’cheerio’で使いやすくしましょう。

cheerioを使えば、

$(‘TotalFeesEstimate Amount’)

みたいな感じで、jQueryのようなノリでxml内のデータにアクセスできるので便利。

ちなみに、クローリング・スクレイピングでめっちゃよく使われるcheerio-httpcliはcheerioの独自拡張版で、別物なので注意。

cheerioのインストール

こちらもnpmで。

$ npm install cheerio

https://www.npmjs.com/package/cheerio

サンプル:cheerioでレスポンスxmlから手数料額、販売額を抽出してみる

上で紹介したgetMyFeesEstimate.jsのgetMyFeesEstimate関数を以下のように変更する。

実行結果

{
“total_fee”: “896.00”,
“selling_price”: “5000”
}

だいぶマシやな!

「ここ間違うてるやんけ!」「なにやってるかわからん!」「ちゃんと説明しろ!」などのご意見・ご要望は@sutaba_macにリプ飛ばしていただくか、お問い合わせフォームなどからお願いします。バイバイ!

参考にしたもの

Amazon マーケットプレイスWebサービス (MWS) APIから注文情報を取得する方法
https://tech.torico-corp.com/blog/amazon-marketplace-mws-api/

Amazon MWS のクライアントライブラリの使用
http://docs.developer.amazonservices.com/ja_JP/dev_guide/DG_ClientLibraries.html

Amazon MWS スクラッチパッド
https://mws.amazonservices.jp/scratchpad/index.html

ABOUTこの記事をかいた人

職業:遊び人。1日の半分は睡眠時間の超ロングスリーパー。元大手IT企業のサラリーマンだったが、ブラックな労働環境で体を壊した挙句クビになり、やむをえず独立。それ以来定職にもつかず、半分遊びのようなヌルい仕事をしながら適当に暮らしている。良く言えばノマドワーカー。 詳しいプロフィールはこちら