自分の分身を作りたい

理系の大学院生だよ

AmazonのAPIを使ってNode.jsで本のデータを表示する

ぜひフォローしてください

どうもこんにちは、就活と研究に絶賛挟み撃ち。

 

にも関わらず*1現在趣味で本棚共有アプリを作ってみているわけなのだが、本の表紙イメージを出力させるために、ユーザーにISBNをググって手入力させることを強制させている状態です

 

 

www.so-hack.com

 

www.so-hack.com

 

⬇︎ISBNについて

ISBN(アイエスビーエヌ、International Standard Book Number)は、世界共通で図書(書籍)を特定するための番号である。日本語に訳すと国際標準図書番号となる。開発はW・H・スミスのプロジェクトであった。

日本では、これを基に日本図書コードとして使用されている。

 

f:id:daigakukabuu:20181204035705p:plain

しかも一般的に本のバーコード直下に記されているのはISBN13という13桁の様式であるにも関わらず、このアプリではISBN10しか受け付けない。

 

そのためISBN13 -> ISBN10変換サイトなどを使って調べなおさなければならない。

 

なんて自己中なアプリなのだろうか。

 

そんな所、私の優秀な友人から「アマゾンのASIN使ってみたらー」というアドバイスをいただいたので試してみようということになった。

 

Amazon.co.jp ヘルプ: ISBN/ASINについて

 

 

準備

  • Product Advertising APIのアクセスキーの入手
  • apacのインストール

 

Product Advertising APIのアクセスキーの入手

Amazonアソシエイト(アフィリエイト)プログラムに参加しよう!

AmazonPA-APIの使い方 アクセスキー、シークレットキーの取得 | Eプロ

 

すでに色々な所でやり方は出ているのでこれらを参考にしながらアクセスキーとシークレットキーを取得してください。シークレットキーは人に見せないように。

 

apacのインストール

apacはAmazon Product Advertising API Client for Nodeということで、Product Advertising APIをNodeで操作するために使うnpmパッケージです。

インストール方法は以下参照に示したドキュメントにも書いてある通りですが、

 

$ npm install apac

 

でおけ。

 

Amazon内の本を検索してみる

const {OperationHelper} = require('apac');
 
const opHelper = new OperationHelper({
    awsId:     '[YOUR AWS ID HERE]',
    awsSecret: '[YOUR AWS SECRET HERE]',
    assocId:   '[YOUR ASSOCIATE TAG HERE]',
    locate:    'JP'
});
 
opHelper.execute('ItemSearch', {
  'SearchIndex': 'Books',
  'Keywords': '退屈なことはPythonにやらせよう -ノンプログラマーにもできる自動化    処理プログラミング',
  'ResponseGroup': 'ItemAttributes,Images'
}).then((res) => {
    console.log("Results object: ", res.result);
}).catch((err) => {
    console.error("Something went wrong! ", err);
});
 
1行目の波括弧は分割代入というものらしい。
ちなみに今回はItemSearchという商品検索をするモジュールを利用したが、apacではItemLookupを使ってすでにASIN(Amazon Standard Identification Number)から一意の商品の情報を出力させることもできる。
 
実行してみると、

f:id:daigakukabuu:20181204033509p:plain

今回は'SearchIndex'と'Keywords'を用いて本の中からキーワード検索を行いました。上のタイトルだと本の名前と完全一致するためItemsは一つしか現れませんでしたが、完全に一致する結果がない場合いくつかの候補となるItemsが出力されます。
 
どのようなパラメータを使って検索ができるかはこの辺りを参考にしてください。
実行結果を元に本のデータを取り出すには、
 
}).then((res) => {
    console.log("Item detail: \n", res.result.ItemSearchResponse.Items.Item);
}).catch((err) => {
    console.error("Something went wrong! ", err);
});
 と出力を書き換えてみたら良さそう。
 

f:id:daigakukabuu:20181204034422p:plain

本の詳細や画像のURLが表示されました。
 
LargeImageに格納されているURLをひらけば、
 

f:id:daigakukabuu:20181204041034p:plain

いい感じ。
 
これを利用すれば今作っている本棚共有アプリでもわざわざISBNを検索、手入力しなくても、入力された本のタイトルから画像を拾ってきてくれそうですね。
  

参照

 

www.npmjs.com

 

photo-tea.com

 

qiita.com

*1:就活を通してweb系志望する人たちが何かしら制作物を持っていることを知り、羨ましくなった模様。