Python
api
書籍
ISBN

書籍検索APIは結局どれが一番いいのか

Abstract

世の中にはいくつか書籍検索APIがあるわけですがそれぞれについてまとめました.ただそれだけだと既存の記事の焼き直しになってしまうので500冊のデータセットについて各APIがどの程度の書籍を網羅しているかとAPIの応答速度を集計しました.

本題の前に

データセットについて

書籍検索系のAPIでは対応している書籍の数が気になると思います.書籍検索APIについてまとめた記事は数多くあるのですが,そのAPIが何冊の本に対応しているかというのはわかりません.ある程度定量的な話ができるように自分が今まで読んできた本から無作為に抽出した500冊の本のISBNコードデータセットを利用します.

ISBN-10 から ISBN-13の変換

ISBNコードと一口に言っても10桁のものと13桁のものがありなかには13桁のISBNコードにしか対応していないAPIがあります.今回のデータセットはISBNコードが10桁なので13桁に変換する必要があります.

そもそもISBNコードは最初10桁だったものが枯渇が近づいてきたので13桁の規格が施行されるようになった(IPv4とIPv6みたいなものでしょうか)らしいのですが,10桁と13桁は割と簡単に変換できます.

wikipediaの記事に詳しいのですが,実はISBNコードにおいては最後の桁は誤り検知用のチェックデジットなので大事なのはそれ以外の数字です.ISBN-13においてはチェックデジットはモジュラス10 ウェイト3・1という方法によって計算され,ISBN-10の先頭に978をつけて一番左の桁から1,3,1,3$\cdots$をかけたものの和を10で割ったあまりを10から引いたものがチェックデジット(あまりが0ならチェックデジットは0)になります.

例えば4102003010という10桁のISBNコードを13桁に変換することを考えると,978410200301について

\begin{align}
s &= 9*1+7*3+8*1+4*3+1*1+0*3+2*1+0*3+0*1+3*3+0*1+1*3\\
&=65\\
\rm{checkdigit}&=10-65\%10=5
\end{align}

ということでチェックデジットは5なので13桁のISBNコードは9784102003015になります.

各APIについて

今回は楽天ブックス書籍検索API,Google Books APIs,国立国会図書館サーチの検索用API,openBDについて調査しました.

楽天ブックス書籍検索API

公式ページはこちら.利用にはアプリの登録が必要なのですが,こちらの記事によるとgithubのURLを登録しても動くようです(自分も今回はgithubのURLを登録しました).ISBN-13しか受け付けてくれないのが難点ですが返却形式はjsonとxmlを選択できます.https://app.rakuten.co.jp/services/api/BooksTotal/Search/20170404?format=json&isbnjan={isbn}&applicationId={appID}にリクエストを送れば結果が返ってきます.応答のサンプルはこんな感じです.

{
  "count": 1,
  "page": 1,
  "first": 1,
  "last": 1,
  "hits": 1,
  "carrier": 0,
  "pageCount": 1,
  "Items": [
    {
      "Item": {
        "title": "ジキルとハイド",
        "author": "ロバート・ルイス・スティーヴンソン/田口俊樹",
        "artistName": "",
        "publisherName": "新潮社",
        "label": "",
        "isbn": "9784102003039",
        "jan": "",
        "hardware": "",
        "os": "",
        "itemCaption": "ロンドンの高名な紳士、ジキル博士の家にある時からハイドという男が出入りし始めた。彼は肌の青白い小男で不愉快な笑みをたたえ、人にかつてない嫌悪、さらには恐怖を抱かせるうえ、ついに殺人事件まで起こしてしまう。しかし、実はジキルが薬物によって邪悪なハイドへと姿を変えていたのだった…。人間の心に潜む善と悪の葛藤を描き、二重人格の代名詞としても名高い怪奇小説。",
        "salesDate": "2015年01月28日",
        "itemPrice": 432,
        "listPrice": 0,
        "discountRate": 0,
        "discountPrice": 0,
        "itemUrl": "https://books.rakuten.co.jp/rb/13070160/",
        "affiliateUrl": "",
        "smallImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3039/9784102003039.jpg?_ex=64x64",
        "mediumImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3039/9784102003039.jpg?_ex=120x120",
        "largeImageUrl": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3039/9784102003039.jpg?_ex=200x200",
        "chirayomiUrl": "",
        "availability": "1",
        "postageFlag": 0,
        "limitedFlag": 0,
        "reviewCount": 0,
        "reviewAverage": "0.0",
        "booksGenreId": "001004009/001019001/001019007"
      }
    }
  ],
  "GenreInformation": []
}

