Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2018/03/17 (土)

NDLのAPIで書籍検索してみるよ!

| 19:34 | NDLのAPIで書籍検索してみるよ! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - NDLのAPIで書籍検索してみるよ! - 雪乃☆雫のなでしこ日和 NDLのAPIで書籍検索してみるよ! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 掲示板の質問で、GoogleBooksAPIを使って書籍情報を取得したい! とゆうのがあって、ワタシの心にものすごくヒットしました☆

http://www.eznavi.net/bbs/index2.php?pagetop=415&only=one

 記事一つ書けるくらい結構なんだかんだして、モノスゴク賢くなったりもしたんだけど・・・

 いかんせんぐーぐるさまの検索結果は、、ISBNコードで検索してんのにヒットしないとか、複数巻あるシリーズ本でも登録されてんのとされてないのがあるとか、漫画も全巻揃ってないとか、なかなかしょぼいようです。

 あと、沢山ヒットしても最初の十件しか取得されないようで、たぶん最大取得件数とか、取得開始のインデックスとかが設定できるパラメーターがあるじゃろうと思うんだけど・・・日本語のリファレンスって無いんですかねえ???

 どうも英語のトコしか出てこなくて・・・挫折しましたヽ(;´Д`)ノ


 しかしアレですよ。書籍検索ならNDLじゃないですか?

http://iss.ndl.go.jp/information/api/

 天下の国立国会図書館さまですよ!

 枕詞として、世界のぐーぐるさまとどっちが偉いんだとゆうのは置いといて、日本で本を検索するなら断然こっちですとも!!

 がっ・・・ご説明を読むも、一体何のことやら・・・;(頭悪すぎ)

 難解な日本語はカンタンな英語より読解がむずかしいの~(+_+)

 具合わるくはならないケド、すぐに脳がシャットダウンしてしまうので、何度も自分を再起動ないとなりませんw

 なんか、ぷろとこる? が6種類もあるしさー。

 でっ、でも取りあえず、無難に(?)SRUでXMLを取得するやつでURLを叩いてみる。

http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&query=isbn=9784041056271

 ぐーぐるさまには無いと言われた本が、見事にヒットしました☆

 してさらにまた・・・取得データのスキーマ?? とやらが3種類もあるらしく・・・

 パラメータを省略すると、「dc」となりさっきのやつ。

 一番詳しいのが「dcndl」

http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl&query=isbn=9784041056271

 「dcndl_simple」はのシンプル版?

http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl_simple&query=isbn=9784041056271

 明らかにコレが一番人の目には優しいですねw

 dcよりは大分詳細で、必要っぽい情報は全て備わっているようです。(実際にはタイトルと作者と、あとせいぜい出版社くらいあればいいんだから、dcでもいいんだけどw)


 ぐーぐるさまとは違い、省略すると最大取得件数が200件なので、題名や作者で無節操な検索をしてみたら、フリーズしたかと思うほど遅くて焦った;;;

 でも大丈夫~。「maximumRecords」で最大取得件数が、「startRecord」で開始位置が変更出来ます☆ 日本語って素晴らしい!(違;)

 データベースとしての方針の違いか、ぐーぐるさまと違って内容的な記載はほぼ入ってないので、検索結果を眺めてもつまらんけど、データを取りたいだけなら別にいらないからね。

 読みが取れるというのはすごくいいと思うんですよ☆ 後でソートしたい場合とかあるし。


 とゆうわけで? とりあえずデータを取得してみる。

 折角ジェイソンさんを覚えたのに、XMLぅ~。

 しかし、なでしこ1ならむしろ、タグ切り出しタグ削除で、簡単にデータが取れますからね♪

#-----------------------------------------------------------
ISBN=「4198918635」
検索URLは「http://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordSchema=dcndl_simple&query=mediatype=1 AND isbn={ISBN}」
検索URLからHTTPデータ取得。
データ=それUTF8_SJIS変換。

データ=データから「record」のタグ切り出し。
データを「</record>」で区切る。
(データの要素数
  C=回数-1。
  書籍データ[C][0]=データ[C]から「dc:title」のタグ切り出しし、それタグ削除。
  書籍データ[C][1]=データ[C]から「dcndl:titleTranscription」のタグ切り出しし、それタグ削除。
  書籍データ[C][2]=データ[C]から「dc:creator」のタグ切り出しし、それタグ削除し、改行を「 ; 」に置換。
  書籍データ[C][3]=データ[C]から「dcndl:creatorTranscription」のタグ切り出しし、それタグ削除し、改行を「 ; 」に置換。
  書籍データ[C][4]=データ[C]から「dcndl:volume」のタグ切り出しし、それタグ削除。
  書籍データ[C][5]=データ[C]から「dcndl:seriesTitle」のタグ切り出しし、それタグ削除し、改行を「 ; 」に置換。
  書籍データ[C][6]=データ[C]から「dc:publisher」のタグ切り出しし、それタグ削除。

  一時=データ[C]から「dc:identifier」のタグ切り出し。
  (一時の要素数)
    一時[回数-1]を「URI」で正規表現マッチ。
    もしそれ=「URIならば、書籍データ[C][7]=一時[回数-1]のタグ削除。
    一時[回数-1]を「ISBN」で正規表現マッチ。
    もしそれ=「ISBNならば、
      ISBN=一時[回数-1]のタグ削除。
      書籍データ[C][8]=書籍データ[C][8]ISBN「 ; 」。
    もし回数=(一時の要素数)ならば、書籍データ[C][8]の3文字右端削除。
書籍データを言う。
#-----------------------------------------------------------

 コレもぐーぐるさまには無いと言われたヤツだけど、無事取れました。

 ISBNでのヒット率が良ければ、いろいろ検索して遊ぶわけじゃなく蔵書リストのデータを取るだけなら、なにもGUIを使って選択するこたあないんで、ISBNコードのデータを作って置いて処理させても良さそうに思うけど、あんまり連続して機械的にクエリを送っちゃダメだろうね。大量アクセスに関するご注意を見ても、具体的に最低何秒隔を開けろとか、毎分何件以下にすれとか的な記載は無いからねぇ~。

 うーん、珍しく実用の物を作る気満々だねwww


 ・・・シカシ・・・「4839951845」はNDLでもヒットしない・・・むむむ。

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20180317