NDC.DEVのAPIでNDLサーチを拡張してみるテスト(その1)

カーリルさんの ndc.dev で、JLAさんのNDC-LDをAPIにしていたので、日頃なじみのある国立国会図書館サーチのNDC情報を拡張してみた、というものになります。

書誌詳細画面を開いた状態で開発者ツールを起動しコンソールに以下を入れると、NDC関係のラベルがちょっとリッチになるはずです。

(※もともとは要目表(第3次区分表)までのラベルが表示)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var makeReqUrl = (code, ver = "9") => {
const baseUrl = "https://ndc-api-beta.arukascloud.io/"
let url = baseUrl
if (ver == "8") {
url += "ndc8/";
} else if (ver == "9") {
url += "ndc9/";
} else {
throw "invalid version";
};
if (code.match(/^\d{1,3}[\.]?\d*$/)) {
url += code;
} else {
throw "invalid NDC format";
}
return url
}

let table = document.getElementById('itemcontent').getElementsByTagName('table')[0];
let tr = table.getElementsByTagName('tr')
Array.prototype.forEach.call(tr, function (tr) {
let th = tr.getElementsByTagName('th')[0];
if (th) {
if (th.innerText.includes('NDC')) {
console.log(th.innerText)
let ndcVer = ""
if (th.innerText.includes('9版')) {
ndcVer = "9";
} else if (th.innerText.includes('8版')) {
ndcVer = "8";
}
if (ndcVer) {
let td = tr.getElementsByTagName('td')[0];
let ndcTdValue = td.innerText.trim();
if (ndcTdValue.match(/\d{3}.?\d*/)) {
let ndc = ndcTdValue.match(/\d{3}.?\d*/)[0];
console.log(ndc);
let reqUrl = makeReqUrl(ndc, ndcVer);
fetch(reqUrl).then(response => {
if (response.ok) {
return response.json();
}
throw new Error('API Response:'+response.status);
}).then(json => {
jsonLabel = json['label@ja'];
let newLabel = jsonLabel;
let jumpLink = "https://iss.ndl.go.jp/books?search_mode=advanced&ndc=" + ndc;
td.innerHTML = '<a href="' + jumpLink + '">' + ndc + '</a> : ' + newLabel;
});
}
};
};
};
})
  • Before:
  • After:

これをChrome拡張とかにすると誰かの役に立つのだろうか。 Tampermonkeyとかでもよいかもしれないけれど。

  • ToDo:
    • 上位分類と下位分類を出せるようにする?
    • Chrome拡張とかで使いやすくしてみる?

2019-06-01: コードがあまりに酷かったので修正