Google Books APIs

公式ページはこちら.登録不要で使える,ISBN=10とISBN-13両方に対応しているのが便利です.https://www.googleapis.com/books/v1/volumes?q=isbn:{isbn}にリクエストを送ればjson形式で結果が返ってきます.応答のサンプルはこんな感じです.

{
 "kind": "books#volumes",
 "totalItems": 1,
 "items": [
  {
   "kind": "books#volume",
   "id": "nR4mrgEACAAJ",
   "etag": "IfmOKAXvedM",
   "selfLink": "https://www.googleapis.com/books/v1/volumes/nR4mrgEACAAJ",
   "volumeInfo": {
    "title": "ジキルとハイド",
    "authors": [
     "ロバート・L. スティーヴンソン"
    ],
    "publishedDate": "2015-02-01",
    "description": "ロンドンの高名な紳士、ジキル博士の家にある時からハイドという男が出入りし始めた。彼は肌の青白い小男で不愉快な笑みをたたえ、人にかつてない嫌悪、さらには恐怖を抱かせるうえ、ついに殺人事件まで起こしてしまう。しかし、実はジキルが薬物によって邪悪なハイドへと姿を変えていたのだった...。人間の心に潜む善と悪の葛藤を描き、二重人格の代名詞としても名高い怪奇小説。",
    "industryIdentifiers": [
     {
      "type": "ISBN_10",
      "identifier": "4102003037"
     },
     {
      "type": "ISBN_13",
      "identifier": "9784102003039"
     }
    ],
    "readingModes": {
     "text": false,
     "image": false
    },
    "pageCount": 153,
    "printType": "BOOK",
    "maturityRating": "NOT_MATURE",
    "allowAnonLogging": false,
    "contentVersion": "preview-1.0.0",
    "imageLinks": {
     "smallThumbnail": "http://books.google.com/books/content?id=nR4mrgEACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
     "thumbnail": "http://books.google.com/books/content?id=nR4mrgEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"
    },
    "language": "ja",
    "previewLink": "http://books.google.co.jp/books?id=nR4mrgEACAAJ&dq=isbn:4102003037&hl=&cd=1&source=gbs_api",
    "infoLink": "http://books.google.co.jp/books?id=nR4mrgEACAAJ&dq=isbn:4102003037&hl=&source=gbs_api",
    "canonicalVolumeLink": "https://books.google.com/books/about/%E3%82%B8%E3%82%AD%E3%83%AB%E3%81%A8%E3%83%8F%E3%82%A4%E3%83%89.html?hl=&id=nR4mrgEACAAJ"
   },
   "saleInfo": {
    "country": "JP",
    "saleability": "NOT_FOR_SALE",
    "isEbook": false
   },
   "accessInfo": {
    "country": "JP",
    "viewability": "NO_PAGES",
    "embeddable": false,
    "publicDomain": false,
    "textToSpeechPermission": "ALLOWED",
    "epub": {
     "isAvailable": false
    },
    "pdf": {
     "isAvailable": false
    },
    "webReaderLink": "http://play.google.com/books/reader?id=nR4mrgEACAAJ&hl=&printsec=frontcover&source=gbs_api",
    "accessViewStatus": "NONE",
    "quoteSharingAllowed": false
   },
   "searchInfo": {
    "textSnippet": "ロンドンの高名な紳士、ジキル博士の家にある時からハイドという男が出入りし始めた。彼は肌の青白い小男で不愉快な笑みをたたえ、人にかつてない嫌悪、さらには恐怖を抱か ..."
   }
  }
 ]
}

