Google Books APIs 経由で書籍を検索する

ひとまず実装したこととしては、Google Books APIsを使ってHTTP経由でJSONのデータを受け取ってパースして一覧に表示すると言う流れ。

Amazonの方は事前準備が色々必要なので手っ取り早く実装するのにGoogleの方を使ってみた。使ってみたが検索の仕方が悪いのか、返ってくるデータ量が圧倒的に少ない(本来は5巻ある書籍が2巻分しか取得できない、とか)ので、やっぱりAmazonの方じゃないとダメなのかーとかモヤモヤ。

全体的なところは公式のドキュメントを参照するのが良い気がする。

Google Books APIs

断片的な実装であればググるといくつかサンプルは出てくる模様。

書き始めると長いのでその辺りは時間のある時にして、ひとまずは現時点で調べたこととかメモの覚書。

何も考えずにブラウザで試すなら以下のURLで「keyword」という書籍が(あれば)検索にヒットして、戻り値としてJSONの中に埋め込まれてくる。

https://www.googleapis.com/books/v1/volumes?q=keyword

検索時に返されるJSONの値の詳細も公式でざっとみた方が良さそう。

https://developers.google.com/books/docs/v1/reference/volumes

ただ、「q=書籍名」の指定だけだと検索キーワードによっては色々と余計なもの(目的のものとは関係ない本)が混じることが多く、ピンポイントで検索結果を得たいなら書籍名の前にPrefixを付けることで対応できる模様。

以下はブラウザ経由で試す場合のURLサンプル。そのままアプリから呼んでも多分エラーになる。

https://www.googleapis.com/books/v1/volumes?q=intitle:プラチナエンド&Country=JP

上記「&Country=JP」は国を指定する場合の値で趣旨は詳細読んでないので不明。なくてもいいらしい。

「intitle:書籍名」とPrefixをつけると結果的に通信量が減らせるメリットがあるかもしれない。より広範囲から絞りたい場合はその限りじゃないけど。

Prefixは他にはinauthor:とかisbn:とかも出来る模様。

 intitle: 書籍のタイトル
 inauthor: 書籍の著者
 inpublisher: 書籍の出版社
 subject: Volumeの中のCategoryがどうのこうの。よく調べてない。上記ReferenceのURLのVolumeについて学ぶところからと思われる。
 isbn: International Standard Book Number

日本で主に使われるISBN (Wikipedia)

 lccn: Library of Congress Control Number

アメリカ議会図書館管理番号 (Wikipedia)

 oclc: Online Computer Library Center number

世界で最も大規模な書誌ユーティリティだそうで (Wikipedia)

Prefixの詳しい説明は以下公式で。

https://developers.google.com/books/docs/v1/using#PerformingSearch

その他の覚書としては、

  • 検索対象の文字列に日本語を使う場合は、引数となる検索文字列をBase64エンコードする
  • String.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
  • JSON経由で取得可能なThumbnailの画像URL使って、書籍の画像を別途ダウンロードする場合は http:// から https:// にURLを変更してダウンロードしないと、アプリ実装のセキュリティの関係で実行時にエラーになる

など。

JSONやだ何それ怖いだったので、とりあえずのJSONの勉強にはなった・・・。なった・・・。多分。

フォローする