GoogleブックスAPIの使い方
Google Books APIsはGoogleが提供する書籍を扱うためのAPIで、Google Play Booksのデータもこれに含まれる。GoからBooks APIを扱う場合はgoogle.golang.org/api/books/v1が利用できる。
Google Books APIsでは認証の方法として2つ可能になっている。
- OAuth 2.0
- APIキー
OAuth 2.0で認証を行うと、ユーザーが所有する書籍データや本棚などのデータにアクセスできる。一方でAPIキーによる認証では、ユーザーデータの操作は行えないが、書籍検索などの一般公開された情報にはアクセスできる。
前述のドキュメントによると、GoogleブックスAPIのスコープは以下の1つだけ定義されている。
https://www.googleapis.com/auth/books- 本棚(bookshelf)
- 書籍(volume)
- 書籍情報(volume info)
- シリーズ情報(volume series info)
すべての書籍は、なんらかの本棚に割り当てられているが、この本棚はGoogle BooksのものであってGoogle Play Booksの本棚とは異なる。そのため取得できる書籍はあくまでGoogle Booksの本棚となる。デフォルトでは以下の本棚が用意されている。
| タイトル | 和名 | ID |
|---|---|---|
| Favorites | お気に入り | 0 |
| Purchased | 購入済み | 1 |
| To read | 読みたい書籍 | 2 |
| Reading now | 読書中 | 3 |
| Have read | 既読 | 4 |
| Reviewed | 評価済み | 5 |
| Recently viewed | 最近見た書籍 | 6 |
| My Google eBooks | Google Play Books | 7 |
| Books for you | おすすめの書籍 | 8 |
| Browsing history | 閲覧履歴 | 9 |
ここで ID=7 の My Google eBooks がGoogle Play Booksで扱う書籍相当となっている。
Google Booksの本棚にブラウザからアクセスしたい場合、as_coll= パラメータに閲覧したい本棚の ID を渡して以下のようなURLを参照すれば良い。公開されている本棚であればログインしていなくても閲覧できる。
https://books.google.co.jp/books?uid=xxx&as_coll=4本棚と、それに含まれる書籍を列挙するコードは以下のようになる。
s, _ := books.NewService(ctx, opts...)shelves, _ := s.Mylibrary.Bookshelves.List().Context(ctx).Do()for _, shelf := range shelves.Items { log.Printf("[%s]\n", shelf.Title) id := strconv.FormatInt(shelf.Id, 10) volumes, _ := s.Mylibrary.Bookshelves.Volumes.List(id).Context(ctx).Do() for _, book := range volumes.Items { series := book.VolumeInfo.SeriesInfo log.Printf("title: %v\n", book.VolumeInfo.Title) log.Printf("series title: %v\n", series.ShortSeriesBookTitle) log.Printf("series number: %v\n", series.BookDisplayNumber) log.Printf("authors: %v\n", book.VolumeInfo.Authors) log.Printf("categories: %v\n", book.VolumeInfo.Categories) log.Printf("main category: %v\n", book.VolumeInfo.MainCategory) log.Printf("\n") }}ページネーション
Section titled “ページネーション”APIによってまちまちだが、BookshelvesVolumesListCall の場合は StartIndex や MaxResults で調整を行う。その本棚にいくつの書籍があるのかについては Volumes.TotalItems を参照する。
エラーの扱い
Section titled “エラーの扱い”APIが返すエラーは googleapi パッケージで詳しく調べられる。
import ( "errors" "google.golang.org/api/googleapi")
_, err := call.Do()if err != nil { if googleapi.IsNotModified(err) { return } var e *googleapi.Error if errors.As(err, &e) { return }}ISBNはどこにあるのかと思ったら、書籍情報に IndustryIdentifiers があって、これはISBN10やISBN13で共用されているので Type をみて振り分ける。
ただし、電子書籍の場合はISBNが割り当てられていない場合がある。salesInfo.isEbook が true となっている場合は電子書籍に該当する。この場合、ISBNを取得する手段は無い。