Amazon Product Advertising API を使った書籍検索 API をサクッと作る
Amazon Product Advertising API を使った書籍検索 API をサクッと作る:
Amazon Product Advertising API を使って、本の ISBN コードを GET すると、
書籍情報を返してくれる API を JavaScript で作り Now(v2)にデプロイしました。
Amazon Product Advertising API の準備
Amazon Product Advertising API は登録しないと使えないので、登録を行って、を取得しておきます。
JavsScript のコード
Amazon Product Advertising API を使うためのライブラリで、今回はnode-apacを使いました。
あとは、express で簡易的な API サーバを立てて、ISBN コードが GET されたら、
それを元に API に投げて、書籍情報を返却するようにしています。
以下がコードになります。
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const { check, validationResult } = require('express-validator/check');
const { matchedData } = require('express-validator/filter');
const { OperationHelper } = require('apac');
const opHelper = new OperationHelper({
awsId: process.env.AWSID, //アクセスキー
awsSecret: process.env.AWSSECRET, //シークレットキー
assocId: process.env.ASSOCID, //アソシエイトタグ
locale: 'JP'
});
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', [check('isbn').exists()], async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty())
return res.status(422).json({ errors: errors.mapped() });
const valid = matchedData(req);
const isbnCode = valid.isbn;
opHelper
.execute('ItemLookup', {
SearchIndex: 'Books',
IdType: 'ISBN',
ItemId: isbnCode,
ResponseGroup: 'ItemAttributes,Images'
})
.then(response => {
let responseItem = null;
if (!response.result.ItemLookupResponse.Items.Item['0']) {
responseItem = response.result.ItemLookupResponse.Items.Item;
} else {
responseItem = response.result.ItemLookupResponse.Items.Item['0'];
}
const bookData = {
title: responseItem.ItemAttributes.Title,
author: responseItem.ItemAttributes.Author,
publisher: responseItem.ItemAttributes.Publisher,
releaseDate: responseItem.ItemAttributes.ReleaseDate,
imageURL: responseItem.LargeImage.URL
};
res.json({
bookData
});
})
.catch(err => {
res.status(422).json({ errors: '存在しません。' });
});
});
app.listen(3000, () => console.log('Example app listening on port 3000!'));
module.exports.app = app;
Now にデプロイ
Now をインストールしていない人は、npm i -g nowでインストールを行って、登録をしてください。
Now の準備
Now にデプロイする前に準備をします。
now.json
まずは、now.jsonを作成します。versionは2で、name、aliasは個別の名前を設定してください。aliasはなくてもいいのですが、Now の場合デプロイ毎に URL が変わってしまうので、API として使う場合は設定しておいたほうがいいと思われます。
envは環境変数として設定しているアクセスキーなどを Now で使うための設定になります。後述する
now secretsの設定で連携させます。{
"version": 2,
"name": "APIの名前",
"alias": "APIの固定URL",
"env": {
"AWSID": "@awsid",
"AWSSECRET": "@awssecret",
"ASSOCID": "@associd"
},
"builds": [{ "src": "index.js", "use": "@now/node-server" }]
}
.nowignore ファイルの作成
Now のコードは全て見えちゃうので、(URL に/_srcをつけると見える)Now にあげたくないファイルを
.nowignoreファイルに記述しますここでは、
direnvを使ってるので、.envrcファイルを対象にしています。.envrc
now secrets の実行
環境変数を Now で使えるようにするために以下のコマンドを実行します。設定した
secretsはnow.jsonと連携するように記述します。now secrets add awsid 'アクセスキー' now secrets add awssecret 'シークレットコード' now secrets add associd 'アソシエイトタグ'
$ now secret ls > 3 secrets found under takutakuma [582ms] name created awsid 3d ago awssecret 3d ago associd 3d ago
Now にデプロイ
ここまで準備できたら、 Now にデプロイしましょう。以下のコマンドを実行すると Now にデプロイができているので、
API として動くか確認してください。
now now alias
その他
- 書籍の情報検索 API は色々あるのですが、どれも一長一短でなかなか選定が難しかったです。
- ISBN での検索だと Amazon API は Kindle 本を除外できない仕様みたいです。
コメント
コメントを投稿