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を作成します。
version2で、namealiasは個別の名前を設定してください。
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 で使えるようにするために以下のコマンドを実行します。

設定したsecretsnow.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 本を除外できない仕様みたいです。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)