スキップしてメイン コンテンツに移動

NDLサーチで蔵書録づくり



家の本棚を整理したく、また某図書室の整理ボランティアも買って出た関係で、本の分類番号を取得したくなった(背ラベルの消えた本多数)。

蔵書録をつくるプログラムは前にも 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 で適宜待つ。
  • fetchした結果を XmlService.parse して内容を取り出す。namespaceの指定が全部必要。無印タグにも必要(はまった)。XMLの常識?もう何もかも忘れてる。
  • 検索結果が1件なら、そのままSpreadsheetに書き出して、次の本を再帰的に検索。
  • 複数あれば ui.showModalDialog でダイアログを表示して選択させる。ダイアログから google.script.run() で書き出す関数を実行。successHandlerで次の検索を再帰的に呼び出し。
  • ダイアログはいつ閉じれば?と迷ったけど、単純に上の実行の次行に google.host.close() でできた。
  • 検索キーはisbnまたはtitle。titleが短いばあいは完全一致指定 (title exact "あいう")。
    • 一般的なタイトルの場合、違う本がたくさん見つかってしまうので、creator、publisher 指定で再検索できるようにした。

困ったこと、気づいたことなど:
  • 複数図書館の蔵書から一括で検索してくれるので、ほとんどの本が見つかるのはありがたい。
  • 半面、ほとんどいつも複数件の結果からダイアログで選ぶことになるので、自動化という意味ではあまり…
  • でも検索結果から機械的にどれかを選ぶのは難しい。図書館によってデータ内容けっこうまちまちだから。
  • でも家の本はともかく、図書室の冊数だとつらい。割り切りモードを作ろうか。NDC8を含む1件を自動採用する。

コメント

このブログの人気の投稿

GAS 同一カラムを複数条件でfilterできない件

Google Apps Script でSpreadsheetをデータベース代わりにwebアプリをポチポチ作ってて、スクリプトからSpreadsheetにフィルタかける場合、同一カラムに複数条件を設定できないことを知って残念……。 フィルタのかけ方はこんな感じ。 日付を範囲指定したいけど、After、Before片方しかつけられない。 var dataFile = SpreadsheetApp.openById(DATA_FILE_ID); var sh = dataFile.getSheetByName(LOG_SHEET_NAME); var criteriaDateAfter = SpreadsheetApp.newFilterCriteria().whenDateAfter(new Date(targetDate)).build(); var criteriaUserEqual = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(user.id).build(); if (sh.getFilter()) { sh.getFilter().remove(); } var r = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()) .createFilter() .setColumnFilterCriteria(DATE_COL, criteriaDateAfter) .setColumnFilterCriteria(USER_ID_COL, criteriaUserEqual) .getRange(); FilterCriteriaに2回条件設定してみたり var criteriaDateRange = SpreadsheetApp.newFilterCriteria() .whenDateAfter(new Date(date1)) .whenDateBefore(new Date(date2)).build(); 同じカラムに2回条件設定してみたり var r = sh.getRange(1, 1, sh.get...

ジップロックで堆肥づくり

2012/11/02『家庭でできる堆肥づくり百科』を見てビニール袋と生ゴミで堆肥づくりに初挑戦。 ・生ごみ 250ml (細かく刻む) ・庭の土 120ml ・水 大さじ2 ・アルファルファ粉末 大さじ1 (ウサギのペレットを砕いた) 袋はジップロック大を使用。 毎日揉む(切り返し)、1日おきに空気を入れ替える。4~8週間でできるらしい。 保温のことは書いてなかったけど発砲スチロール箱に入れてみた。うまく行くといいなあ。 2012/11/07 道路掃除の方に落ち葉をもらったので一掴みいれてみる。生ゴミは窒素やや多めらしく、炭素系の落ち葉を足したらいいかなと。 2012/11/12 10日経ってニオイが落ちついてきたかも。腐ってる臭いではないけどツンとする臭いがずっとしてた。発泡スチロール箱を蓋すれば気にならない(ジップロックには全く遮断されないので、袋だけで室内に置くのは避けたい)。材料がネギとミカンなせいかなあ。見た目は一向に変わらず。

2013/05/02

研修。ひたすら葱を植える。今日はペーパーポットの苗を「ひっぱりくん」で定植し、もみ殻と堆肥をかける。「ひっぱりくん」を使うには30cm位の幅で中央が盛り上がった(W字型の)溝を掘っておく。ペーパーポットの端をセットして引っ張ると、苗が埋められ土もかけてくれる優れもの・・・だけどうまく土がかからなかったり、根が絡んでポットがほぐれなかったり、そうそう簡単でもない。でも1反弱を5人で植えきった。 はじめて1人で昼食当番。大根飯、味噌汁、がんもどき、豚肉と蕪の炒め、カレーグラタンのようなもの。ちょっと少なかったか。 なんかの取材があり、私ふくめ4人の研修生が自己紹介してみると改めて各人各様。10代、20代、30代、研修歴は1ヶ月から2年まで。でも「どうして有機農業なんですか?」にはみんな戸惑う。慣行か有機かって悩んだりしてないから。 帝国ホテルは自前の堆肥工場を持っていると聞いた。悪くない、けど、残飯じゃなく、食べるに事欠く人にお裾分けできればもっといい。かつて折詰のおみやがごく普通だったし、王侯貴族の飽食の残りもゴミになったはずがない。タイ?では幾つもの皿に盛り分け、手をつけた皿だけ請求する仕組みもあるとか。そういうものって感覚が広まればなんなく成立すると思うんだけど。 ---- 迎えにいったらフミさんは音楽を聴いてご機嫌。庭のままごとハウスで遊んだり、プランターの花を見たりして帰る。「八高線、いっぱいの人が乗ってるの」