Alfred で書籍を検索する Workflow を作った
書籍を紹介するとき、つい Amazon の URL を使ってしまうのだが、購入先に関してなるべく中立でありたいという思いもあり、できれば 版元ドットコム を使いたい、と常々思っていた。しかし、なかなか書籍名でウェブ検索をかけても版元ドットコムのページは上位に出てこなくて忘れてしまうので、書籍を検索する Alfred Workflow を作った。
版元ドットコムとは
版元ドットコムとは | 版元ドットコム に詳細は譲りたいが、版元 = 出版社が寄り集まって作っている団体と、その団体が作っているウェブ上の書籍データベースを指す。
参加していない版元による書籍については、当然ながらデータが存在しないし、また検索機能があるものの、それほど強力ではない(例えばアルファベットはケースセンシティブで検索されるっぽい)など弱点も見受けられる。が、サイト内に直接的な購入導線がなく、その点で中立的な書籍データベースとして利用できる。
workflow の構成
書籍検索の API を叩いて書籍を探し、確定したらそこから ISBN-10 を抽出して https://www.hanmoto.com/bd/isbn/$ISBN
に渡して開いている。同様に ISBN を URL に渡すことで書籍のページを開ける、 Amazon.co.jp と ブクログ にも対応させている。
また、書籍の情報を参考文献のフォーマットでコピーできる機能も用意した。これは大学でレポートを書く上で以前から欲しいと思っていた機能。例えば 『SRE サイトリライアビリティエンジニアリング』 をコピーすると、 Betsy Beyer, Chris Jones, Jennifer Peto, Niall Murphy (Sky株式会社 玉川 竜司 訳) . SRE サイトリライアビリティエンジニアリング. オライリー・ジャパン, 2017, 592p.
となる。
書籍検索API
書籍情報を検索できる API はいくつか存在しており、今回3つほど試したがどれも一長一短だった。1つ目は版元ドットコムとカーリルが共同で提供している openBD API 、2つ目は Google Books APIs 、3つ目は 楽天ブックス系API 。
openBD API
- GET は ISBN 指定でしかできない(検索の機能はない)
- 書誌情報は版元ドットコムによるものと JPRO によるものの2つが同梱されており、充実している
- JRPO の書誌情報は独特のフォーマットであり、 http://jpo.or.jp/topics/data/20160113a_jpoinfo.pdf で仕様を確認できる
- 認証は不要
Google Books APIs
- 検索と、 Google Books 内での ID 指定による get に対応
- 書誌情報は充実しているが、難あり
- ISBN など基本的な項目含めてアトランダムに「抜け」が見られる
- 認証は不要
楽天ブックス系API
- 各種パラメータ(書名、著者、ISBNなど)指定により GET を行い、複数マッチすれば複数の書籍情報が返る
- 書誌情報は比較的充実しているが、難あり
- ISBN-13 が振られている場合、 ISBN-10 の情報は抜けている
- 著者名の姓名分かち書きなどに統一性がない
- 和書、洋書で API が分かれている
- 認証が必要
結論としては Google Books APIs を使うことにした。 openBD は検索ができない時点で用途に見合わず、楽天は和書、洋書の一括検索ができない、 ISBN-10 が取得できない場合があるなど、難が多かった。 Google については ISBN がそもそも取得できないという大きな欠点もあるものの、一旦そのような書籍は検索結果から除外する形で妥協している。
Conclusion
円城塔『プロローグ』 にこんな一節がある。
なんでも良いがいい加減このくらいの代物は、出典の URL を明記できるくらいの形でどこかに公的なテキストデータとして蓄えておいてもらいたい。『古事記』だよ。勘弁してよ。 (p.17)
今回、いくつかの書籍情報 API を調べて、なかなかこれといったものがなく悩んでいた際に、この一節を思い出した。書籍情報の絶対的なパーマリンクが欲しい。いつかこのあたり、仕事で少し噛めたらな、とはちょっと思っている。
それはそれとして、Alfred Workflow をサッと作れるようになっておくとやはり便利だな、ということを改めて感じた。この Workflow は完全に個人的なものなので、以下のリンク先で公開してはいるが、 PR などを受け付けるつもりはない。 ISBN で URL を開けるようなサイトなら、 Amazon やブクログ以外にも応用可能と思うので、もし自分なりに使いたいという方がいたら fork してみてほしい。