記事一覧はこちら

国会図書館デジタルコレクションで個人送信が取り上げられた7万1662冊の一覧 2026年04月22日版

2026/04/22に国会図書館のデジタルコレクションで個人送信される本が一斉に館内限定に切り替わる自体が発生。具体的に取り上げられた本の一覧をスプシ&tsvで公開。 国会図書館側が公開している 2026年1月の閲覧数でソート。

docs.google.com

国会図書館のアナウンスと一致

全部で 7万1662件。国会図書館側のアナウンス「合計約71,600点」とほぼ一致だから間違いないかな。

www.ndl.go.jp

データ

github gistより。スプシの生データのtsvと、受信したxml全部。

国会図書館デジタルコレクションで個人送信が取り上げられた本一覧の添付ファイル https://fushihara.hatenadiary.jp/entry/2026/04/28/154230 より · GitHub

取得方法(閲覧数)

個人向けデジタル化資料送信サービス利用統計 よりEXCEL・tsvがDL可能。3件未満は0カウント

取得方法(本の一覧)

国会図書館が公開しているAPIから取得できた。申請が必要かと思ったけど無くても使えた。

ndlsearch.ndl.go.jp

ここに書いてあるハーベスト用APIで、4月の20日~27日に更新があった全部の本のデータを取得した。

https://ndlsearch.ndl.go.jp/api/oaipmh?verb=ListRecords&metadataPrefix=dcndl_v3&set=ndl-dl&from=2026-04-20&until=2026-04-27をGETすれば、1回につき200件のデータが返ってくる。後はページングをするだけ。

プログラムはこんな感じ。node v24で動作確認

import { mkdir, writeFile } from "fs/promises";

const url = new URL(`https://ndlsearch.ndl.go.jp/api/oaipmh?verb=ListRecords&metadataPrefix=dcndl_v3&set=ndl-dl&from=2026-04-20&until=2026-04-27`);
let paginate = "";
let pageCount = 1;
await mkdir(`.xml`, { recursive: true });
while (true) {
  if (paginate != "") {
    url.searchParams.set("resumptionToken", paginate);
    url.searchParams.delete("from");
    url.searchParams.delete("until");
    url.searchParams.delete("set");
    url.searchParams.delete("metadataPrefix");
  }
  console.log(`fetching page ${url}`);
  let xmlText = "";
  do {
    const res = await fetch(url);
    const xmlTextTemp = await res.text();
    if (res.ok) {
      xmlText = xmlTextTemp;
      break;
    }
    await new Promise(resolve => { setTimeout(() => { resolve(null) }, 10 * 1000) });
  } while (true);
  await writeFile(`.xml/result-${String(pageCount).padStart(3, "0")}.xml`, xmlText);
  pageCount++;
  const m = xmlText.match(/<resumptionToken completeListSize="\d+" cursor="\d+">(.+?)<\/resumptionToken>/);
  if (!m) {
    console.log(`no resumptionToken found, finished.`);
    break;
  }
  paginate = m[1];
  console.log(`next paginate: ${paginate}`);
}
console.log(`total pages: ${pageCount - 1}`);
// node index.101.api-get-list.ts

関連情報

internet.watch.impress.co.jp