dongnelibrary 0.3.17 → 0.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +30 -1
- package/.claude/settings.local.json +26 -1
- package/.playwright-cli/console-2026-05-15T13-42-50-460Z.log +1 -0
- package/.playwright-cli/console-2026-05-15T13-43-40-832Z.log +10 -0
- package/.playwright-cli/console-2026-05-18T12-47-04-141Z.log +14 -0
- package/.playwright-cli/page-2026-05-07T11-53-37-538Z.yml +836 -0
- package/.playwright-cli/page-2026-05-07T11-54-02-314Z.yml +658 -0
- package/.playwright-cli/page-2026-05-07T12-03-12-317Z.yml +310 -0
- package/.playwright-cli/page-2026-05-08T13-54-43-061Z.yml +276 -0
- package/.playwright-cli/page-2026-05-08T13-54-45-094Z.yml +276 -0
- package/.playwright-cli/page-2026-05-08T13-54-53-014Z.yml +201 -0
- package/.playwright-cli/page-2026-05-08T13-56-02-097Z.yml +726 -0
- package/.playwright-cli/page-2026-05-08T13-56-33-697Z.yml +226 -0
- package/.playwright-cli/page-2026-05-15T13-42-51-601Z.yml +47 -0
- package/.playwright-cli/page-2026-05-15T13-43-40-955Z.yml +47 -0
- package/.playwright-cli/page-2026-05-15T13-43-43-563Z.yml +47 -0
- package/.playwright-cli/page-2026-05-18T12-47-05-318Z.yml +135 -0
- package/README.md +59 -2
- package/dist/dongnelibrary.d.ts.map +1 -1
- package/dist/dongnelibrary.js +36 -0
- package/dist/dongnelibrary.js.map +1 -1
- package/dist/localLibraryModule/ansan.d.ts +6 -0
- package/dist/localLibraryModule/ansan.d.ts.map +1 -0
- package/dist/localLibraryModule/ansan.js +76 -0
- package/dist/localLibraryModule/ansan.js.map +1 -0
- package/dist/localLibraryModule/bcl.d.ts +6 -0
- package/dist/localLibraryModule/bcl.d.ts.map +1 -0
- package/dist/localLibraryModule/bcl.js +75 -0
- package/dist/localLibraryModule/bcl.js.map +1 -0
- package/dist/localLibraryModule/gangnam.d.ts +6 -0
- package/dist/localLibraryModule/gangnam.d.ts.map +1 -0
- package/dist/localLibraryModule/gangnam.js +100 -0
- package/dist/localLibraryModule/gangnam.js.map +1 -0
- package/dist/localLibraryModule/gangseo.d.ts +6 -0
- package/dist/localLibraryModule/gangseo.d.ts.map +1 -0
- package/dist/localLibraryModule/gangseo.js +90 -0
- package/dist/localLibraryModule/gangseo.js.map +1 -0
- package/dist/localLibraryModule/gbelib.d.ts +6 -0
- package/dist/localLibraryModule/gbelib.d.ts.map +1 -0
- package/dist/localLibraryModule/gbelib.js +122 -0
- package/dist/localLibraryModule/gbelib.js.map +1 -0
- package/dist/localLibraryModule/geoje.d.ts +6 -0
- package/dist/localLibraryModule/geoje.d.ts.map +1 -0
- package/dist/localLibraryModule/geoje.js +75 -0
- package/dist/localLibraryModule/geoje.js.map +1 -0
- package/dist/localLibraryModule/gimhae.d.ts +6 -0
- package/dist/localLibraryModule/gimhae.d.ts.map +1 -0
- package/dist/localLibraryModule/gimhae.js +81 -0
- package/dist/localLibraryModule/gimhae.js.map +1 -0
- package/dist/localLibraryModule/gunsan.d.ts +6 -0
- package/dist/localLibraryModule/gunsan.d.ts.map +1 -0
- package/dist/localLibraryModule/gunsan.js +89 -0
- package/dist/localLibraryModule/gunsan.js.map +1 -0
- package/dist/localLibraryModule/gwanak.d.ts +6 -0
- package/dist/localLibraryModule/gwanak.d.ts.map +1 -0
- package/dist/localLibraryModule/gwanak.js +103 -0
- package/dist/localLibraryModule/gwanak.js.map +1 -0
- package/dist/localLibraryModule/gwe.d.ts +6 -0
- package/dist/localLibraryModule/gwe.d.ts.map +1 -0
- package/dist/localLibraryModule/gwe.js +84 -0
- package/dist/localLibraryModule/gwe.js.map +1 -0
- package/dist/localLibraryModule/junggulib.d.ts +6 -0
- package/dist/localLibraryModule/junggulib.d.ts.map +1 -0
- package/dist/localLibraryModule/junggulib.js +96 -0
- package/dist/localLibraryModule/junggulib.js.map +1 -0
- package/dist/localLibraryModule/mokpolib.d.ts +6 -0
- package/dist/localLibraryModule/mokpolib.d.ts.map +1 -0
- package/dist/localLibraryModule/mokpolib.js +104 -0
- package/dist/localLibraryModule/mokpolib.js.map +1 -0
- package/dist/localLibraryModule/nowon.d.ts +6 -0
- package/dist/localLibraryModule/nowon.d.ts.map +1 -0
- package/dist/localLibraryModule/nowon.js +95 -0
- package/dist/localLibraryModule/nowon.js.map +1 -0
- package/dist/localLibraryModule/paju.d.ts +6 -0
- package/dist/localLibraryModule/paju.d.ts.map +1 -0
- package/dist/localLibraryModule/paju.js +94 -0
- package/dist/localLibraryModule/paju.js.map +1 -0
- package/dist/localLibraryModule/pohang.d.ts +6 -0
- package/dist/localLibraryModule/pohang.d.ts.map +1 -0
- package/dist/localLibraryModule/pohang.js +83 -0
- package/dist/localLibraryModule/pohang.js.map +1 -0
- package/dist/localLibraryModule/siheung.d.ts +6 -0
- package/dist/localLibraryModule/siheung.d.ts.map +1 -0
- package/dist/localLibraryModule/siheung.js +65 -0
- package/dist/localLibraryModule/siheung.js.map +1 -0
- package/dist/localLibraryModule/yangcheon.d.ts +6 -0
- package/dist/localLibraryModule/yangcheon.d.ts.map +1 -0
- package/dist/localLibraryModule/yangcheon.js +90 -0
- package/dist/localLibraryModule/yangcheon.js.map +1 -0
- package/dist/localLibraryModule/ydplib.d.ts +6 -0
- package/dist/localLibraryModule/ydplib.d.ts.map +1 -0
- package/dist/localLibraryModule/ydplib.js +101 -0
- package/dist/localLibraryModule/ydplib.js.map +1 -0
- package/docs/library-module-python-scripts.md +381 -0
- package/docs//355/206/265/355/225/251/353/217/204/354/204/234/302/240/353/204/244/355/212/270/354/233/214/355/201/254-/353/252/251/353/241/235.md +184 -0
- package/docs//355/206/265/355/225/251/353/217/204/354/204/234/352/264/200-/353/204/244/355/212/270/354/233/214/355/201/254-/353/252/251/353/241/235.md +19 -19
- package/package.json +44 -6
- package/scripts/analyze-html-library.sh +300 -0
- package/scripts/analyze-library.sh +261 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
exports.moduleName = "경상북도교육청통합도서관";
|
|
9
|
+
exports.homeUrl = "https://www.gbelib.kr";
|
|
10
|
+
const SEARCH_URL = "https://www.gbelib.kr/gbelib/intro/totalSearch/index.do";
|
|
11
|
+
const MORE_URL = "https://www.gbelib.kr/gbelib/intro/totalSearch/more.do";
|
|
12
|
+
const DETAIL_BASE = "https://www.gbelib.kr/gbelib/intro/search/detail.do";
|
|
13
|
+
const libraryList = [
|
|
14
|
+
{ code: "00147046", name: "경상북도교육청정보센터" },
|
|
15
|
+
{ code: "00347034", name: "경상북도교육청연수원" },
|
|
16
|
+
{ code: "00147003", name: "경상북도교육청 구미도서관" },
|
|
17
|
+
{ code: "00147010", name: "경상북도교육청 안동도서관" },
|
|
18
|
+
{ code: "00147011", name: "경상북도교육청 안동도서관용상분관" },
|
|
19
|
+
{ code: "00147039", name: "경상북도교육청 안동도서관풍산분관" },
|
|
20
|
+
{ code: "00147008", name: "경상북도교육청 상주도서관" },
|
|
21
|
+
{ code: "00147040", name: "경상북도교육청 상주도서관화령분관" },
|
|
22
|
+
{ code: "00147105", name: "경상북도교육청문화원" },
|
|
23
|
+
{ code: "00147013", name: "경상북도교육청 영일도서관" },
|
|
24
|
+
{ code: "00147016", name: "경상북도교육청 외동도서관" },
|
|
25
|
+
{ code: "00147032", name: "경상북도교육청 영주선비도서관" },
|
|
26
|
+
{ code: "00147024", name: "경상북도교육청 영주도서관풍기분관" },
|
|
27
|
+
{ code: "00147014", name: "경상북도교육청 금호도서관" },
|
|
28
|
+
{ code: "00147020", name: "경상북도교육청 점촌도서관" },
|
|
29
|
+
{ code: "00147006", name: "경상북도교육청 점촌도서관가은분관" },
|
|
30
|
+
{ code: "00147019", name: "경상북도교육청 의성도서관" },
|
|
31
|
+
{ code: "00147022", name: "경상북도교육청 청송도서관" },
|
|
32
|
+
{ code: "00147012", name: "경상북도교육청 영양도서관" },
|
|
33
|
+
{ code: "00147031", name: "경상북도교육청 영덕도서관" },
|
|
34
|
+
{ code: "00147021", name: "경상북도교육청 청도도서관" },
|
|
35
|
+
{ code: "00147002", name: "경상북도교육청 고령도서관" },
|
|
36
|
+
{ code: "00147009", name: "경상북도교육청 성주도서관" },
|
|
37
|
+
{ code: "00147023", name: "경상북도교육청 칠곡도서관" },
|
|
38
|
+
{ code: "00147015", name: "경상북도교육청 예천도서관" },
|
|
39
|
+
{ code: "00147007", name: "경상북도교육청 봉화도서관" },
|
|
40
|
+
{ code: "00147018", name: "경상북도교육청 울진도서관" },
|
|
41
|
+
{ code: "00147017", name: "경상북도교육청 울릉도서관" },
|
|
42
|
+
];
|
|
43
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
44
|
+
function parseBookRows(html) {
|
|
45
|
+
const dom = new jsdom_1.JSDOM(html);
|
|
46
|
+
const document = dom.window.document;
|
|
47
|
+
const booklist = [];
|
|
48
|
+
document.querySelectorAll("div.row").forEach((row) => {
|
|
49
|
+
const bif = row.querySelector("div.bif");
|
|
50
|
+
if (!bif)
|
|
51
|
+
return;
|
|
52
|
+
const titleLink = bif.querySelector("a.name.goDetail");
|
|
53
|
+
if (!titleLink)
|
|
54
|
+
return;
|
|
55
|
+
const rawTitle = titleLink.textContent ?? "";
|
|
56
|
+
const bookTitle = rawTitle.replace(/<[^>]+>/g, "").trim();
|
|
57
|
+
if (!bookTitle)
|
|
58
|
+
return;
|
|
59
|
+
const vLoca = titleLink.getAttribute("vLoca") ?? "";
|
|
60
|
+
const vCtrl = titleLink.getAttribute("vCtrl") ?? "";
|
|
61
|
+
const bookUrl = vLoca && vCtrl
|
|
62
|
+
? `${DETAIL_BASE}?vLoca=${vLoca}&vCtrl=${vCtrl}&menu_idx=150`
|
|
63
|
+
: "";
|
|
64
|
+
const paragraphs = Array.from(bif.querySelectorAll("p"));
|
|
65
|
+
let libName = "";
|
|
66
|
+
for (const p of paragraphs) {
|
|
67
|
+
const text = (p.textContent ?? "").trim();
|
|
68
|
+
if (text &&
|
|
69
|
+
!text.includes("저자") &&
|
|
70
|
+
!text.includes("출판사") &&
|
|
71
|
+
!text.includes("발행")) {
|
|
72
|
+
libName = text;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
booklist.push({ libraryName: libName, title: bookTitle, bookUrl, exist: false });
|
|
77
|
+
});
|
|
78
|
+
return booklist;
|
|
79
|
+
}
|
|
80
|
+
async function searchImpl(opt) {
|
|
81
|
+
const { title, libraryName, signal } = opt;
|
|
82
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
83
|
+
const lcode = getLibraryCode(libraryName);
|
|
84
|
+
const qs = {
|
|
85
|
+
menu_idx: 150,
|
|
86
|
+
search_text: title,
|
|
87
|
+
search_type: "L_TITLE",
|
|
88
|
+
total_search_type: "TOTAL",
|
|
89
|
+
search_detail_yn: "N",
|
|
90
|
+
book_more_count: 1,
|
|
91
|
+
libraryCodes: lcode,
|
|
92
|
+
};
|
|
93
|
+
const { statusCode, body } = await (0, http_1.get)(SEARCH_URL, { qs, signal });
|
|
94
|
+
if (statusCode !== 200)
|
|
95
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
96
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
97
|
+
const totalText = dom.window.document.getElementById("bookTotalCnt")?.textContent ?? "0";
|
|
98
|
+
const totalBookCount = parseInt(totalText.replace(/,/g, ""), 10) || 0;
|
|
99
|
+
const booklist = parseBookRows(body);
|
|
100
|
+
// fetch more batches in parallel (up to 9 more calls for ~30 books total)
|
|
101
|
+
if (totalBookCount > 3) {
|
|
102
|
+
const batchCount = Math.min(9, Math.ceil((totalBookCount - 3) / 3));
|
|
103
|
+
const moreQs = { ...qs, more_type: "BOOK" };
|
|
104
|
+
const moreFetches = Array.from({ length: batchCount }, (_, i) => {
|
|
105
|
+
return (0, http_1.get)(MORE_URL, {
|
|
106
|
+
qs: { ...moreQs, book_more_count: i + 2 },
|
|
107
|
+
signal,
|
|
108
|
+
}).then(({ body: moreBody }) => parseBookRows(moreBody));
|
|
109
|
+
});
|
|
110
|
+
const moreBatches = await Promise.all(moreFetches);
|
|
111
|
+
for (const batch of moreBatches) {
|
|
112
|
+
booklist.push(...batch);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { startPage: opt.startPage, totalBookCount, booklist };
|
|
116
|
+
}
|
|
117
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
118
|
+
function getLibraryNames() {
|
|
119
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
120
|
+
}
|
|
121
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
122
|
+
//# sourceMappingURL=gbelib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gbelib.js","sourceRoot":"","sources":["../../src/localLibraryModule/gbelib.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uAC70\uC81C\uC2DC\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.geoje.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=geoje.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geoje.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/geoje.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,yCAAW,CAAC;AACnC,eAAO,MAAM,OAAO,4BAA4B,CAAC;AAmFjD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
exports.moduleName = "거제시도서관";
|
|
9
|
+
exports.homeUrl = "https://lib.geoje.go.kr";
|
|
10
|
+
const WKCMS_BASE = "https://lib.geoje.go.kr:9080/wkcms";
|
|
11
|
+
const libraryList = [
|
|
12
|
+
{ code: "MA", name: "거제시립장평도서관" },
|
|
13
|
+
{ code: "MC", name: "거제시립장승포도서관" },
|
|
14
|
+
{ code: "MD", name: "거제시립수양도서관" },
|
|
15
|
+
{ code: "ME", name: "거제시립하청도서관" },
|
|
16
|
+
{ code: "MF", name: "거제시립아주도서관" },
|
|
17
|
+
];
|
|
18
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
19
|
+
async function searchImpl(opt) {
|
|
20
|
+
const { title, libraryName, signal } = opt;
|
|
21
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
22
|
+
const lcode = getLibraryCode(libraryName);
|
|
23
|
+
// JSESSIONID cookie required — init session before searching
|
|
24
|
+
const session = (0, http_1.createSession)();
|
|
25
|
+
await session.get(`${WKCMS_BASE}/KBookSearch/BookSearchPage/MA`, { signal });
|
|
26
|
+
const params = new URLSearchParams({
|
|
27
|
+
search_txt: title,
|
|
28
|
+
book_type: "BOOK",
|
|
29
|
+
pageno: String(opt.startPage ?? 1),
|
|
30
|
+
display: "20",
|
|
31
|
+
detail_search_type: "Nomal",
|
|
32
|
+
manage_code: lcode,
|
|
33
|
+
option: "nomal",
|
|
34
|
+
libcode: "ALL",
|
|
35
|
+
input_search_text: title,
|
|
36
|
+
real_search_text: title,
|
|
37
|
+
now_search_txt: title,
|
|
38
|
+
hidden_book_type: "BOOK",
|
|
39
|
+
orderby: "ASC",
|
|
40
|
+
orderby_item: "TITLE_INFO_SORT",
|
|
41
|
+
});
|
|
42
|
+
const { statusCode, body } = await session.get(`${WKCMS_BASE}/KBookSearch/BookNomalSearch/MA?${params}`, { signal });
|
|
43
|
+
if (statusCode !== 200) {
|
|
44
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
45
|
+
}
|
|
46
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
47
|
+
const document = dom.window.document;
|
|
48
|
+
const h3Text = document.querySelector("div#content h3")?.textContent ?? "";
|
|
49
|
+
const totalMatch = h3Text.match(/총\s*([\d,]+)\s*건/);
|
|
50
|
+
const totalBookCount = totalMatch ? (0, util_1.extractNumber)(totalMatch[1]) : 0;
|
|
51
|
+
const booklist = [];
|
|
52
|
+
document.querySelectorAll("ul.book_info > li").forEach((li) => {
|
|
53
|
+
const bookTitle = li.querySelector("h4")?.textContent?.trim() ?? "";
|
|
54
|
+
const exist = li.querySelector("td.loan_o") !== null;
|
|
55
|
+
const libName = li.querySelector('input[id^="LIB_NAME"]')?.getAttribute("value") ?? "";
|
|
56
|
+
const recKey = li.querySelector('input[id^="REC_KEY"]')?.getAttribute("value") ?? "";
|
|
57
|
+
const bookUrl = recKey
|
|
58
|
+
? `${WKCMS_BASE}/BookSearch/bookPrintPopup?rec_key=${recKey}&manage_code=${lcode}&book_type=BOOK`
|
|
59
|
+
: "";
|
|
60
|
+
if (bookTitle) {
|
|
61
|
+
booklist.push({ libraryName: libName, title: bookTitle, bookUrl, exist });
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
startPage: opt.startPage,
|
|
66
|
+
totalBookCount,
|
|
67
|
+
booklist,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
71
|
+
function getLibraryNames() {
|
|
72
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
73
|
+
}
|
|
74
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
75
|
+
//# sourceMappingURL=geoje.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geoje.js","sourceRoot":"","sources":["../../src/localLibraryModule/geoje.ts"],"names":[],"mappings":";;;AAuGA,0CAEC;AAzGD,kCAMiB;AACjB,kCAAwC;AACxC,iCAA8B;AASjB,QAAA,UAAU,GAAG,QAAQ,CAAC;AACtB,QAAA,OAAO,GAAG,yBAAyB,CAAC;AAEjD,MAAM,UAAU,GAAG,oCAAoC,CAAC;AAExD,MAAM,WAAW,GAAkB;IACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;IACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE;IAClC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;IACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;IACjC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;CAClC,CAAC;AAEF,MAAM,cAAc,GAAG,IAAA,8BAAuB,EAAC,WAAW,CAAC,CAAC;AAE5D,KAAK,UAAU,UAAU,CAAC,GAAkB;IAC1C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAE3C,IAAA,4BAAqB,EAAC,GAAG,CAAC,CAAC;IAE3B,MAAM,KAAK,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE1C,6DAA6D;IAC7D,MAAM,OAAO,GAAG,IAAA,oBAAa,GAAE,CAAC;IAChC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,gCAAgC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7E,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;QAClC,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,OAAO;QAC3B,WAAW,EAAE,KAAK;QAClB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,iBAAiB,EAAE,KAAK;QACxB,gBAAgB,EAAE,KAAK;QACvB,cAAc,EAAE,KAAK;QACrB,gBAAgB,EAAE,MAAM;QACxB,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,iBAAiB;KAChC,CAAC,CAAC;IAEH,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5C,GAAG,UAAU,mCAAmC,MAAM,EAAE,EACxD,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;IAErC,MAAM,MAAM,GACV,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,oBAAa,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,MAAM,QAAQ,GAAW,EAAE,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC5D,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;QACrD,MAAM,OAAO,GACX,EAAE,CAAC,aAAa,CAAC,uBAAuB,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACzE,MAAM,MAAM,GACV,EAAE,CAAC,aAAa,CAAC,sBAAsB,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxE,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,GAAG,UAAU,sCAAsC,MAAM,gBAAgB,KAAK,iBAAiB;YACjG,CAAC,CAAC,EAAE,CAAC;QAEP,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,cAAc;QACd,QAAQ;KACT,CAAC;AACJ,CAAC;AAEY,QAAA,MAAM,GAAG,IAAA,uBAAgB,EAAC,UAAU,CAAC,CAAC;AAEnD,SAAgB,eAAe;IAC7B,OAAO,IAAA,sBAAW,EAAC,WAAW,CAAC,CAAC;AAClC,CAAC;AAED,CAAC,EAAE,UAAU,EAAV,kBAAU,EAAE,OAAO,EAAP,eAAO,EAAE,MAAM,EAAN,cAAM,EAAE,eAAe,EAAE,CAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uAE40\uD574\uD1B5\uD569\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.gimhae.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=gimhae.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gimhae.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/gimhae.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,+CAAY,CAAC;AACpC,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAuFlD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
exports.moduleName = "김해통합도서관";
|
|
9
|
+
exports.homeUrl = "https://lib.gimhae.go.kr";
|
|
10
|
+
const SEARCH_URL = "http://libbook.gimhae.go.kr:8000/bookv2/smartlib/list.php";
|
|
11
|
+
const BOOK_BASE_URL = "http://libbook.gimhae.go.kr:8000/bookv2/smartlib/view.php";
|
|
12
|
+
const libraryList = [
|
|
13
|
+
{ code: "CA", name: "칠암도서관" },
|
|
14
|
+
{ code: "JY", name: "장유도서관" },
|
|
15
|
+
{ code: "HJ", name: "화정글샘도서관" },
|
|
16
|
+
{ code: "JH", name: "진영한빛도서관" },
|
|
17
|
+
{ code: "KG", name: "김해기적의도서관" },
|
|
18
|
+
{ code: "YH", name: "김해율하도서관" },
|
|
19
|
+
{ code: "MY", name: "김해어린이영어도서관" },
|
|
20
|
+
];
|
|
21
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
22
|
+
async function searchImpl(opt) {
|
|
23
|
+
const { title, libraryName, signal } = opt;
|
|
24
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
25
|
+
const lcode = getLibraryCode(libraryName);
|
|
26
|
+
const { statusCode, body } = await (0, http_1.get)(SEARCH_URL, {
|
|
27
|
+
qs: {
|
|
28
|
+
skin: "normal",
|
|
29
|
+
stype: "title",
|
|
30
|
+
sstring: title,
|
|
31
|
+
_es: "1",
|
|
32
|
+
"mgns[]": lcode,
|
|
33
|
+
cpage: "1",
|
|
34
|
+
},
|
|
35
|
+
signal,
|
|
36
|
+
});
|
|
37
|
+
if (statusCode !== 200) {
|
|
38
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
39
|
+
}
|
|
40
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
41
|
+
const document = dom.window.document;
|
|
42
|
+
const tbody = document.querySelector("tbody");
|
|
43
|
+
if (!tbody) {
|
|
44
|
+
return { startPage: opt.startPage, totalBookCount: 0, booklist: [] };
|
|
45
|
+
}
|
|
46
|
+
const rows = Array.from(tbody.querySelectorAll("tr"));
|
|
47
|
+
if (rows.length === 0) {
|
|
48
|
+
return { startPage: opt.startPage, totalBookCount: 0, booklist: [] };
|
|
49
|
+
}
|
|
50
|
+
const firstRowTds = rows[0].querySelectorAll("td");
|
|
51
|
+
const totalBookCount = (0, util_1.extractNumber)(firstRowTds[0]?.textContent?.trim());
|
|
52
|
+
const booklist = [];
|
|
53
|
+
for (const row of rows) {
|
|
54
|
+
const tds = row.querySelectorAll("td");
|
|
55
|
+
if (tds.length < 8)
|
|
56
|
+
continue;
|
|
57
|
+
const titleLink = tds[1].querySelector("a.h1");
|
|
58
|
+
const bookTitle = titleLink?.textContent?.trim() ?? "";
|
|
59
|
+
if (!bookTitle)
|
|
60
|
+
continue;
|
|
61
|
+
const href = titleLink?.getAttribute("href") ?? "";
|
|
62
|
+
const recKeyMatch = href.match(/rec_key=(\d+)/);
|
|
63
|
+
const bookUrl = recKeyMatch
|
|
64
|
+
? `${BOOK_BASE_URL}?rec_key=${recKeyMatch[1]}&data_type=BO`
|
|
65
|
+
: "";
|
|
66
|
+
const statusText = tds[7]?.textContent?.trim() ?? "";
|
|
67
|
+
const exist = statusText.includes("대출가능");
|
|
68
|
+
booklist.push({ libraryName, title: bookTitle, bookUrl, exist });
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
startPage: opt.startPage,
|
|
72
|
+
totalBookCount,
|
|
73
|
+
booklist,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
77
|
+
function getLibraryNames() {
|
|
78
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
79
|
+
}
|
|
80
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
81
|
+
//# sourceMappingURL=gimhae.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gimhae.js","sourceRoot":"","sources":["../../src/localLibraryModule/gimhae.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uAD70\uC0B0\uC2DC\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.gunsan.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=gunsan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gunsan.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/gunsan.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,yCAAW,CAAC;AACnC,eAAO,MAAM,OAAO,6BAA6B,CAAC;AA8FlD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
exports.moduleName = "군산시도서관";
|
|
9
|
+
exports.homeUrl = "https://lib.gunsan.go.kr";
|
|
10
|
+
const SEARCH_URL = `${exports.homeUrl}/search/include/aggsBookList.do`;
|
|
11
|
+
const DETAIL_URL = `${exports.homeUrl}/web/menu/10003/program/30001/searchResultDetail.do`;
|
|
12
|
+
const libraryList = [
|
|
13
|
+
{ code: "MA", name: "군산시립도서관" },
|
|
14
|
+
{ code: "SB", name: "늘푸른도서관" },
|
|
15
|
+
{ code: "SS", name: "설림도서관" },
|
|
16
|
+
{ code: "OG", name: "산들도서관" },
|
|
17
|
+
{ code: "KG", name: "금강도서관" },
|
|
18
|
+
{ code: "BR", name: "임피채만식도서관" },
|
|
19
|
+
{ code: "SG", name: "구암작은도서관" },
|
|
20
|
+
{ code: "NP", name: "나포작은도서관" },
|
|
21
|
+
{ code: "SY", name: "미룡작은도서관" },
|
|
22
|
+
{ code: "SM", name: "미성작은도서관" },
|
|
23
|
+
{ code: "SW", name: "월명작은도서관" },
|
|
24
|
+
{ code: "SN", name: "흥남작은도서관" },
|
|
25
|
+
{ code: "SR", name: "나운작은도서관" },
|
|
26
|
+
{ code: "SC", name: "산단작은도서관" },
|
|
27
|
+
{ code: "TA", name: "서수작은도서관" },
|
|
28
|
+
{ code: "SA", name: "성산작은도서관" },
|
|
29
|
+
{ code: "SD", name: "중동작은도서관" },
|
|
30
|
+
{ code: "SE", name: "개정작은도서관" },
|
|
31
|
+
{ code: "HN", name: "회현작은도서관" },
|
|
32
|
+
{ code: "TC", name: "노인종합복지관" },
|
|
33
|
+
{ code: "TB", name: "평화작은도서관" },
|
|
34
|
+
{ code: "TD", name: "수미작은도서관" },
|
|
35
|
+
{ code: "GN", name: "그린작은도서관" },
|
|
36
|
+
];
|
|
37
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
38
|
+
async function searchImpl(opt) {
|
|
39
|
+
const { title, libraryName, signal } = opt;
|
|
40
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
41
|
+
const lcode = getLibraryCode(libraryName);
|
|
42
|
+
const libName = libraryList.find((l) => l.code === lcode)?.name ?? "";
|
|
43
|
+
const { statusCode, body } = await (0, http_1.get)(SEARCH_URL, {
|
|
44
|
+
qs: {
|
|
45
|
+
searchManageCodeArr: lcode,
|
|
46
|
+
searchKeyword: title,
|
|
47
|
+
searchRecordCount: 50,
|
|
48
|
+
searchPageNo: 1,
|
|
49
|
+
},
|
|
50
|
+
signal,
|
|
51
|
+
});
|
|
52
|
+
if (statusCode !== 200) {
|
|
53
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
54
|
+
}
|
|
55
|
+
const countMatch = body.match(/\$\('#totalCnt'\)\.text\("([\d,]+)"\)/);
|
|
56
|
+
const count = (0, util_1.extractNumber)(countMatch?.[1]);
|
|
57
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
58
|
+
const document = dom.window.document;
|
|
59
|
+
const booklist = [];
|
|
60
|
+
const bookItems = document.querySelectorAll("ul.listWrap > li");
|
|
61
|
+
bookItems.forEach((li) => {
|
|
62
|
+
const nameLink = li.querySelector("a.book_name");
|
|
63
|
+
const titleSpan = nameLink?.querySelector("span.kor");
|
|
64
|
+
const bookTitle = titleSpan?.textContent?.trim() ?? "";
|
|
65
|
+
let bookUrl = "";
|
|
66
|
+
const onclick = nameLink?.getAttribute("onclick") ?? "";
|
|
67
|
+
const urlMatch = onclick.match(/fnDetail\('(\d+)',\s*'(\d+)',\s*'([^']+)',\s*'([^']+)'\)/);
|
|
68
|
+
if (urlMatch) {
|
|
69
|
+
const [, bookKey, speciesKey, isbn, pubFormCode] = urlMatch;
|
|
70
|
+
bookUrl = `${DETAIL_URL}?bookKey=${bookKey}&speciesKey=${speciesKey}&isbn=${isbn}&pubFormCode=${pubFormCode}`;
|
|
71
|
+
}
|
|
72
|
+
const statusEl = li.querySelector("div.status p");
|
|
73
|
+
const exist = statusEl?.textContent?.includes("대출가능") ?? false;
|
|
74
|
+
if (bookTitle) {
|
|
75
|
+
booklist.push({ libraryName: libName, title: bookTitle, bookUrl, exist });
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
startPage: opt.startPage,
|
|
80
|
+
totalBookCount: count,
|
|
81
|
+
booklist,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
85
|
+
function getLibraryNames() {
|
|
86
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
87
|
+
}
|
|
88
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
89
|
+
//# sourceMappingURL=gunsan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gunsan.js","sourceRoot":"","sources":["../../src/localLibraryModule/gunsan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uAD00\uC545\uAD6C\uD1B5\uD569\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.gwanak.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=gwanak.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gwanak.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/gwanak.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,qDAAa,CAAC;AACrC,eAAO,MAAM,OAAO,6BAA6B,CAAC;AAmHlD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
exports.moduleName = "관악구통합도서관";
|
|
9
|
+
exports.homeUrl = "https://lib.gwanak.go.kr";
|
|
10
|
+
const SEARCH_URL = "https://lib.gwanak.go.kr/galib/menu/10003/program/30001/searchResultList.do";
|
|
11
|
+
const DETAIL_URL = "https://lib.gwanak.go.kr/galib/menu/10003/program/30001/searchResultDetail.do";
|
|
12
|
+
const libraryList = [
|
|
13
|
+
{ code: "MA", name: "관악중앙도서관" },
|
|
14
|
+
{ code: "KJ", name: "글빛정보도서관" },
|
|
15
|
+
{ code: "KE", name: "은천동작은도서관" },
|
|
16
|
+
{ code: "KW", name: "조원도서관" },
|
|
17
|
+
{ code: "G4", name: "고맙습니다하난곡작은도서관" },
|
|
18
|
+
{ code: "G3", name: "낙성대공원도서관" },
|
|
19
|
+
{ code: "KP", name: "성현동작은도서관" },
|
|
20
|
+
{ code: "L5", name: "용꿈꾸는작은도서관" },
|
|
21
|
+
{ code: "L3", name: "그림숲그림책작은도서관" },
|
|
22
|
+
{ code: "L2", name: "별별창작꿈터 봉현작은도서관" },
|
|
23
|
+
{ code: "L4", name: "삼성작은도서관" },
|
|
24
|
+
{ code: "M1", name: "굴렁쇠작은도서관" },
|
|
25
|
+
{ code: "S7", name: "글사랑작은도서관" },
|
|
26
|
+
{ code: "M5", name: "녹두작은도서관" },
|
|
27
|
+
{ code: "S4", name: "다사랑작은도서관" },
|
|
28
|
+
{ code: "S5", name: "뜰안에작은도서관" },
|
|
29
|
+
{ code: "M9", name: "마루작은도서관" },
|
|
30
|
+
{ code: "S2", name: "보물섬작은도서관" },
|
|
31
|
+
{ code: "N2", name: "새싹작은도서관" },
|
|
32
|
+
{ code: "M6", name: "샛별작은도서관" },
|
|
33
|
+
{ code: "S8", name: "숯고을작은도서관" },
|
|
34
|
+
{ code: "M3", name: "어울작은도서관" },
|
|
35
|
+
{ code: "M8", name: "우듬지작은도서관" },
|
|
36
|
+
{ code: "S6", name: "우리작은도서관" },
|
|
37
|
+
{ code: "M4", name: "울타리작은도서관" },
|
|
38
|
+
{ code: "S1", name: "책사랑작은도서관" },
|
|
39
|
+
{ code: "M7", name: "책의향기작은도서관" },
|
|
40
|
+
{ code: "S9", name: "파랑새작은도서관" },
|
|
41
|
+
{ code: "N1", name: "푸른숲작은도서관" },
|
|
42
|
+
{ code: "L1", name: "한울작은도서관" },
|
|
43
|
+
{ code: "M2", name: "해오름작은도서관" },
|
|
44
|
+
];
|
|
45
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
46
|
+
async function searchImpl(opt) {
|
|
47
|
+
const { title, libraryName, signal } = opt;
|
|
48
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
49
|
+
const lcode = getLibraryCode(libraryName);
|
|
50
|
+
const { statusCode, body } = await (0, http_1.get)(SEARCH_URL, {
|
|
51
|
+
qs: {
|
|
52
|
+
searchType: "SIMPLE",
|
|
53
|
+
searchCategory: "BOOK",
|
|
54
|
+
searchKey: "TITLE",
|
|
55
|
+
searchKeyword: title,
|
|
56
|
+
searchLibraryArr: lcode,
|
|
57
|
+
searchRecordCount: 300,
|
|
58
|
+
},
|
|
59
|
+
signal,
|
|
60
|
+
});
|
|
61
|
+
if (statusCode !== 200) {
|
|
62
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
63
|
+
}
|
|
64
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
65
|
+
const document = dom.window.document;
|
|
66
|
+
const strongEl = document.querySelector("strong.themeFC");
|
|
67
|
+
const count = (0, util_1.extractNumber)(strongEl?.textContent?.match(/총\s*([\d,]+)\s*건/)?.[0]);
|
|
68
|
+
const booklist = [];
|
|
69
|
+
const bookItems = document.querySelectorAll("ul.resultList > li");
|
|
70
|
+
bookItems.forEach((li) => {
|
|
71
|
+
const titleLink = li.querySelector("dl.bookDataWrap dt.tit a");
|
|
72
|
+
const bookTitle = (titleLink?.textContent?.trim() ?? "").replace(/^\d+\.\s*/, "");
|
|
73
|
+
let bookUrl = "";
|
|
74
|
+
const onclick = titleLink?.getAttribute("onclick") ?? "";
|
|
75
|
+
const urlMatch = onclick.match(/fnSearchResultDetail\((\d+),(\d+),'(\w+)'\)/);
|
|
76
|
+
if (urlMatch) {
|
|
77
|
+
const [, recKey, bookKey, publishFormCode] = urlMatch;
|
|
78
|
+
bookUrl = `${DETAIL_URL}?recKey=${recKey}&bookKey=${bookKey}&publishFormCode=${publishFormCode}`;
|
|
79
|
+
}
|
|
80
|
+
const stateEl = li.querySelector("div.bookStateBar p.txt b");
|
|
81
|
+
const exist = stateEl?.textContent?.includes("대출가능") ?? false;
|
|
82
|
+
let libName = "";
|
|
83
|
+
const siteSpan = li.querySelector("dd.site span");
|
|
84
|
+
const siteText = siteSpan?.textContent?.trim() ?? "";
|
|
85
|
+
if (siteText.startsWith("도서관:")) {
|
|
86
|
+
libName = siteText.replace("도서관:", "").trim();
|
|
87
|
+
}
|
|
88
|
+
if (bookTitle) {
|
|
89
|
+
booklist.push({ libraryName: libName, title: bookTitle, bookUrl, exist });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
startPage: opt.startPage,
|
|
94
|
+
totalBookCount: count,
|
|
95
|
+
booklist,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
99
|
+
function getLibraryNames() {
|
|
100
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
101
|
+
}
|
|
102
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
103
|
+
//# sourceMappingURL=gwanak.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gwanak.js","sourceRoot":"","sources":["../../src/localLibraryModule/gwanak.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uAC15\uC6D0\uD2B9\uBCC4\uC790\uCE58\uB3C4\uAD50\uC721\uCCAD\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.gwe.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=gwe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gwe.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/gwe.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,mFAAkB,CAAC;AAC1C,eAAO,MAAM,OAAO,0BAA0B,CAAC;AAwF/C,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|