国立国会図書館サーチ

公式ページはこちら.登録不要で使える,ISBN-10とISBN-13両方に対応しているのが便利ですが,返却形式がXMLです.http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&query=isbn={isbn}にリクエストを送れば結果が返ってきます.応答のサンプルはこんな感じです.

<searchRetrieveResponse xmlns="http://www.loc.gov/zing/srw/">
<version>1.2</version>
<numberOfRecords>3</numberOfRecords>
<nextRecordPosition>0</nextRecordPosition>
<extraResponseData>
<facets> <lst name="REPOSITORY_NO"> <int name="R100000001">1</int> <int name="R100000002">1</int> <int name="R100000004">1</int> <int name="R100000038">1</int> <int name="R100000049">1</int> </lst> <lst name="NDC"> <int name="9">3</int> </lst> <lst name="ISSUED_DATE"> <int name="2015">2</int> <int name="2017">1</int> </lst> <lst name="LIBRARY"> <int name="さいたま市立中央図書館">1</int> <int name="サピエ図書館">1</int> <int name="千葉県立東部図書館">1</int> <int name="名古屋市鶴舞中央図書館">1</int> <int name="和歌山県立図書館">1</int> <int name="国立国会図書館">1</int> <int name="堺市立中央図書館">1</int> <int name="大阪市立図書館">1</int> <int name="大阪府立中央図書館">1</int> <int name="川崎市立中原図書館">1</int> <int name="広島市立中央図書館">1</int> <int name="新潟県立図書館">1</int> <int name="東京都品川区立品川図書館">1</int> <int name="東京都立多摩図書館">1</int> <int name="横浜市中央図書館">1</int> <int name="滋賀県立図書館">1</int> <int name="福井県立図書館">1</int> <int name="福岡市総合図書館">1</int> <int name="香川県立図書館">1</int> </lst> </facets>
</extraResponseData>
<records>
<record>
<recordSchema>info:srw/schema/1/dc-v1.1</recordSchema>
<recordPacking>string</recordPacking>
<recordData>
<srw_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xsi:schemaLocation="info:srw/schema/1/dc-v1.1 http://www.loc.gov/standards/sru/dc-schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:srw_dc="info:srw/schema/1/dc-v1.1"> <dc:title>ジキルとハイド</dc:title> <dc:creator>ロバート・L・スティーヴンソン [著],田口俊樹 訳</dc:creator> <dc:description>原タイトル: THE STRANGE CASE OF DR.JEKYLL AND MR.HYDE</dc:description> <dc:publisher>新潮社</dc:publisher> <dc:language>jpn</dc:language> </srw_dc:dc>
</recordData>
<recordPosition>1</recordPosition>
</record>
<record>
<recordSchema>info:srw/schema/1/dc-v1.1</recordSchema>
<recordPacking>string</recordPacking>
<recordData>
<srw_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xsi:schemaLocation="info:srw/schema/1/dc-v1.1 http://www.loc.gov/standards/sru/dc-schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:srw_dc="info:srw/schema/1/dc-v1.1"> <dc:title>ジキルとハイド</dc:title> <dc:creator>ロバート・L・スティーヴンソン [著],田口俊樹 訳</dc:creator> <dc:description>原タイトル: THE STRANGE CASE OF DR.JEKYLL AND MR.HYDE</dc:description> <dc:description>資料種別 : [電子資料]</dc:description> <dc:description>電子的内容 : 録音データ</dc:description> <dc:description>収録時間: 4時間26分</dc:description> <dc:description>原本: 新潮社 2015 新潮文庫ス-1-1</dc:description> <dc:description>ISBN: 978-4-10-200303-9</dc:description> <dc:description>システム要件 : DAISY ver.2.02</dc:description> <dc:publisher>東京都品川区立品川図書館</dc:publisher> <dc:language>jpn</dc:language> </srw_dc:dc>
</recordData>
<recordPosition>2</recordPosition>
</record>
<record>
<recordSchema>info:srw/schema/1/dc-v1.1</recordSchema>
<recordPacking>string</recordPacking>
<recordData>
<srw_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/" xsi:schemaLocation="info:srw/schema/1/dc-v1.1 http://www.loc.gov/standards/sru/dc-schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:srw_dc="info:srw/schema/1/dc-v1.1"> <dc:title>ジキルとハイド</dc:title> <dc:creator>ロバート・L.スティーヴンソン [著],田口 俊樹 訳</dc:creator> <dc:description>2.02</dc:description> <dc:description>MP3</dc:description> <dc:publisher>新潮社</dc:publisher> </srw_dc:dc>
</recordData>
<recordPosition>3</recordPosition>
</record>
</records>
</searchRetrieveResponse>

