ASINから商品情報のJSONを取得する
ここでは、ISBNやASINという本の情報から、アマゾンの表紙画像や、タイトル著者名、出版社、価格、本の種類などの情報を取得してサイトとして出力する方法を書く。
Creators APIでは、様々な言語用にツールが配布されているが、私はnode.jsが一番慣れているので、node.jsを用いた方法について書いていきます。
アクセスキーやSDKは以前の記事から取得する。
鍵はjsonにまとめておいておく、.gitignoreに追加すると公開するリスクを減らせる。
key.json
{"accessKey":"アクセスキー",
"secretKey" :"シークレットキー",
"PartnerTag":"パートナータグ",
"CredentialId":"ID",
"CredentialSecret":"シークレット",
"Version":"v2.3"
}
サンプルコードではasinをまとめたjsonファイルからasinを10個ずつ読み込んでAPIレスポンスをjsonとして保存している。1回毎に3秒程度のsleepを挟んでいるので適宜調整する。
sample.json
[
"B0D7DPXQT8",
"B0GYRP2LP7"
]
サンプルコード
const fs = require('fs');
/* ====== key.json 読み込み ====== */
const json = fs.readFileSync(__dirname + '/key.json', 'utf-8');
const key = JSON.parse(json);
/* ====== sleep ====== */
function sleep(second) {
return new Promise(resolve => {
setTimeout(resolve, second * 1000);
});
}
/* ====== Creators API SDK ====== */
const {
ApiClient,
DefaultApi,
GetItemsRequestContent
} = require('./dist/index');
/* ====== API Client 初期化 ====== */
const apiClient = new ApiClient();
apiClient.credentialId = key.CredentialId;
apiClient.credentialSecret = key.CredentialSecret;
apiClient.version = "2.3"; // 例: 2.3 (JP)
/* ====== API ====== */
const api = new DefaultApi(apiClient);
/* ====== GetItemsRequest テンプレ ====== */
function createGetItemsRequest(asinList) {
const req = new GetItemsRequestContent();
req.partnerTag = key.PartnerTag;
req.itemIds = asinList;
req.condition = 'New';
req.resources = [
'browseNodeInfo.browseNodes',
'images.primary.small',
'images.primary.medium',
'images.primary.large',
'itemInfo.byLineInfo',
'itemInfo.classifications',
'itemInfo.externalIds',
'itemInfo.manufactureInfo',
'itemInfo.productInfo',
'itemInfo.title',
'offersV2.listings.price',
'offersV2.listings.loyaltyPoints'
];
return req;
}
/* ====== メイン処理 ====== */
(async function () {
let sale = 'sample';
//sale = 'other';
try {
asinJson = fs.readFileSync(
__dirname + '/json/kindle_sale/asin/' + sale + 'k.json',
'utf-8'
);
} catch (err) {
console.log('/json/kindle_sale/asin/' + sale + '.json が存在しません');
return;
}
const asinarry = JSON.parse(asinJson);
let jsondata = [];
const filename = sale + '.json';
const marketplace = 'www.amazon.co.jp';
for (let i = 0; i < asinarry.length; i += 10) {
await sleep(3);
const asinSlice = asinarry.slice(i, i + 10);
const getItemsRequest = createGetItemsRequest(asinSlice);
try {
const response = await api.getItems(marketplace, getItemsRequest);
console.log(`GetItems success: ${asinSlice.join(', ')}`);
if (response?.itemsResult?.items) {
jsondata = jsondata.concat(response.itemsResult.items);
}
fs.writeFileSync(
__dirname + '/json/kindle_sale/paapi/' + filename,
JSON.stringify(jsondata, null, 1),
'utf-8'
);
if (response?.errors) {
console.log('API Errors:', JSON.stringify(response.errors, null, 2));
}
} catch (error) {
console.log('Error calling Creators API');
// そのまま出す(最重要)
console.dir(error, { depth: null });
// よくある中身
if (error?.response) {
console.log('response:', JSON.stringify(error.response, null, 2));
}
if (error?.body) {
console.log('body:', JSON.stringify(error.body, null, 2));
}
}
}
})();
Amazon Creators APIを利用して作ったサイト