dongnelibrary 0.3.8 → 0.3.9
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/API.md +8 -8
- package/README.md +1 -1
- package/dist/dongnelibrary.d.ts +2 -9
- package/dist/dongnelibrary.d.ts.map +1 -1
- package/dist/dongnelibrary.js +16 -8
- package/dist/dongnelibrary.js.map +1 -1
- package/dist/localLibraryModule/gg.d.ts +6 -0
- package/dist/localLibraryModule/gg.d.ts.map +1 -0
- package/dist/localLibraryModule/gg.js +96 -0
- package/dist/localLibraryModule/gg.js.map +1 -0
- package/dist/localLibraryModule/gunpo.d.ts +6 -0
- package/dist/localLibraryModule/gunpo.d.ts.map +1 -0
- package/dist/localLibraryModule/gunpo.js +81 -0
- package/dist/localLibraryModule/gunpo.js.map +1 -0
- package/dist/localLibraryModule/hscity.d.ts +6 -0
- package/dist/localLibraryModule/hscity.d.ts.map +1 -0
- package/dist/localLibraryModule/hscity.js +100 -0
- package/dist/localLibraryModule/hscity.js.map +1 -0
- package/dist/localLibraryModule/osan.d.ts +6 -0
- package/dist/localLibraryModule/osan.d.ts.map +1 -0
- package/dist/localLibraryModule/osan.js +102 -0
- package/dist/localLibraryModule/osan.js.map +1 -0
- package/dist/localLibraryModule/snlib.d.ts +6 -0
- package/dist/localLibraryModule/snlib.d.ts.map +1 -0
- package/dist/localLibraryModule/snlib.js +102 -0
- package/dist/localLibraryModule/snlib.js.map +1 -0
- package/dist/localLibraryModule/suwon.d.ts +6 -0
- package/dist/localLibraryModule/suwon.d.ts.map +1 -0
- package/dist/localLibraryModule/suwon.js +117 -0
- package/dist/localLibraryModule/suwon.js.map +1 -0
- package/dist/localLibraryModule/yjlib.d.ts +6 -0
- package/dist/localLibraryModule/yjlib.d.ts.map +1 -0
- package/dist/localLibraryModule/yjlib.js +109 -0
- package/dist/localLibraryModule/yjlib.js.map +1 -0
- package/dist/localLibraryModule/yongin.d.ts +6 -0
- package/dist/localLibraryModule/yongin.d.ts.map +1 -0
- package/dist/localLibraryModule/yongin.js +141 -0
- package/dist/localLibraryModule/yongin.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/API.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DongneLibrary API Reference
|
|
2
2
|
|
|
3
|
-
A JavaScript/TypeScript library for checking book availability across
|
|
3
|
+
A JavaScript/TypeScript library for checking book availability across 160+ Korean public library branches in Gyeonggi Province (경기도).
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -186,20 +186,20 @@ try {
|
|
|
186
186
|
|
|
187
187
|
---
|
|
188
188
|
|
|
189
|
-
###
|
|
189
|
+
### getAllLibraryNames()
|
|
190
190
|
|
|
191
191
|
Returns an array of all supported library branch names.
|
|
192
192
|
|
|
193
193
|
#### Returns
|
|
194
194
|
|
|
195
|
-
`string[]` - Array of library names (
|
|
195
|
+
`string[]` - Array of library names (160+ branches)
|
|
196
196
|
|
|
197
197
|
#### Example
|
|
198
198
|
|
|
199
199
|
```javascript
|
|
200
|
-
const libraries = dongnelibrary.
|
|
200
|
+
const libraries = dongnelibrary.getAllLibraryNames();
|
|
201
201
|
console.log(libraries);
|
|
202
|
-
// ['
|
|
202
|
+
// ['경기중앙교육도서관', '경기평택교육도서관', '경기광주교육도서관', ...]
|
|
203
203
|
```
|
|
204
204
|
|
|
205
205
|
---
|
|
@@ -218,8 +218,8 @@ Returns a mapping of library system module names to their home URLs.
|
|
|
218
218
|
const urls = dongnelibrary.getModuleHomeUrls();
|
|
219
219
|
console.log(urls);
|
|
220
220
|
// {
|
|
221
|
-
//
|
|
222
|
-
//
|
|
221
|
+
// '경기교육통합도서관': 'https://lib.goe.go.kr',
|
|
222
|
+
// '군포시도서관': 'https://www.gunpolib.go.kr',
|
|
223
223
|
// ...
|
|
224
224
|
// }
|
|
225
225
|
```
|
|
@@ -294,7 +294,7 @@ type SearchCompleteCallback = (
|
|
|
294
294
|
| `yjlib` | 여주시립도서관 | Yeoju City |
|
|
295
295
|
| `yongin` | 용인시도서관 | Yongin City |
|
|
296
296
|
|
|
297
|
-
Use `
|
|
297
|
+
Use `getAllLibraryNames()` to see all 160+ individual branch names.
|
|
298
298
|
|
|
299
299
|
---
|
|
300
300
|
|
package/README.md
CHANGED
|
@@ -143,7 +143,7 @@ console.log(results.length + " 개의 도서관을 검색했습니다.");
|
|
|
143
143
|
- [오산시도서관][osan-url] (오산중앙도서관,꿈두레도서관,초평도서관,햇살마루도서관,청학도서관,양산도서관,소리울도서관,무지개도서관,고현초꿈키움도서관,쌍용예가시민개방도서관)
|
|
144
144
|
- [화성시립도서관][hscity-url] (남양도서관,태안도서관,삼괴도서관,병점도서관,샘내도서관,두빛나래어린이도서관,봉담도서관,둥지나래어린이도서관,목동이음터도서관,기아행복마루도서관,화성동탄중앙도서관,송산도서관,정남도서관,비봉도서관,진안도서관,중앙이음터도서관,양감도서관,다원이음터도서관,송린이음터도서관,팔탄도서관,마도도서관,봉담커피앤북도서관,왕배푸른숲도서관,노을빛도서관,서연이음터도서관,호연이음터도서관,향남복합문화센터도서관,봉담와우도서관,늘봄이음터도서관,달빛나래어린이도서관)
|
|
145
145
|
- [수원시도서관][suwon-url] (선경도서관,수원중앙도서관,창룡도서관,화서다산도서관,호매실도서관,서수원도서관,한림도서관,버드내도서관,북수원도서관,대추골도서관,일월도서관,광교홍재도서관,태장마루도서관,광교푸른숲도서관,매여울도서관,망포글빛도서관,슬기샘도서관,지혜샘어린이도서관,바른샘어린이도서관,한아름도서관,반달어린이도서관,사랑샘도서관,희망샘도서관)
|
|
146
|
-
- [용인시도서관][yongin-url] (
|
|
146
|
+
- [용인시도서관][yongin-url] (수지도서관,구갈희망누리도서관,구성도서관,기흥도서관,남사도서관,동백도서관,동천도서관,모현도서관,보라도서관,상현도서관,서농도서관,성복도서관,용인중앙도서관,양지해밀도서관,영덕도서관,이동꿈틀도서관,죽전도서관,청덕도서관,포곡도서관,흥덕도서관,기흥동행정복지센터스마트도서관,기흥역스마트도서관,동천동행정복지센터스마트도서관,마북동행정복지센터스마트도서관,보정동행정복지센터스마트도서관,상갈동행정복지센터스마트도서관,상하동행정복지센터스마트도서관,성복역스마트도서관,시청스마트도서관,신봉동행정복지센터스마트도서관,역북동행정복지센터스마트도서관,용인중앙시장역스마트도서관,원삼면스마트도서관,유방어린이공원스마트도서관,죽전역스마트도서관,고림다온작은도서관,남사맑은누리작은도서관,백암면작은도서관,상현1동작은도서관,상현2동작은도서관,이동천리작은도서관)
|
|
147
147
|
- [여주시립도서관][yjlib-url] (여주도서관,세종도서관,점동도서관,여주기적의도서관,흥천도서관,금사도서관,대신도서관,산북작은도서관,북내작은도서관,여주역스마트도서관,이마트스마트도서관)
|
|
148
148
|
|
|
149
149
|
## 마무리
|
package/dist/dongnelibrary.d.ts
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SearchCallback, SearchCompleteCallback, SearchOptionsMain, SearchResult } from "./types";
|
|
2
2
|
export declare const getAllLibraryNames: () => string[];
|
|
3
3
|
export declare const getAllModuleNames: () => string[];
|
|
4
4
|
export declare const getModuleHomeUrls: () => Record<string, string>;
|
|
5
5
|
export declare const isModuleName: (name: string) => boolean;
|
|
6
|
-
export type SearchCallback = (err: SearchError | null, result?: SearchResult) => void;
|
|
7
|
-
export type SearchCompleteCallback = (err: SearchError | null, results?: SearchResult[]) => void;
|
|
8
|
-
export interface SearchOptionsMain {
|
|
9
|
-
title: string;
|
|
10
|
-
libraryName: string | string[];
|
|
11
|
-
signal?: AbortSignal;
|
|
12
|
-
}
|
|
13
6
|
export declare const searchAsync: (opt: SearchOptionsMain, onResult?: SearchCallback) => Promise<SearchResult[]>;
|
|
14
7
|
export declare const search: (opt: SearchOptionsMain | undefined | null, onResult?: SearchCallback, onComplete?: SearchCompleteCallback) => void;
|
|
15
|
-
export type { SearchResult, SearchError, Book } from "./types";
|
|
8
|
+
export type { SearchResult, SearchError, SearchOptionsMain, SearchCallback, SearchCompleteCallback, Book, } from "./types";
|
|
16
9
|
//# sourceMappingURL=dongnelibrary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dongnelibrary.d.ts","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"dongnelibrary.d.ts","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAKV,cAAc,EACd,sBAAsB,EAEtB,iBAAiB,EACjB,YAAY,EACb,MAAM,SAAS,CAAC;AAwCjB,eAAO,MAAM,kBAAkB,QAAO,MAAM,EACL,CAAC;AAExC,eAAO,MAAM,iBAAiB,QAAO,MAAM,EACD,CAAC;AAE3C,eAAO,MAAM,iBAAiB,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CACiB,CAAC;AAE5E,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OACQ,CAAC;AA4FrD,eAAO,MAAM,WAAW,GACtB,KAAK,iBAAiB,EACtB,WAAW,cAAc,KACxB,OAAO,CAAC,YAAY,EAAE,CAkBxB,CAAC;AAEF,eAAO,MAAM,MAAM,GACjB,KAAK,iBAAiB,GAAG,SAAS,GAAG,IAAI,EACzC,WAAW,cAAc,EACzB,aAAa,sBAAsB,KAClC,IAMF,CAAC;AAGF,YAAY,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,IAAI,GACL,MAAM,SAAS,CAAC"}
|
package/dist/dongnelibrary.js
CHANGED
|
@@ -34,14 +34,14 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.search = exports.searchAsync = exports.isModuleName = exports.getModuleHomeUrls = exports.getAllModuleNames = exports.getAllLibraryNames = void 0;
|
|
37
|
-
const gg = __importStar(require("./
|
|
38
|
-
const gunpo = __importStar(require("./
|
|
39
|
-
const hscity = __importStar(require("./
|
|
40
|
-
const osan = __importStar(require("./
|
|
41
|
-
const snlib = __importStar(require("./
|
|
42
|
-
const suwon = __importStar(require("./
|
|
43
|
-
const yjlib = __importStar(require("./
|
|
44
|
-
const yongin = __importStar(require("./
|
|
37
|
+
const gg = __importStar(require("./localLibraryModule/gg"));
|
|
38
|
+
const gunpo = __importStar(require("./localLibraryModule/gunpo"));
|
|
39
|
+
const hscity = __importStar(require("./localLibraryModule/hscity"));
|
|
40
|
+
const osan = __importStar(require("./localLibraryModule/osan"));
|
|
41
|
+
const snlib = __importStar(require("./localLibraryModule/snlib"));
|
|
42
|
+
const suwon = __importStar(require("./localLibraryModule/suwon"));
|
|
43
|
+
const yjlib = __importStar(require("./localLibraryModule/yjlib"));
|
|
44
|
+
const yongin = __importStar(require("./localLibraryModule/yongin"));
|
|
45
45
|
// =============================================================================
|
|
46
46
|
// Configuration
|
|
47
47
|
// =============================================================================
|
|
@@ -157,4 +157,12 @@ const search = (opt, onResult, onComplete) => {
|
|
|
157
157
|
(0, exports.searchAsync)(opt, onResult).then((results) => onComplete?.(null, results));
|
|
158
158
|
};
|
|
159
159
|
exports.search = search;
|
|
160
|
+
({
|
|
161
|
+
getAllLibraryNames: exports.getAllLibraryNames,
|
|
162
|
+
getAllModuleNames: exports.getAllModuleNames,
|
|
163
|
+
getModuleHomeUrls: exports.getModuleHomeUrls,
|
|
164
|
+
isModuleName: exports.isModuleName,
|
|
165
|
+
searchAsync: exports.searchAsync,
|
|
166
|
+
search: exports.search,
|
|
167
|
+
});
|
|
160
168
|
//# sourceMappingURL=dongnelibrary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dongnelibrary.js","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"dongnelibrary.js","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uACBD\uAE30\uAD50\uC721\uD1B5\uD569\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.goe.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=gg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gg.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/gg.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,2DAAc,CAAC;AACtC,eAAO,MAAM,OAAO,0BAA0B,CAAC;AA0G/C,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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.goe.go.kr";
|
|
10
|
+
const libraryList = [
|
|
11
|
+
{ code: "MA", name: "경기중앙교육도서관" },
|
|
12
|
+
{ code: "MB", name: "경기평택교육도서관" },
|
|
13
|
+
{ code: "MC", name: "경기광주교육도서관" },
|
|
14
|
+
{ code: "MD", name: "경기여주가남교육도서관" },
|
|
15
|
+
{ code: "ME", name: "경기포천교육도서관" },
|
|
16
|
+
{ code: "MF", name: "경기김포교육도서관" },
|
|
17
|
+
{ code: "MG", name: "경기과천교육도서관" },
|
|
18
|
+
{ code: "MH", name: "경기성남교육도서관" },
|
|
19
|
+
{ code: "MJ", name: "경기화성교육도서관" },
|
|
20
|
+
{ code: "MK", name: "경기의정부교육도서관" },
|
|
21
|
+
{ code: "ML", name: "경기평생교육학습관" },
|
|
22
|
+
];
|
|
23
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
24
|
+
/**
|
|
25
|
+
* Search for books in Gyeonggi Provincial Educational Libraries.
|
|
26
|
+
*/
|
|
27
|
+
async function searchImpl(opt) {
|
|
28
|
+
const { title, libraryName, signal } = opt;
|
|
29
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
30
|
+
const lcode = getLibraryCode(libraryName);
|
|
31
|
+
const { statusCode, body } = await (0, http_1.get)(`https://lib.goe.go.kr/gg/intro/search/index.do`, {
|
|
32
|
+
qs: {
|
|
33
|
+
booktype: "BOOKANDNONBOOK",
|
|
34
|
+
libraryCodes: lcode,
|
|
35
|
+
rowCount: 1000,
|
|
36
|
+
search_text: title,
|
|
37
|
+
viewPage: 1,
|
|
38
|
+
},
|
|
39
|
+
signal,
|
|
40
|
+
});
|
|
41
|
+
if (statusCode !== 200) {
|
|
42
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
43
|
+
}
|
|
44
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
45
|
+
const document = dom.window.document;
|
|
46
|
+
const counterEl = document.querySelector("#search_result > div.research-box > div.search-info > b");
|
|
47
|
+
const count = counterEl ? Number(counterEl.innerHTML) : 0;
|
|
48
|
+
const booklist = [];
|
|
49
|
+
const bookItems = document.querySelectorAll(".bif");
|
|
50
|
+
bookItems.forEach((item) => {
|
|
51
|
+
const titleElement = item.querySelector(".book-title");
|
|
52
|
+
const bookTitle = titleElement?.querySelector("span")?.textContent?.trim() ?? "";
|
|
53
|
+
const bookPath = titleElement?.getAttribute("href") ?? "";
|
|
54
|
+
const tmpUrl = bookPath
|
|
55
|
+
? "https://lib.goe.go.kr/gg/intro/search/" + bookPath
|
|
56
|
+
: "";
|
|
57
|
+
const url = new URL(tmpUrl);
|
|
58
|
+
const regNo = url.searchParams.get("regNo");
|
|
59
|
+
const manageCode = url.searchParams.get("manageCode");
|
|
60
|
+
const booktype = url.searchParams.get("booktype");
|
|
61
|
+
const bookUrl = `https://lib.goe.go.kr/gg/intro/search/detail.do?regNo=${regNo}&manageCode=${manageCode}&booktype=${booktype}`;
|
|
62
|
+
const availability = item.querySelector(".state.typeC")?.textContent?.trim() ?? "";
|
|
63
|
+
// Find span containing "도서관" and get its next sibling's text
|
|
64
|
+
let libName = "";
|
|
65
|
+
const spans = item.querySelectorAll("span");
|
|
66
|
+
for (const span of spans) {
|
|
67
|
+
if (span.textContent?.includes("도서관")) {
|
|
68
|
+
const nextSibling = span.nextElementSibling;
|
|
69
|
+
if (nextSibling) {
|
|
70
|
+
libName = nextSibling.textContent?.split("|")[0]?.trim() ?? "";
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (bookTitle) {
|
|
76
|
+
booklist.push({
|
|
77
|
+
libraryName: libName,
|
|
78
|
+
title: bookTitle,
|
|
79
|
+
bookUrl,
|
|
80
|
+
maxoffset: count,
|
|
81
|
+
exist: availability === "대출가능",
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return {
|
|
86
|
+
startPage: opt.startPage,
|
|
87
|
+
totalBookCount: count,
|
|
88
|
+
booklist,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
92
|
+
function getLibraryNames() {
|
|
93
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
94
|
+
}
|
|
95
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
96
|
+
//# sourceMappingURL=gg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gg.js","sourceRoot":"","sources":["../../src/localLibraryModule/gg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uAD70\uD3EC\uC2DC\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://www.gunpolib.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=gunpo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gunpo.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/gunpo.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,yCAAW,CAAC;AACnC,eAAO,MAAM,OAAO,+BAA+B,CAAC;AAmGpD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
7
|
+
exports.getLibraryNames = getLibraryNames;
|
|
8
|
+
const http_1 = require("../http");
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const util_1 = require("../util");
|
|
11
|
+
exports.moduleName = "군포시도서관";
|
|
12
|
+
exports.homeUrl = "https://www.gunpolib.go.kr";
|
|
13
|
+
const libraryList = [
|
|
14
|
+
{ code: "1", name: "산본도서관" },
|
|
15
|
+
{ code: "2", name: "당동도서관" },
|
|
16
|
+
{ code: "3", name: "대야도서관" },
|
|
17
|
+
{ code: "4", name: "어린이도서관" },
|
|
18
|
+
{ code: "5", name: "이동도서관" },
|
|
19
|
+
{ code: "6", name: "군포중앙도서관" },
|
|
20
|
+
{ code: "7", name: "누리천문대" },
|
|
21
|
+
{ code: "8", name: "시청북카페밥상머리" },
|
|
22
|
+
{ code: "9", name: "부곡도서관" },
|
|
23
|
+
{ code: "10", name: "당정문화도서관" },
|
|
24
|
+
{ code: "11", name: "동화나무어린이도서관" },
|
|
25
|
+
{ code: "12", name: "금정작은도서관" },
|
|
26
|
+
{ code: "13", name: "재궁꿈나무도서관" },
|
|
27
|
+
{ code: "14", name: "궁내동작은도서관" },
|
|
28
|
+
{ code: "15", name: "노루목작은도서관" },
|
|
29
|
+
{ code: "16", name: "버드나무에부는바람작은도서관" },
|
|
30
|
+
{ code: "17", name: "꿈쟁이도서관" },
|
|
31
|
+
{ code: "18", name: "우리마을도서관" },
|
|
32
|
+
{ code: "19", name: "북카페사랑아이엔지" },
|
|
33
|
+
{ code: "20", name: "산본역도서관" },
|
|
34
|
+
{ code: "21", name: "하늘정원작은도서관" },
|
|
35
|
+
{ code: "22", name: "꿈이지" },
|
|
36
|
+
{ code: "23", name: "꿈드림작은도서관" },
|
|
37
|
+
{ code: "24", name: "여담작은도서관" },
|
|
38
|
+
];
|
|
39
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
40
|
+
function getBookList(json) {
|
|
41
|
+
return lodash_1.default.map(json.data ? json.data.list : [], function (book) {
|
|
42
|
+
return {
|
|
43
|
+
title: book.titleStatement,
|
|
44
|
+
exist: book.branchVolumes.some((vol) => vol.cState.includes("대출가능")),
|
|
45
|
+
libraryName: book.branchVolumes.map((vol) => vol.name).join(","),
|
|
46
|
+
bookUrl: book.id
|
|
47
|
+
? `https://www.gunpolib.go.kr/#/search/detail/${book.id}`
|
|
48
|
+
: "",
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Search for books in Gunpo City Libraries.
|
|
54
|
+
*/
|
|
55
|
+
async function searchImpl(opt) {
|
|
56
|
+
const { title, libraryName, signal } = opt;
|
|
57
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
58
|
+
const branch = getLibraryCode(libraryName);
|
|
59
|
+
const { statusCode, body } = await (0, http_1.get)("https://www.gunpolib.go.kr/pyxis-api/1/collections/1/search", {
|
|
60
|
+
qs: {
|
|
61
|
+
all: `k|a|${title}`,
|
|
62
|
+
branch,
|
|
63
|
+
max: 1000,
|
|
64
|
+
},
|
|
65
|
+
signal,
|
|
66
|
+
});
|
|
67
|
+
if (statusCode !== 200) {
|
|
68
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
69
|
+
}
|
|
70
|
+
const booklist = getBookList(JSON.parse(body));
|
|
71
|
+
return {
|
|
72
|
+
totalBookCount: booklist.length,
|
|
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=gunpo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gunpo.js","sourceRoot":"","sources":["../../src/localLibraryModule/gunpo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uD654\uC131\uC2DC\uB9BD\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://hscitylib.or.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=hscity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hscity.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/hscity.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,+CAAY,CAAC;AACpC,eAAO,MAAM,OAAO,4BAA4B,CAAC;AAqGjD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,100 @@
|
|
|
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://hscitylib.or.kr";
|
|
10
|
+
const libraryList = [
|
|
11
|
+
{ code: "MA", name: "남양도서관" },
|
|
12
|
+
{ code: "MB", name: "태안도서관" },
|
|
13
|
+
{ code: "MC", name: "삼괴도서관" },
|
|
14
|
+
{ code: "MD", name: "병점도서관" },
|
|
15
|
+
{ code: "ME", name: "샘내도서관" },
|
|
16
|
+
{ code: "MF", name: "두빛나래어린이도서관" },
|
|
17
|
+
{ code: "MG", name: "봉담도서관" },
|
|
18
|
+
{ code: "MH", name: "둥지나래어린이도서관" },
|
|
19
|
+
{ code: "MI", name: "목동이음터도서관" },
|
|
20
|
+
{ code: "MJ", name: "기아행복마루도서관" },
|
|
21
|
+
{ code: "MK", name: "화성동탄중앙도서관" },
|
|
22
|
+
{ code: "ML", name: "송산도서관" },
|
|
23
|
+
{ code: "MM", name: "정남도서관" },
|
|
24
|
+
{ code: "MN", name: "비봉도서관" },
|
|
25
|
+
{ code: "MO", name: "진안도서관" },
|
|
26
|
+
{ code: "MP", name: "중앙이음터도서관" },
|
|
27
|
+
{ code: "MQ", name: "양감도서관" },
|
|
28
|
+
{ code: "MR", name: "다원이음터도서관" },
|
|
29
|
+
{ code: "MS", name: "송린이음터도서관" },
|
|
30
|
+
{ code: "MT", name: "팔탄도서관" },
|
|
31
|
+
{ code: "MU", name: "마도도서관" },
|
|
32
|
+
{ code: "MV", name: "봉담커피앤북도서관" },
|
|
33
|
+
{ code: "MW", name: "왕배푸른숲도서관" },
|
|
34
|
+
{ code: "MX", name: "노을빛도서관" },
|
|
35
|
+
{ code: "MY", name: "서연이음터도서관" },
|
|
36
|
+
{ code: "MZ", name: "호연이음터도서관" },
|
|
37
|
+
{ code: "NA", name: "향남복합문화센터도서관" },
|
|
38
|
+
{ code: "NB", name: "봉담와우도서관" },
|
|
39
|
+
{ code: "TA", name: "늘봄이음터도서관" },
|
|
40
|
+
{ code: "TB", name: "달빛나래어린이도서관" },
|
|
41
|
+
];
|
|
42
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
43
|
+
/**
|
|
44
|
+
* Search for books in Hwaseong City Libraries.
|
|
45
|
+
*/
|
|
46
|
+
async function searchImpl(opt) {
|
|
47
|
+
const { title, libraryName, signal } = opt;
|
|
48
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
49
|
+
const lcode = getLibraryCode(libraryName);
|
|
50
|
+
const url = `https://hscitylib.or.kr/intro/menu/10008/program/30001/searchResultList.do`;
|
|
51
|
+
const { statusCode, body } = await (0, http_1.post)(url, {
|
|
52
|
+
form: {
|
|
53
|
+
searchType: "SIMPLE",
|
|
54
|
+
searchKeyword: title,
|
|
55
|
+
searchManageCodeArr: lcode,
|
|
56
|
+
searchDisplay: 1000,
|
|
57
|
+
},
|
|
58
|
+
signal,
|
|
59
|
+
});
|
|
60
|
+
if (statusCode !== 200) {
|
|
61
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
62
|
+
}
|
|
63
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
64
|
+
const document = dom.window.document;
|
|
65
|
+
const countText = document.querySelector("#totalCnt")?.textContent ?? "";
|
|
66
|
+
const count = (0, util_1.extractNumber)(countText);
|
|
67
|
+
const booklist = [];
|
|
68
|
+
const bookItems = document.querySelectorAll(".bookArea");
|
|
69
|
+
bookItems.forEach((item) => {
|
|
70
|
+
const titleElement = item.querySelector("p.book_name.kor.on > a");
|
|
71
|
+
const bookTitle = titleElement?.getAttribute("title") ?? "";
|
|
72
|
+
const onclick = titleElement?.getAttribute("onclick") ?? "";
|
|
73
|
+
const match = onclick.match(/fnDetail\('(\d+)',\s*'(\d+)',\s*'([^']*)',\s*'(\w+)'\)/);
|
|
74
|
+
let bookUrl = "";
|
|
75
|
+
if (match) {
|
|
76
|
+
const [, bookKey, speciesKey, isbn, pubFormCode] = match;
|
|
77
|
+
bookUrl = `https://hscitylib.or.kr/intro/menu/10008/program/30001/searchResultDetail.do?bookKey=${bookKey}&speciesKey=${speciesKey}&isbn=${isbn}&pubFormCode=${pubFormCode}`;
|
|
78
|
+
}
|
|
79
|
+
const availability = item.querySelector("span.emp8")?.textContent?.trim() ?? "";
|
|
80
|
+
const libName = item.querySelector("b.themeFC")?.textContent?.trim() ?? "";
|
|
81
|
+
booklist.push({
|
|
82
|
+
libraryName: libName.replace(/[\[\]]/g, ""),
|
|
83
|
+
title: bookTitle,
|
|
84
|
+
bookUrl,
|
|
85
|
+
maxoffset: count,
|
|
86
|
+
exist: availability.includes("대출가능"),
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
return {
|
|
90
|
+
startPage: opt.startPage,
|
|
91
|
+
totalBookCount: count,
|
|
92
|
+
booklist,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
96
|
+
function getLibraryNames() {
|
|
97
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
98
|
+
}
|
|
99
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
100
|
+
//# sourceMappingURL=hscity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hscity.js","sourceRoot":"","sources":["../../src/localLibraryModule/hscity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uC624\uC0B0\uC2DC\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://www.osanlibrary.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=osan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osan.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/osan.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,yCAAW,CAAC;AACnC,eAAO,MAAM,OAAO,kCAAkC,CAAC;AA6GvD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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.osanlibrary.go.kr";
|
|
10
|
+
const libraryList = [
|
|
11
|
+
{ code: "MA", name: "오산중앙도서관" },
|
|
12
|
+
{ code: "MG", name: "꿈두레도서관" },
|
|
13
|
+
{ code: "ME", name: "초평도서관" },
|
|
14
|
+
{ code: "MC", name: "햇살마루도서관" },
|
|
15
|
+
{ code: "MB", name: "청학도서관" },
|
|
16
|
+
{ code: "MD", name: "양산도서관" },
|
|
17
|
+
{ code: "MI", name: "소리울도서관" },
|
|
18
|
+
{ code: "MY", name: "무지개도서관" },
|
|
19
|
+
{ code: "MH", name: "고현초꿈키움도서관" },
|
|
20
|
+
{ code: "MJ", name: "쌍용예가시민개방도서관" },
|
|
21
|
+
];
|
|
22
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
23
|
+
/**
|
|
24
|
+
* Search for books in Osan City Libraries.
|
|
25
|
+
*/
|
|
26
|
+
async function searchImpl(opt) {
|
|
27
|
+
const { title, libraryName, signal } = opt;
|
|
28
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
29
|
+
const lcode = getLibraryCode(libraryName);
|
|
30
|
+
const { statusCode, body } = await (0, http_1.get)(`https://www.osanlibrary.go.kr/intro/program/plusSearchResultList.do`, {
|
|
31
|
+
qs: {
|
|
32
|
+
searchType: "SIMPLE",
|
|
33
|
+
searchCategory: "ALL",
|
|
34
|
+
searchLibraryArr: lcode,
|
|
35
|
+
searchKey: "ALL",
|
|
36
|
+
searchKeyword: title,
|
|
37
|
+
searchRecordCount: 1000,
|
|
38
|
+
},
|
|
39
|
+
signal,
|
|
40
|
+
});
|
|
41
|
+
if (statusCode !== 200) {
|
|
42
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
43
|
+
}
|
|
44
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
45
|
+
const document = dom.window.document;
|
|
46
|
+
// Extract total count from "총 <span class="highlight">44</span>건"
|
|
47
|
+
const highlightSpan = document.querySelector("span.highlight");
|
|
48
|
+
const count = (0, util_1.extractNumber)(highlightSpan?.textContent);
|
|
49
|
+
const booklist = [];
|
|
50
|
+
const bookItems = document.querySelectorAll(".bookList .listWrap > li");
|
|
51
|
+
bookItems.forEach((li) => {
|
|
52
|
+
// Get title and book URL from .book_name link
|
|
53
|
+
const titleLink = li.querySelector(".book_name");
|
|
54
|
+
const titleEl = titleLink ? titleLink.querySelector("span") : null;
|
|
55
|
+
const bookTitle = titleEl ? (titleEl.textContent?.trim() ?? "") : "";
|
|
56
|
+
// Extract book URL from onclick handler
|
|
57
|
+
let bookUrl = "";
|
|
58
|
+
const onclick = titleLink ? titleLink.getAttribute("onclick") || "" : "";
|
|
59
|
+
const urlMatch = onclick.match(/fnSearchResultDetail\((\d+),(\d+),'(\w+)'\)/);
|
|
60
|
+
if (urlMatch) {
|
|
61
|
+
const [, recKey, bookKey, publishFormCode] = urlMatch;
|
|
62
|
+
bookUrl = `https://www.osanlibrary.go.kr/intro/menu/10003/program/30004/plusSearchResultDetail.do?recKey=${recKey}&bookKey=${bookKey}&publishFormCode=${publishFormCode}`;
|
|
63
|
+
}
|
|
64
|
+
// Get availability status from .status p
|
|
65
|
+
const statusEl = li.querySelector(".status p");
|
|
66
|
+
const statusText = statusEl ? (statusEl.textContent?.trim() ?? "") : "";
|
|
67
|
+
const exist = statusText.includes("대출가능");
|
|
68
|
+
// Get library name from ".book_info .fb p" containing "소장도서관"
|
|
69
|
+
let libName = "";
|
|
70
|
+
const fbParagraphs = li.querySelectorAll(".book_info .fb p");
|
|
71
|
+
fbParagraphs.forEach((p) => {
|
|
72
|
+
const text = p.textContent;
|
|
73
|
+
if (text?.includes("소장도서관")) {
|
|
74
|
+
// Format: "[공공]오산시중앙도서관" - extract library name after "]"
|
|
75
|
+
const match = text.match(/\](.+)$/);
|
|
76
|
+
if (match) {
|
|
77
|
+
libName = match[1].trim();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
if (bookTitle) {
|
|
82
|
+
booklist.push({
|
|
83
|
+
libraryName: libName,
|
|
84
|
+
title: bookTitle,
|
|
85
|
+
bookUrl,
|
|
86
|
+
maxoffset: count,
|
|
87
|
+
exist: exist,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
startPage: opt.startPage,
|
|
93
|
+
totalBookCount: count,
|
|
94
|
+
booklist,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
98
|
+
function getLibraryNames() {
|
|
99
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
100
|
+
}
|
|
101
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
102
|
+
//# sourceMappingURL=osan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"osan.js","sourceRoot":"","sources":["../../src/localLibraryModule/osan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uC131\uB0A8\uC2DC\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://www.snlib.go.kr";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=snlib.d.ts.map
|