openBD

公式ページはこちら.登録不要で使える,ISBN-10とISBN-13の両方に対応しているのが便利です.https://api.openbd.jp/v1/get?isbn={isbn}にリクエストを送るとjson形式が格納されたリストで結果が返ってきます.応答のサンプルはこんな感じです.

{
    "onix": {
        "RecordReference": "9784102003039",
        "NotificationType": "03",
        "ProductIdentifier": {
            "ProductIDType": "15",
            "IDValue": "9784102003039"
        },
        "DescriptiveDetail": {
            "ProductComposition": "00",
            "ProductForm": "BA",
            "ProductFormDetail": "B111",
            "Collection": {
                "CollectionType": "10",
                "TitleDetail": {
                    "TitleType": "01",
                    "TitleElement": [
                        {
                            "TitleElementLevel": "03",
                            "TitleText": {
                                "collationkey": "シンチョウブンコカイガイ",
                                "content": "新潮文庫"
                            }
                        }
                    ]
                }
            },
            "TitleDetail": {
                "TitleType": "01",
                "TitleElement": {
                    "TitleElementLevel": "01",
                    "TitleText": {
                        "collationkey": "ジキルトハイド",
                        "content": "ジキルとハイド"
                    }
                }
            },
            "Contributor": [
                {
                    "SequenceNumber": "1",
                    "ContributorRole": [
                        "A01"
                    ],
                    "PersonName": {
                        "collationkey": "R L スティーヴンソン",
                        "content": "R・L・スティーヴンソン"
                    }
                },
                {
                    "SequenceNumber": "2",
                    "ContributorRole": [
                        "B06"
                    ],
                    "PersonName": {
                        "collationkey": "タグチ トシキ",
                        "content": "田口 俊樹"
                    }
                }
            ],
            "Language": [
                {
                    "LanguageRole": "01",
                    "LanguageCode": "jpn",
                    "CountryCode": "JP"
                }
            ],
            "Extent": [
                {
                    "ExtentType": "11",
                    "ExtentValue": "160",
                    "ExtentUnit": "03"
                }
            ],
            "Subject": [
                {
                    "SubjectSchemeIdentifier": "78",
                    "SubjectCode": "0197"
                },
                {
                    "SubjectSchemeIdentifier": "79",
                    "SubjectCode": "31"
                }
            ],
            "Audience": [
                {
                    "AudienceCodeType": "22",
                    "AudienceCodeValue": "00"
                }
            ]
        },
        "CollateralDetail": {
            "TextContent": [
                {
                    "TextType": "02",
                    "ContentAudience": "00",
                    "Text": "高名な紳士ジキルと醜悪な小男ハイド。人間の心に潜む善と悪の葛藤を描き、二重人格の代名詞として今なお名高い怪奇小説の傑作。"
                },
                {
                    "TextType": "03",
                    "ContentAudience": "00",
                    "Text": "ロンドンの高名な紳士、ジキル博士の家にある時からハイドという男が出入りしていた。彼は肌の青白い小男で不愉快な笑みをたたえ、人にかつてない嫌悪、さらには恐怖を抱かせるうえ、ついに殺人事件まで起こしてしまう。しかし、実はジキルが薬物によって邪悪なハイドへと姿を変えていたのだった……。人間の心に潜む善と悪の葛藤を描き、二重人格の代名詞としても名高い怪奇小説。"
                }
            ],
            "SupportingResource": [
                {
                    "ResourceContentType": "01",
                    "ContentAudience": "01",
                    "ResourceMode": "03",
                    "ResourceVersion": [
                        {
                            "ResourceForm": "02",
                            "ResourceVersionFeature": [
                                {
                                    "ResourceVersionFeatureType": "01",
                                    "FeatureValue": "D502"
                                },
                                {
                                    "ResourceVersionFeatureType": "04",
                                    "FeatureValue": "9784102003039.jpg"
                                }
                            ],
                            "ResourceLink": "https://cover.openbd.jp/9784102003039.jpg"
                        }
                    ]
                }
            ]
        },
        "PublishingDetail": {
            "Imprint": {
                "ImprintIdentifier": [
                    {
                        "ImprintIDType": "19",
                        "IDValue": "10"
                    },
                    {
                        "ImprintIDType": "24",
                        "IDValue": "3162"
                    }
                ],
                "ImprintName": "新潮社"
            },
            "Publisher": {
                "PublishingRole": "01",
                "PublisherIdentifier": [
                    {
                        "PublisherIDType": "19",
                        "IDValue": "10"
                    },
                    {
                        "PublisherIDType": "24",
                        "IDValue": "3162"
                    }
                ],
                "PublisherName": "新潮社"
            },
            "PublishingDate": [
                {
                    "PublishingDateRole": "01",
                    "Date": "20150128"
                }
            ]
        },
        "ProductSupply": {
            "SupplyDetail": {
                "ReturnsConditions": {
                    "ReturnsCodeType": "04",
                    "ReturnsCode": "03"
                },
                "ProductAvailability": "99",
                "Price": [
                    {
                        "PriceType": "03",
                        "PriceAmount": "400",
                        "CurrencyCode": "JPY"
                    }
                ]
            }
        }
    },
    "hanmoto": {
        "datemodified": "2015-08-13 15:43:31",
        "datecreated": "2015-08-13 15:43:31"
    },
    "summary": {
        "isbn": "9784102003039",
        "title": "ジキルとハイド",
        "volume": "",
        "series": "新潮文庫",
        "publisher": "新潮社",
        "pubdate": "20150128",
        "cover": "https://cover.openbd.jp/9784102003039.jpg",
        "author": "R・L・スティーヴンソン/著 田口俊樹/翻訳"
    }
}

結果

網羅率と応答時間の結果は以下のようになりました.国会図書館はおそらく全ての本を網羅している一方で応答が遅い,他のAPIは網羅率が高いほど応答が遅くなる,openBDは高速で応答する上に網羅率も悪くないということがわかります.

網羅率 応答時間
楽天 378/500 0.135
Google 449/500 0.441
国立国会図書館 499/500 5.57
openBD 428/500 0.0477

各APIまとめ

登録の必要性 ISBN 返却形式 網羅率 応答時間
楽天 会員登録&アプリの登録 13のみ json/xml
Google 不要 10,13両方 json
国会図書館 不要 10,13両方 xml
openBD 不要 10,13両方 json

書籍検索APIをどんな用途に使うかにもよるとは思いますが,会員登録が必要で網羅率も高くはない楽天のAPIを使うことはないかなぁと思います.速度を重視するならopenBD,書籍の詳細な情報が欲しいならGoogle Books APIsという風に使い分ける感じでしょうか(国会図書館ならほぼ100%網羅していますが応答に時間がかかりすぎるので).