家の本棚を整理したく、また某図書室の整理ボランティアも買って出た関係で、本の分類番号を取得したくなった(背ラベルの消えた本多数)。
蔵書録をつくるプログラムは前にも Excel VBA + Amazon API で作ったけど、Amazon APIから日本十進分類法(NDC)の番号はもらえない。まあ当然。
今回は、国立国会図書館のAPIとGoogle Apps Script (Google Spreadsheetにバインドしたプロジェクト) で作ることにした。
仕組みはこんな感じ:
- UrlFetchApp.fetch で下記URLにqueryの値を追加してリクエスト
https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&recordPacking=xml&recordSchema=dcndl_simple&onlyBib=true&maximumRecords=20&query=
- query の中身はたとえば
isbn="1234567890"
とかtitle="あいう" AND creator="かきく"
とか。それを encodeURIComponent でエンコードしたもの。
- NDLへのリクエストは5秒に1回という制限があるので、Utilities.sleep で適宜待つ。
- query の中身はたとえば
- fetchした結果を XmlService.parse して内容を取り出す。namespaceの指定が全部必要。無印タグにも必要(はまった)。XMLの常識?もう何もかも忘れてる。
- 検索結果が1件なら、そのままSpreadsheetに書き出して、次の本を再帰的に検索。
- 複数あれば ui.showModalDialog でダイアログを表示して選択させる。ダイアログから google.script.run() で書き出す関数を実行。successHandlerで次の検索を再帰的に呼び出し。
- ダイアログはいつ閉じれば?と迷ったけど、単純に上の実行の次行に google.host.close() でできた。
- 検索キーはisbnまたはtitle。titleが短いばあいは完全一致指定 (title exact "あいう")。
- 一般的なタイトルの場合、違う本がたくさん見つかってしまうので、creator、publisher 指定で再検索できるようにした。
- 一般的なタイトルの場合、違う本がたくさん見つかってしまうので、creator、publisher 指定で再検索できるようにした。
困ったこと、気づいたことなど:
- 複数図書館の蔵書から一括で検索してくれるので、ほとんどの本が見つかるのはありがたい。
- 半面、ほとんどいつも複数件の結果からダイアログで選ぶことになるので、自動化という意味ではあまり…
- でも検索結果から機械的にどれかを選ぶのは難しい。図書館によってデータ内容けっこうまちまちだから。
- でも家の本はともかく、図書室の冊数だとつらい。割り切りモードを作ろうか。NDC8を含む1件を自動採用する。
コメント
コメントを投稿