pal-crawl 2.0.5 → 2.2.0
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/.freebuff/project-id +1 -0
- package/README.md +32 -0
- package/dist/config.d.ts +5 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/http-client.d.ts +6 -0
- package/dist/http-client.js +25 -5
- package/dist/http-client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/likms.d.ts +45 -0
- package/dist/likms.js +151 -0
- package/dist/likms.js.map +1 -0
- package/dist/likms.test.d.ts +1 -0
- package/dist/likms.test.js +313 -0
- package/dist/likms.test.js.map +1 -0
- package/dist/pal.d.ts +15 -1
- package/dist/pal.js +70 -8
- package/dist/pal.js.map +1 -1
- package/package.json +10 -10
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d56ee6eb-546a-4a34-a6c7-6c28626bb8b8
|
package/README.md
CHANGED
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
- [getAllPages (NsmLmSts)](#getallpagesquery-options--asyncgeneratorinsmsearchresult)
|
|
41
41
|
- [getAllPendingPages](#getallpendingpagesquery-options--asyncgeneratorinsmsearchresult)
|
|
42
42
|
- [Screenshot (NsmLmSts)](#getnsmlisscreenshotquery--promisebuffer)
|
|
43
|
+
- [LikmsCrawler - 국회 의안정보시스템 제안이유 조회](#likmscrawler---국회-의안정보시스템-제안이유-조회)
|
|
43
44
|
- [Examples](#examples)
|
|
44
45
|
- [License](#license)
|
|
45
46
|
|
|
@@ -73,6 +74,7 @@ interface PalCrawlConfig {
|
|
|
73
74
|
customHeaders?: Record<string, string>; // 사용자 정의 헤더
|
|
74
75
|
screenshot?: ScreenshotOptions; // 헤드리스 크로뮴 스크린샷 옵션
|
|
75
76
|
hydrateTruncatedTitles?: boolean; // 잘린 제목 상세 조회 여부 (기본값: false)
|
|
77
|
+
hydrateProposalReason?: boolean; // 제안이유 빈 값일 때 의안정보시스템 보정 (기본값: true)
|
|
76
78
|
}
|
|
77
79
|
|
|
78
80
|
interface ScreenshotOptions {
|
|
@@ -151,6 +153,8 @@ interface IContentData {
|
|
|
151
153
|
}
|
|
152
154
|
```
|
|
153
155
|
|
|
156
|
+
PAL 상세 페이지에서 `proposalReason`이 비어 있는 의안이 있을 수 있습니다. 이때는 기본값(`hydrateProposalReason: true`)으로 국회 의안정보시스템(likms.assembly.go.kr)의 같은 의안에서 제안이유를 자동으로 보정합니다. 보정에 실패하더라도 기존 결과(`null`)를 그대로 유지하며 오류를 던지지 않습니다.
|
|
157
|
+
|
|
154
158
|
`ISearchResult`는 검색/페이지 조회 결과를 나타내는 인터페이스입니다.
|
|
155
159
|
|
|
156
160
|
```typescript
|
|
@@ -765,6 +769,34 @@ try {
|
|
|
765
769
|
|
|
766
770
|
---
|
|
767
771
|
|
|
772
|
+
## LikmsCrawler - 국회 의안정보시스템 제안이유 조회
|
|
773
|
+
|
|
774
|
+
`LikmsCrawler`는 [국회 의안정보시스템](https://likms.assembly.go.kr)의 의안상세 페이지에서 제안이유 및 주요내용을 조회합니다. 의안상세 페이지는 심사정보 탭을 AJAX(POST)로 채우므로, 숨김 폼 파라미터를 추출해 `billInfo.do`에 POST한 뒤 `#prntSummary`에서 제안이유를 파싱합니다.
|
|
775
|
+
|
|
776
|
+
PAL의 `contentId`(`PRC_...`)가 이 시스템의 `billId`와 동일하므로 그대로 전달할 수 있습니다.
|
|
777
|
+
|
|
778
|
+
```typescript
|
|
779
|
+
import { LikmsCrawler } from 'pal-crawl';
|
|
780
|
+
|
|
781
|
+
const likms = new LikmsCrawler();
|
|
782
|
+
|
|
783
|
+
// 제안이유 조회 (실패 시 null, 절대 예외를 던지지 않음)
|
|
784
|
+
const reason = await likms.getProposalReason(
|
|
785
|
+
'PRC_G2G6E0D9E2Z3A1Y7Z5X1Y0W4E9E6D5',
|
|
786
|
+
);
|
|
787
|
+
console.log(reason);
|
|
788
|
+
|
|
789
|
+
// 파싱만 수행하고 싶은 경우
|
|
790
|
+
const fragmentHtml = await likms.getBillInfoHTML(
|
|
791
|
+
likms.parseDetailFormParams(await likms.getDetailPageHTML(billId)),
|
|
792
|
+
);
|
|
793
|
+
console.log(likms.parseProposalReason(fragmentHtml));
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
`PalCrawl`의 `getContent`/`getDoneContent`는 내부적으로 이 크롤러를 사용해 빈 `proposalReason`을 보정합니다(`hydrateProposalReason: false`로 비활성화 가능).
|
|
797
|
+
|
|
798
|
+
---
|
|
799
|
+
|
|
768
800
|
## Examples
|
|
769
801
|
|
|
770
802
|
### 기본 사용법
|
package/dist/config.d.ts
CHANGED
|
@@ -6,5 +6,9 @@ export declare enum Config {
|
|
|
6
6
|
DONE_CONTENT_URL = "/napal/lgsltpa/lgsltpaDone/view.do",
|
|
7
7
|
UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
|
|
8
8
|
NSM_DOMAIN = "https://opinion.lawmaking.go.kr",
|
|
9
|
-
NSM_LIST_URL = "/gcom/nsmLmSts/out"
|
|
9
|
+
NSM_LIST_URL = "/gcom/nsmLmSts/out",
|
|
10
|
+
LIKMS_DOMAIN = "https://likms.assembly.go.kr",
|
|
11
|
+
LIKMS_DETAIL_PAGE_URL = "/bill/bi/billDetailPage.do",
|
|
12
|
+
LIKMS_BILL_INFO_URL = "/bill/bi/bill/detail/billInfo.do",
|
|
13
|
+
LIKMS_CURR_MENU_NO = "2600044"
|
|
10
14
|
}
|
package/dist/config.js
CHANGED
|
@@ -12,5 +12,10 @@ var Config;
|
|
|
12
12
|
// 국민참여입법센터 국회입법현황 (opinion.lawmaking.go.kr)
|
|
13
13
|
Config["NSM_DOMAIN"] = "https://opinion.lawmaking.go.kr";
|
|
14
14
|
Config["NSM_LIST_URL"] = "/gcom/nsmLmSts/out";
|
|
15
|
+
// 국회 의안정보시스템 (likms.assembly.go.kr)
|
|
16
|
+
Config["LIKMS_DOMAIN"] = "https://likms.assembly.go.kr";
|
|
17
|
+
Config["LIKMS_DETAIL_PAGE_URL"] = "/bill/bi/billDetailPage.do";
|
|
18
|
+
Config["LIKMS_BILL_INFO_URL"] = "/bill/bi/bill/detail/billInfo.do";
|
|
19
|
+
Config["LIKMS_CURR_MENU_NO"] = "2600044";
|
|
15
20
|
})(Config || (exports.Config = Config = {}));
|
|
16
21
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAeX;AAfD,WAAY,MAAM;IAChB,+CAAqC,CAAA;IACrC,4DAAkD,CAAA;IAClD,+DAAqD,CAAA;IACrD,8DAAoD,CAAA;IACpD,iEAAuD,CAAA;IACvD,uIAA6H,CAAA;IAC7H,4CAA4C;IAC5C,wDAA8C,CAAA;IAC9C,6CAAmC,CAAA;IACnC,oCAAoC;IACpC,uDAA6C,CAAA;IAC7C,8DAAoD,CAAA;IACpD,kEAAwD,CAAA;IACxD,wCAA8B,CAAA;AAChC,CAAC,EAfW,MAAM,sBAAN,MAAM,QAejB"}
|
package/dist/http-client.d.ts
CHANGED
|
@@ -16,4 +16,10 @@ export declare class HttpClient {
|
|
|
16
16
|
private decodeBody;
|
|
17
17
|
private makeRequest;
|
|
18
18
|
get(url: URL): Promise<string>;
|
|
19
|
+
/**
|
|
20
|
+
* URL-encoded 본문을 POST로 전송합니다.
|
|
21
|
+
* 국회 의안정보시스템의 일부 조각(_fragment) 엔드포인트는 GET이 아닌 POST만 허용합니다.
|
|
22
|
+
*/
|
|
23
|
+
post(url: URL, body: string): Promise<string>;
|
|
24
|
+
private requestWithRetry;
|
|
19
25
|
}
|
package/dist/http-client.js
CHANGED
|
@@ -100,17 +100,23 @@ class HttpClient {
|
|
|
100
100
|
}
|
|
101
101
|
return body.toString('utf8');
|
|
102
102
|
}
|
|
103
|
-
async makeRequest(url) {
|
|
103
|
+
async makeRequest(url, method = 'GET', body) {
|
|
104
104
|
return new Promise((resolve, reject) => {
|
|
105
105
|
const headers = {
|
|
106
106
|
'User-Agent': this.userAgent,
|
|
107
107
|
...this.customHeaders,
|
|
108
108
|
};
|
|
109
|
+
if (method === 'POST' && body !== undefined) {
|
|
110
|
+
headers['Content-Type'] =
|
|
111
|
+
'application/x-www-form-urlencoded; charset=UTF-8';
|
|
112
|
+
headers['Content-Length'] = String(Buffer.byteLength(body));
|
|
113
|
+
}
|
|
109
114
|
const options = {
|
|
110
115
|
headers,
|
|
111
116
|
timeout: this.timeout,
|
|
117
|
+
method,
|
|
112
118
|
};
|
|
113
|
-
const req = https.
|
|
119
|
+
const req = https.request(url, options, (res) => {
|
|
114
120
|
if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
|
|
115
121
|
reject(new Error(`Invalid response: ${res.statusCode} ${res.statusMessage}`));
|
|
116
122
|
return;
|
|
@@ -120,8 +126,8 @@ class HttpClient {
|
|
|
120
126
|
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
121
127
|
});
|
|
122
128
|
res.on('end', () => {
|
|
123
|
-
const
|
|
124
|
-
resolve(this.decodeBody(
|
|
129
|
+
const responseBody = Buffer.concat(chunks);
|
|
130
|
+
resolve(this.decodeBody(responseBody, res.headers['content-type']));
|
|
125
131
|
});
|
|
126
132
|
});
|
|
127
133
|
req.on('timeout', () => {
|
|
@@ -131,14 +137,28 @@ class HttpClient {
|
|
|
131
137
|
req.on('error', (err) => {
|
|
132
138
|
reject(err);
|
|
133
139
|
});
|
|
140
|
+
if (method === 'POST' && body !== undefined) {
|
|
141
|
+
req.write(body);
|
|
142
|
+
}
|
|
143
|
+
req.end();
|
|
134
144
|
req.setTimeout(this.timeout);
|
|
135
145
|
});
|
|
136
146
|
}
|
|
137
147
|
async get(url) {
|
|
148
|
+
return this.requestWithRetry(url, 'GET');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* URL-encoded 본문을 POST로 전송합니다.
|
|
152
|
+
* 국회 의안정보시스템의 일부 조각(_fragment) 엔드포인트는 GET이 아닌 POST만 허용합니다.
|
|
153
|
+
*/
|
|
154
|
+
async post(url, body) {
|
|
155
|
+
return this.requestWithRetry(url, 'POST', body);
|
|
156
|
+
}
|
|
157
|
+
async requestWithRetry(url, method, body) {
|
|
138
158
|
let lastError;
|
|
139
159
|
for (let attempt = 1; attempt <= this.retryCount; attempt++) {
|
|
140
160
|
try {
|
|
141
|
-
return await this.makeRequest(url);
|
|
161
|
+
return await this.makeRequest(url, method, body);
|
|
142
162
|
}
|
|
143
163
|
catch (error) {
|
|
144
164
|
lastError = error;
|
package/dist/http-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { ScreenshotBase, PalCrawl, NsmLmSts, type ITableData, type IAttachment, type IContentData, type ISearchResult, type ISearchQuery, type IBulkOptions, type PalCrawlConfig, type ScreenshotOptions, type INsmSearchQuery, type INsmSearchResult, type INsmBillItem, type INsmBillDetail, type INsmAttachment, type NsmProgressStatus, type NsmProposerType, type NsmResolutionStatus, } from './pal';
|
|
2
2
|
export { PalParser, NsmLmStsParser } from './parser';
|
|
3
|
+
export { LikmsCrawler, type LikmsCrawlerConfig } from './likms';
|
|
3
4
|
export { Config } from './config';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Config = exports.NsmLmStsParser = exports.PalParser = exports.NsmLmSts = exports.PalCrawl = exports.ScreenshotBase = void 0;
|
|
3
|
+
exports.Config = exports.LikmsCrawler = exports.NsmLmStsParser = exports.PalParser = exports.NsmLmSts = exports.PalCrawl = exports.ScreenshotBase = void 0;
|
|
4
4
|
var pal_1 = require("./pal");
|
|
5
5
|
Object.defineProperty(exports, "ScreenshotBase", { enumerable: true, get: function () { return pal_1.ScreenshotBase; } });
|
|
6
6
|
Object.defineProperty(exports, "PalCrawl", { enumerable: true, get: function () { return pal_1.PalCrawl; } });
|
|
@@ -8,6 +8,8 @@ Object.defineProperty(exports, "NsmLmSts", { enumerable: true, get: function ()
|
|
|
8
8
|
var parser_1 = require("./parser");
|
|
9
9
|
Object.defineProperty(exports, "PalParser", { enumerable: true, get: function () { return parser_1.PalParser; } });
|
|
10
10
|
Object.defineProperty(exports, "NsmLmStsParser", { enumerable: true, get: function () { return parser_1.NsmLmStsParser; } });
|
|
11
|
+
var likms_1 = require("./likms");
|
|
12
|
+
Object.defineProperty(exports, "LikmsCrawler", { enumerable: true, get: function () { return likms_1.LikmsCrawler; } });
|
|
11
13
|
var config_1 = require("./config");
|
|
12
14
|
Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return config_1.Config; } });
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6BAoBe;AAnBb,qGAAA,cAAc,OAAA;AACd,+FAAA,QAAQ,OAAA;AACR,+FAAA,QAAQ,OAAA;AAkBV,mCAAqD;AAA5C,mGAAA,SAAS,OAAA;AAAE,wGAAA,cAAc,OAAA;AAClC,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6BAoBe;AAnBb,qGAAA,cAAc,OAAA;AACd,+FAAA,QAAQ,OAAA;AACR,+FAAA,QAAQ,OAAA;AAkBV,mCAAqD;AAA5C,mGAAA,SAAS,OAAA;AAAE,wGAAA,cAAc,OAAA;AAClC,iCAAgE;AAAvD,qGAAA,YAAY,OAAA;AACrB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
|
package/dist/likms.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface LikmsCrawlerConfig {
|
|
2
|
+
userAgent?: string;
|
|
3
|
+
timeout?: number;
|
|
4
|
+
retryCount?: number;
|
|
5
|
+
customHeaders?: Record<string, string>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 국회 의안정보시스템(likms.assembly.go.kr) 크롤러.
|
|
9
|
+
*
|
|
10
|
+
* 의안상세 페이지(billDetailPage.do)는 심사정보 탭 내용을 빈 div에 AJAX(POST)로
|
|
11
|
+
* 채우므로, 정적 HTML만으로는 제안이유를 읽을 수 없다.
|
|
12
|
+
*
|
|
13
|
+
* 실제 흐름 (billDetail.js 기준):
|
|
14
|
+
* 1. GET /bill/bi/billDetailPage.do?billId=...&currMenuNo=2600044
|
|
15
|
+
* → 숨김 폼(#form)에 billId, billNo, billKindCd 등 파라미터 포함
|
|
16
|
+
* 2. POST /bill/bi/bill/detail/billInfo.do (폼 파라미터 직렬화)
|
|
17
|
+
* → 심사정보 탭 조각 HTML 반환
|
|
18
|
+
* 3. 조각의 <pre id="prntSummary"> 안에 제안이유 및 주요내용이 들어 있음
|
|
19
|
+
*
|
|
20
|
+
* PAL(입법예고) 상세 페이지에서 제안이유가 비어 있는 의안의 contentId(=PRC_...)
|
|
21
|
+
* 는 동일한 ID로 이 시스템에서 조회할 수 있다.
|
|
22
|
+
*/
|
|
23
|
+
export declare class LikmsCrawler {
|
|
24
|
+
private readonly httpClient;
|
|
25
|
+
constructor(config?: LikmsCrawlerConfig);
|
|
26
|
+
private buildDetailPageUrl;
|
|
27
|
+
/** 의안상세 페이지 HTML을 반환합니다. */
|
|
28
|
+
getDetailPageHTML(billId: string): Promise<string>;
|
|
29
|
+
/**
|
|
30
|
+
* 의안상세 페이지의 숨김 폼(#form input[type=hidden]) 파라미터를 추출합니다.
|
|
31
|
+
* billInfo.do AJAX 요청은 이 파라미터들에 심사정보 섹션의 렌더링 조건이 걸려
|
|
32
|
+
* 있어 원본 페이지에서 그대로 가져와야 한다.
|
|
33
|
+
*/
|
|
34
|
+
parseDetailFormParams(html: string): Record<string, string>;
|
|
35
|
+
/** 심사정보 탭 조각 HTML을 POST로 반환합니다. */
|
|
36
|
+
getBillInfoHTML(params: Record<string, string>): Promise<string>;
|
|
37
|
+
/** 심사정보 탭 조각 HTML에서 제안이유 및 주요내용을 파싱하여 반환합니다. */
|
|
38
|
+
parseProposalReason(fragmentHtml: string): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* billId(PAL contentId와 동일)로 제안이유 및 주요내용을 조회합니다.
|
|
41
|
+
* 네트워크·파싱 실패를 절대 던지지 않고 null을 반환해 호출부가 안전하게
|
|
42
|
+
* 동작하도록 한다.
|
|
43
|
+
*/
|
|
44
|
+
getProposalReason(billId: string): Promise<string | null>;
|
|
45
|
+
}
|
package/dist/likms.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LikmsCrawler = void 0;
|
|
37
|
+
const url_1 = require("url");
|
|
38
|
+
const cheerio = __importStar(require("cheerio"));
|
|
39
|
+
const config_1 = require("./config");
|
|
40
|
+
const http_client_1 = require("./http-client");
|
|
41
|
+
/**
|
|
42
|
+
* 국회 의안정보시스템(likms.assembly.go.kr) 크롤러.
|
|
43
|
+
*
|
|
44
|
+
* 의안상세 페이지(billDetailPage.do)는 심사정보 탭 내용을 빈 div에 AJAX(POST)로
|
|
45
|
+
* 채우므로, 정적 HTML만으로는 제안이유를 읽을 수 없다.
|
|
46
|
+
*
|
|
47
|
+
* 실제 흐름 (billDetail.js 기준):
|
|
48
|
+
* 1. GET /bill/bi/billDetailPage.do?billId=...&currMenuNo=2600044
|
|
49
|
+
* → 숨김 폼(#form)에 billId, billNo, billKindCd 등 파라미터 포함
|
|
50
|
+
* 2. POST /bill/bi/bill/detail/billInfo.do (폼 파라미터 직렬화)
|
|
51
|
+
* → 심사정보 탭 조각 HTML 반환
|
|
52
|
+
* 3. 조각의 <pre id="prntSummary"> 안에 제안이유 및 주요내용이 들어 있음
|
|
53
|
+
*
|
|
54
|
+
* PAL(입법예고) 상세 페이지에서 제안이유가 비어 있는 의안의 contentId(=PRC_...)
|
|
55
|
+
* 는 동일한 ID로 이 시스템에서 조회할 수 있다.
|
|
56
|
+
*/
|
|
57
|
+
class LikmsCrawler {
|
|
58
|
+
constructor(config) {
|
|
59
|
+
this.httpClient = new http_client_1.HttpClient({
|
|
60
|
+
userAgent: config?.userAgent ?? config_1.Config.UserAgent,
|
|
61
|
+
timeout: config?.timeout ?? 10000,
|
|
62
|
+
retryCount: config?.retryCount ?? 3,
|
|
63
|
+
customHeaders: config?.customHeaders ?? {},
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
buildDetailPageUrl(billId) {
|
|
67
|
+
const url = new url_1.URL(config_1.Config.LIKMS_DETAIL_PAGE_URL, config_1.Config.LIKMS_DOMAIN);
|
|
68
|
+
url.searchParams.set('billId', billId);
|
|
69
|
+
url.searchParams.set('currMenuNo', config_1.Config.LIKMS_CURR_MENU_NO);
|
|
70
|
+
return url;
|
|
71
|
+
}
|
|
72
|
+
/** 의안상세 페이지 HTML을 반환합니다. */
|
|
73
|
+
async getDetailPageHTML(billId) {
|
|
74
|
+
const normalized = billId.trim();
|
|
75
|
+
if (!normalized) {
|
|
76
|
+
throw new Error('billId is required');
|
|
77
|
+
}
|
|
78
|
+
return this.httpClient.get(this.buildDetailPageUrl(normalized));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 의안상세 페이지의 숨김 폼(#form input[type=hidden]) 파라미터를 추출합니다.
|
|
82
|
+
* billInfo.do AJAX 요청은 이 파라미터들에 심사정보 섹션의 렌더링 조건이 걸려
|
|
83
|
+
* 있어 원본 페이지에서 그대로 가져와야 한다.
|
|
84
|
+
*/
|
|
85
|
+
parseDetailFormParams(html) {
|
|
86
|
+
const $ = cheerio.load(html);
|
|
87
|
+
const params = {};
|
|
88
|
+
$('#form input[type="hidden"]').each((_, el) => {
|
|
89
|
+
const name = $(el).attr('name');
|
|
90
|
+
if (!name) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
params[name] = $(el).attr('value') ?? '';
|
|
94
|
+
});
|
|
95
|
+
return params;
|
|
96
|
+
}
|
|
97
|
+
/** 심사정보 탭 조각 HTML을 POST로 반환합니다. */
|
|
98
|
+
async getBillInfoHTML(params) {
|
|
99
|
+
const url = new url_1.URL(config_1.Config.LIKMS_BILL_INFO_URL, config_1.Config.LIKMS_DOMAIN);
|
|
100
|
+
const body = new URLSearchParams(params).toString();
|
|
101
|
+
return this.httpClient.post(url, body);
|
|
102
|
+
}
|
|
103
|
+
/** 심사정보 탭 조각 HTML에서 제안이유 및 주요내용을 파싱하여 반환합니다. */
|
|
104
|
+
parseProposalReason(fragmentHtml) {
|
|
105
|
+
const $ = cheerio.load(fragmentHtml);
|
|
106
|
+
const pre = $('#prntSummary').first();
|
|
107
|
+
if (!pre.length) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
const clone = pre.clone();
|
|
111
|
+
clone.find('br').replaceWith('\n');
|
|
112
|
+
const lines = clone
|
|
113
|
+
.text()
|
|
114
|
+
.replace(/\u00a0/g, ' ')
|
|
115
|
+
.replace(/\r/g, '')
|
|
116
|
+
.split('\n')
|
|
117
|
+
.map((line) => line.replace(/\s+/g, ' ').trim())
|
|
118
|
+
.filter(Boolean);
|
|
119
|
+
// 첫 줄이 섹션 제목("제안이유 및 주요내용")을 반복하는 경우 제거
|
|
120
|
+
if (lines[0]?.replace(/\s+/g, '') === '제안이유및주요내용') {
|
|
121
|
+
lines.shift();
|
|
122
|
+
}
|
|
123
|
+
const text = lines.join('\n');
|
|
124
|
+
return text || null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* billId(PAL contentId와 동일)로 제안이유 및 주요내용을 조회합니다.
|
|
128
|
+
* 네트워크·파싱 실패를 절대 던지지 않고 null을 반환해 호출부가 안전하게
|
|
129
|
+
* 동작하도록 한다.
|
|
130
|
+
*/
|
|
131
|
+
async getProposalReason(billId) {
|
|
132
|
+
const normalized = billId.trim();
|
|
133
|
+
if (!normalized) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const detailHtml = await this.getDetailPageHTML(normalized);
|
|
138
|
+
const params = this.parseDetailFormParams(detailHtml);
|
|
139
|
+
if (!params.billId) {
|
|
140
|
+
params.billId = normalized;
|
|
141
|
+
}
|
|
142
|
+
const fragmentHtml = await this.getBillInfoHTML(params);
|
|
143
|
+
return this.parseProposalReason(fragmentHtml);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.LikmsCrawler = LikmsCrawler;
|
|
151
|
+
//# sourceMappingURL=likms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"likms.js","sourceRoot":"","sources":["../src/likms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const pal_1 = require("./pal");
|
|
4
|
+
const likms_1 = require("./likms");
|
|
5
|
+
// ─── HTML Fixtures (실제 캡처 구조를 축약) ─────────────────────────────────────
|
|
6
|
+
const LIKMS_DETAIL_PAGE_HTML = `
|
|
7
|
+
<div class="content" id="content">
|
|
8
|
+
<div class="page_title">
|
|
9
|
+
<h3 class="detailh3">[2221798] 유아교육법 일부개정법률안(김문수의원 등 12인)</h3>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="content">
|
|
12
|
+
<form id="form" name="form">
|
|
13
|
+
<input type="hidden" id="billId" name="billId" value="PRC_G2G6E0D9E2Z3A1Y7Z5X1Y0W4E9E6D5">
|
|
14
|
+
<input type="hidden" id="billNo" name="billNo" value="2221798">
|
|
15
|
+
<input type="hidden" id="billKindCd" name="billKindCd" value="BKC_0004">
|
|
16
|
+
<input type="hidden" id="currCmtName" name="currCmtName" value="위원회 심사">
|
|
17
|
+
<input type="hidden" id="reexamYn" name="reexamYn" value="N">
|
|
18
|
+
<input type="hidden" id="mainUpdateBillYn" name="mainUpdateBillYn" value="N">
|
|
19
|
+
<input type="hidden" id="billGbnCd" name="billGbnCd" value="">
|
|
20
|
+
<input type="hidden" id="tmprAnYn" name="tmprAnYn" value="N">
|
|
21
|
+
<input type="hidden" id="headMemo" name="headMemo" value="Y">
|
|
22
|
+
<input type="hidden" id="headMemoInfo" name="headMemoInfo" value="비용추계요구서 제출됨.">
|
|
23
|
+
<input type="hidden" id="withdrawCnt" name="withdrawCnt" value="0">
|
|
24
|
+
<input type="hidden" id="intrsBillCnt" name="intrsBillCnt" value="0">
|
|
25
|
+
<input type="hidden" id="stageMemo" name="stageMemo" value="N"/>
|
|
26
|
+
</form>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
`;
|
|
30
|
+
const LIKMS_BILL_INFO_FRAGMENT_HTML = `
|
|
31
|
+
<div id="tab_billInfo_sect">
|
|
32
|
+
<div class="container bill_info" id="container" style="height: auto;">
|
|
33
|
+
<form id="billInfoForm">
|
|
34
|
+
<div class="bill_info_div div_on" id="stage_list">
|
|
35
|
+
<div class="theme_title_wrap"><h3>심사진행단계</h3></div>
|
|
36
|
+
</div>
|
|
37
|
+
<div id="rcp_list" class="theme_area bill_info_div">
|
|
38
|
+
<div class="theme_list">
|
|
39
|
+
<h3>접수정보</h3>
|
|
40
|
+
<div>
|
|
41
|
+
<h4>의안접수정보</h4>
|
|
42
|
+
<table class="align_center">
|
|
43
|
+
<tbody id="insc-rcp-row">
|
|
44
|
+
<tr>
|
|
45
|
+
<td class="billNo"><i>의안번호</i><span>2221798</span></td>
|
|
46
|
+
<td class="proposeDt"><i>제안일자</i><span>2026-10-06</span></td>
|
|
47
|
+
</tr>
|
|
48
|
+
</tbody>
|
|
49
|
+
</table>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
<div class="theme_list" id="prntsummary-sect">
|
|
53
|
+
<div>
|
|
54
|
+
<h4>제안이유 및 주요내용</h4>
|
|
55
|
+
<pre id="prntSummary" class="theme_list_summary" style="height: 130px;">
|
|
56
|
+
제안이유 및 주요내용
|
|
57
|
+
|
|
58
|
+
현행 「유아교육법」은 원장 등 교원의 유아생활지도에 관한 근거를 두고 있으며, 정당한 유아생활지도에 대해서는 「아동복지법」상 신체적 학대행위로 보지 아니하도록 규정하고 있음.
|
|
59
|
+
그런데 정서적 학대 및 방임의 개념이 포괄적으로 규정되어 있어 유치원에서 이루어지는 정당한 교육활동이나 생활지도까지 아동학대로 신고ㆍ조사되는 등 교육활동이 위축되고 있다는 지적이 있음.
|
|
60
|
+
이에 「아동복지법」 제17조제2항에 따라 원장과 교원이 교육활동 과정에서 하여서는 아니 되는 행위를 구체적으로 규정하여 정당한 교육활동을 보장하고 유아를 보호하려는 것임(안 제21조의3제4항 신설).
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
참고사항
|
|
64
|
+
|
|
65
|
+
이 법률안은 김문수의원이 대표발의한 「아동복지법 일부개정법률안」(의안번호 제21797호)의 의결을 전제로 하는 것이므로 같은 법률안이 의결되지 아니하거나 수정의결되는 경우에는 이에 맞추어 조정되어야 할 것임.</pre>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="member_list_more">
|
|
68
|
+
<a href="javascript:;" id="btnPrntSummaryMore" class="closed">+더보기</a>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</form>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
`;
|
|
76
|
+
const LIKMS_BILL_INFO_FRAGMENT_NO_REASON_HTML = `
|
|
77
|
+
<div id="tab_billInfo_sect">
|
|
78
|
+
<div id="rcp_list" class="theme_area bill_info_div">
|
|
79
|
+
<div class="theme_list">
|
|
80
|
+
<h3>접수정보</h3>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
`;
|
|
85
|
+
const PAL_CONTENT_HTML_EMPTY_REASON = `
|
|
86
|
+
<div class="card-wrap">
|
|
87
|
+
<div class="item">
|
|
88
|
+
<h4>제안이유 및 주요내용</h4>
|
|
89
|
+
<div class="desc">
|
|
90
|
+
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="item">
|
|
94
|
+
<h4>의견제출 방법</h4>
|
|
95
|
+
<div class="desc">
|
|
96
|
+
서울시 영등포구 의사당대로 1(여의도동) 교육위원회
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
`;
|
|
101
|
+
const PAL_CONTENT_HTML_WITH_REASON = `
|
|
102
|
+
<div class="card-wrap">
|
|
103
|
+
<div class="item">
|
|
104
|
+
<h4>제안이유 및 주요내용</h4>
|
|
105
|
+
<div class="desc">
|
|
106
|
+
현행법은 과태료 처분 기준이 없어 문제라는 지적이 있음.
|
|
107
|
+
이에 과태료 부과 기준을 신설하려는 것임.
|
|
108
|
+
</div>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
`;
|
|
112
|
+
const EXPECTED_LIKMS_REASON = [
|
|
113
|
+
'현행 「유아교육법」은 원장 등 교원의 유아생활지도에 관한 근거를 두고 있으며, 정당한 유아생활지도에 대해서는 「아동복지법」상 신체적 학대행위로 보지 아니하도록 규정하고 있음.',
|
|
114
|
+
'그런데 정서적 학대 및 방임의 개념이 포괄적으로 규정되어 있어 유치원에서 이루어지는 정당한 교육활동이나 생활지도까지 아동학대로 신고ㆍ조사되는 등 교육활동이 위축되고 있다는 지적이 있음.',
|
|
115
|
+
'이에 「아동복지법」 제17조제2항에 따라 원장과 교원이 교육활동 과정에서 하여서는 아니 되는 행위를 구체적으로 규정하여 정당한 교육활동을 보장하고 유아를 보호하려는 것임(안 제21조의3제4항 신설).',
|
|
116
|
+
'참고사항',
|
|
117
|
+
'이 법률안은 김문수의원이 대표발의한 「아동복지법 일부개정법률안」(의안번호 제21797호)의 의결을 전제로 하는 것이므로 같은 법률안이 의결되지 아니하거나 수정의결되는 경우에는 이에 맞추어 조정되어야 할 것임.',
|
|
118
|
+
].join('\n');
|
|
119
|
+
const TEST_BILL_ID = 'PRC_G2G6E0D9E2Z3A1Y7Z5X1Y0W4E9E6D5';
|
|
120
|
+
const getLikmsHttpClient = (crawler) => crawler.httpClient;
|
|
121
|
+
// ─── LikmsCrawler ─────────────────────────────────────────────────────────────
|
|
122
|
+
describe('LikmsCrawler', () => {
|
|
123
|
+
describe('parseDetailFormParams', () => {
|
|
124
|
+
const crawler = new likms_1.LikmsCrawler();
|
|
125
|
+
test('extracts hidden form params from detail page', () => {
|
|
126
|
+
const params = crawler.parseDetailFormParams(LIKMS_DETAIL_PAGE_HTML);
|
|
127
|
+
expect(params.billId).toBe(TEST_BILL_ID);
|
|
128
|
+
expect(params.billNo).toBe('2221798');
|
|
129
|
+
expect(params.billKindCd).toBe('BKC_0004');
|
|
130
|
+
expect(params.tmprAnYn).toBe('N');
|
|
131
|
+
expect(params.reexamYn).toBe('N');
|
|
132
|
+
expect(params.withdrawCnt).toBe('0');
|
|
133
|
+
});
|
|
134
|
+
test('keeps empty-valued params (rendering condition)', () => {
|
|
135
|
+
const params = crawler.parseDetailFormParams(LIKMS_DETAIL_PAGE_HTML);
|
|
136
|
+
expect(params.billGbnCd).toBe('');
|
|
137
|
+
});
|
|
138
|
+
test('returns empty object when form is absent', () => {
|
|
139
|
+
expect(crawler.parseDetailFormParams('<div>no form</div>')).toEqual({});
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('parseProposalReason', () => {
|
|
143
|
+
const crawler = new likms_1.LikmsCrawler();
|
|
144
|
+
test('extracts reason from #prntSummary and strips repeated heading', () => {
|
|
145
|
+
const reason = crawler.parseProposalReason(LIKMS_BILL_INFO_FRAGMENT_HTML);
|
|
146
|
+
expect(reason).toBe(EXPECTED_LIKMS_REASON);
|
|
147
|
+
});
|
|
148
|
+
test('reason does not contain the repeated section heading', () => {
|
|
149
|
+
const reason = crawler.parseProposalReason(LIKMS_BILL_INFO_FRAGMENT_HTML);
|
|
150
|
+
expect(reason).not.toMatch(/^제안이유/);
|
|
151
|
+
expect(reason).not.toContain('의안접수정보');
|
|
152
|
+
});
|
|
153
|
+
test('returns null when fragment has no #prntSummary', () => {
|
|
154
|
+
expect(crawler.parseProposalReason(LIKMS_BILL_INFO_FRAGMENT_NO_REASON_HTML)).toBeNull();
|
|
155
|
+
});
|
|
156
|
+
test('returns null when #prntSummary is empty', () => {
|
|
157
|
+
expect(crawler.parseProposalReason('<pre id="prntSummary"></pre>')).toBe(null);
|
|
158
|
+
});
|
|
159
|
+
test('returns null when #prntSummary contains only the heading', () => {
|
|
160
|
+
expect(crawler.parseProposalReason('<pre id="prntSummary">제안이유 및 주요내용</pre>')).toBeNull();
|
|
161
|
+
});
|
|
162
|
+
test('converts <br> tags to newlines', () => {
|
|
163
|
+
const reason = crawler.parseProposalReason('<pre id="prntSummary">제안이유 및 주요내용\n첫 줄<br>두 줄</pre>');
|
|
164
|
+
expect(reason).toBe('첫 줄\n두 줄');
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('getProposalReason', () => {
|
|
168
|
+
const crawler = new likms_1.LikmsCrawler();
|
|
169
|
+
test('fetches detail page then posts fragment endpoint', async () => {
|
|
170
|
+
const httpClient = getLikmsHttpClient(crawler);
|
|
171
|
+
const getSpy = jest
|
|
172
|
+
.spyOn(httpClient, 'get')
|
|
173
|
+
.mockResolvedValue(LIKMS_DETAIL_PAGE_HTML);
|
|
174
|
+
const postSpy = jest
|
|
175
|
+
.spyOn(httpClient, 'post')
|
|
176
|
+
.mockResolvedValue(LIKMS_BILL_INFO_FRAGMENT_HTML);
|
|
177
|
+
const reason = await crawler.getProposalReason(` ${TEST_BILL_ID} `);
|
|
178
|
+
expect(reason).toBe(EXPECTED_LIKMS_REASON);
|
|
179
|
+
const getUrl = getSpy.mock.calls[0][0];
|
|
180
|
+
expect(getUrl.toString()).toContain('https://likms.assembly.go.kr/bill/bi/billDetailPage.do');
|
|
181
|
+
expect(getUrl.searchParams.get('billId')).toBe(TEST_BILL_ID);
|
|
182
|
+
expect(getUrl.searchParams.get('currMenuNo')).toBe('2600044');
|
|
183
|
+
const [postUrl, postBody] = postSpy.mock.calls[0];
|
|
184
|
+
expect(postUrl.toString()).toContain('https://likms.assembly.go.kr/bill/bi/bill/detail/billInfo.do');
|
|
185
|
+
expect(postBody).toContain(`billId=${TEST_BILL_ID}`);
|
|
186
|
+
expect(postBody).toContain('billNo=2221798');
|
|
187
|
+
expect(postBody).toContain('billKindCd=BKC_0004');
|
|
188
|
+
getSpy.mockRestore();
|
|
189
|
+
postSpy.mockRestore();
|
|
190
|
+
});
|
|
191
|
+
test('returns null when fragment has no proposal reason', async () => {
|
|
192
|
+
const httpClient = getLikmsHttpClient(crawler);
|
|
193
|
+
const getSpy = jest
|
|
194
|
+
.spyOn(httpClient, 'get')
|
|
195
|
+
.mockResolvedValue(LIKMS_DETAIL_PAGE_HTML);
|
|
196
|
+
const postSpy = jest
|
|
197
|
+
.spyOn(httpClient, 'post')
|
|
198
|
+
.mockResolvedValue(LIKMS_BILL_INFO_FRAGMENT_NO_REASON_HTML);
|
|
199
|
+
await expect(crawler.getProposalReason(TEST_BILL_ID)).resolves.toBeNull();
|
|
200
|
+
getSpy.mockRestore();
|
|
201
|
+
postSpy.mockRestore();
|
|
202
|
+
});
|
|
203
|
+
test('never throws when detail page fetch fails', async () => {
|
|
204
|
+
const httpClient = getLikmsHttpClient(crawler);
|
|
205
|
+
const getSpy = jest
|
|
206
|
+
.spyOn(httpClient, 'get')
|
|
207
|
+
.mockRejectedValue(new Error('network down'));
|
|
208
|
+
await expect(crawler.getProposalReason(TEST_BILL_ID)).resolves.toBeNull();
|
|
209
|
+
getSpy.mockRestore();
|
|
210
|
+
});
|
|
211
|
+
test('never throws when fragment post fails', async () => {
|
|
212
|
+
const httpClient = getLikmsHttpClient(crawler);
|
|
213
|
+
const getSpy = jest
|
|
214
|
+
.spyOn(httpClient, 'get')
|
|
215
|
+
.mockResolvedValue(LIKMS_DETAIL_PAGE_HTML);
|
|
216
|
+
const postSpy = jest
|
|
217
|
+
.spyOn(httpClient, 'post')
|
|
218
|
+
.mockRejectedValue(new Error('Bad Request'));
|
|
219
|
+
await expect(crawler.getProposalReason(TEST_BILL_ID)).resolves.toBeNull();
|
|
220
|
+
getSpy.mockRestore();
|
|
221
|
+
postSpy.mockRestore();
|
|
222
|
+
});
|
|
223
|
+
test('returns null for empty billId without network calls', async () => {
|
|
224
|
+
const httpClient = getLikmsHttpClient(crawler);
|
|
225
|
+
const getSpy = jest.spyOn(httpClient, 'get');
|
|
226
|
+
const postSpy = jest.spyOn(httpClient, 'post');
|
|
227
|
+
await expect(crawler.getProposalReason('')).resolves.toBeNull();
|
|
228
|
+
await expect(crawler.getProposalReason(' ')).resolves.toBeNull();
|
|
229
|
+
expect(getSpy).not.toHaveBeenCalled();
|
|
230
|
+
expect(postSpy).not.toHaveBeenCalled();
|
|
231
|
+
getSpy.mockRestore();
|
|
232
|
+
postSpy.mockRestore();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('getDetailPageHTML', () => {
|
|
236
|
+
const crawler = new likms_1.LikmsCrawler();
|
|
237
|
+
test('throws when billId is empty', async () => {
|
|
238
|
+
await expect(crawler.getDetailPageHTML('')).rejects.toThrow('billId is required');
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
// ─── PalCrawl ↔ LikmsCrawler 연계 ─────────────────────────────────────────────
|
|
243
|
+
describe('PalCrawl hydrateProposalReason', () => {
|
|
244
|
+
const setup = (config) => {
|
|
245
|
+
const pal = new pal_1.PalCrawl(config);
|
|
246
|
+
const palHttp = pal
|
|
247
|
+
.httpClient;
|
|
248
|
+
const likms = pal.likms;
|
|
249
|
+
return { pal, palHttp, likmsHttp: likms.httpClient };
|
|
250
|
+
};
|
|
251
|
+
afterEach(() => {
|
|
252
|
+
jest.restoreAllMocks();
|
|
253
|
+
});
|
|
254
|
+
test('fills empty proposalReason from likms (getContent)', async () => {
|
|
255
|
+
const { pal, palHttp, likmsHttp } = setup();
|
|
256
|
+
jest.spyOn(palHttp, 'get').mockResolvedValue(PAL_CONTENT_HTML_EMPTY_REASON);
|
|
257
|
+
jest.spyOn(likmsHttp, 'get').mockResolvedValue(LIKMS_DETAIL_PAGE_HTML);
|
|
258
|
+
jest
|
|
259
|
+
.spyOn(likmsHttp, 'post')
|
|
260
|
+
.mockResolvedValue(LIKMS_BILL_INFO_FRAGMENT_HTML);
|
|
261
|
+
const content = await pal.getContent(TEST_BILL_ID);
|
|
262
|
+
expect(content.proposalReason).toBe(EXPECTED_LIKMS_REASON);
|
|
263
|
+
});
|
|
264
|
+
test('fills empty proposalReason from likms (getDoneContent)', async () => {
|
|
265
|
+
const { pal, palHttp, likmsHttp } = setup();
|
|
266
|
+
jest.spyOn(palHttp, 'get').mockResolvedValue(PAL_CONTENT_HTML_EMPTY_REASON);
|
|
267
|
+
jest.spyOn(likmsHttp, 'get').mockResolvedValue(LIKMS_DETAIL_PAGE_HTML);
|
|
268
|
+
jest
|
|
269
|
+
.spyOn(likmsHttp, 'post')
|
|
270
|
+
.mockResolvedValue(LIKMS_BILL_INFO_FRAGMENT_HTML);
|
|
271
|
+
const content = await pal.getDoneContent(TEST_BILL_ID);
|
|
272
|
+
expect(content.proposalReason).toBe(EXPECTED_LIKMS_REASON);
|
|
273
|
+
});
|
|
274
|
+
test('skips likms when PAL proposalReason already exists', async () => {
|
|
275
|
+
const { pal, palHttp, likmsHttp } = setup();
|
|
276
|
+
jest.spyOn(palHttp, 'get').mockResolvedValue(PAL_CONTENT_HTML_WITH_REASON);
|
|
277
|
+
const getSpy = jest.spyOn(likmsHttp, 'get');
|
|
278
|
+
const postSpy = jest.spyOn(likmsHttp, 'post');
|
|
279
|
+
const content = await pal.getContent(TEST_BILL_ID);
|
|
280
|
+
expect(content.proposalReason).toContain('과태료 부과 기준');
|
|
281
|
+
expect(getSpy).not.toHaveBeenCalled();
|
|
282
|
+
expect(postSpy).not.toHaveBeenCalled();
|
|
283
|
+
});
|
|
284
|
+
test('skips likms when hydrateProposalReason is false', async () => {
|
|
285
|
+
const { pal, palHttp, likmsHttp } = setup({ hydrateProposalReason: false });
|
|
286
|
+
jest.spyOn(palHttp, 'get').mockResolvedValue(PAL_CONTENT_HTML_EMPTY_REASON);
|
|
287
|
+
const getSpy = jest.spyOn(likmsHttp, 'get');
|
|
288
|
+
const postSpy = jest.spyOn(likmsHttp, 'post');
|
|
289
|
+
const content = await pal.getContent(TEST_BILL_ID);
|
|
290
|
+
expect(content.proposalReason).toBeNull();
|
|
291
|
+
expect(getSpy).not.toHaveBeenCalled();
|
|
292
|
+
expect(postSpy).not.toHaveBeenCalled();
|
|
293
|
+
});
|
|
294
|
+
test('keeps null proposalReason when likms lookup fails', async () => {
|
|
295
|
+
const { pal, palHttp, likmsHttp } = setup();
|
|
296
|
+
jest.spyOn(palHttp, 'get').mockResolvedValue(PAL_CONTENT_HTML_EMPTY_REASON);
|
|
297
|
+
jest.spyOn(likmsHttp, 'get').mockRejectedValue(new Error('network down'));
|
|
298
|
+
const content = await pal.getContent(TEST_BILL_ID);
|
|
299
|
+
expect(content.proposalReason).toBeNull();
|
|
300
|
+
expect(content.title).toBe('');
|
|
301
|
+
});
|
|
302
|
+
test('keeps null proposalReason when likms has no reason either', async () => {
|
|
303
|
+
const { pal, palHttp, likmsHttp } = setup();
|
|
304
|
+
jest.spyOn(palHttp, 'get').mockResolvedValue(PAL_CONTENT_HTML_EMPTY_REASON);
|
|
305
|
+
jest.spyOn(likmsHttp, 'get').mockResolvedValue(LIKMS_DETAIL_PAGE_HTML);
|
|
306
|
+
jest
|
|
307
|
+
.spyOn(likmsHttp, 'post')
|
|
308
|
+
.mockResolvedValue(LIKMS_BILL_INFO_FRAGMENT_NO_REASON_HTML);
|
|
309
|
+
const content = await pal.getContent(TEST_BILL_ID);
|
|
310
|
+
expect(content.proposalReason).toBeNull();
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
//# sourceMappingURL=likms.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"likms.test.js","sourceRoot":"","sources":["../src/likms.test.ts"],"names":[],"mappings":"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"}
|
package/dist/pal.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Browser } from 'puppeteer';
|
|
2
2
|
import { type ITableData, type IContentData, type ISearchResult, type INsmBillItem, type INsmBillDetail, type INsmSearchResult } from './parser';
|
|
3
3
|
export type { IAttachment, ITableData, IContentData, ISearchResult, INsmAttachment, INsmBillItem, INsmBillDetail, INsmSearchResult, } from './parser';
|
|
4
4
|
export interface ScreenshotOptions {
|
|
@@ -17,6 +17,12 @@ export interface PalCrawlConfig {
|
|
|
17
17
|
screenshot?: ScreenshotOptions;
|
|
18
18
|
/** 목록의 잘린 법안 제목을 상세 페이지에서 보정할지 여부 */
|
|
19
19
|
hydrateTruncatedTitles?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* PAL 상세 페이지에서 제안이유가 비어 있을 때 국회 의안정보시스템
|
|
22
|
+
* (likms.assembly.go.kr)에서 제안이유를 보정할지 여부 (기본값: true).
|
|
23
|
+
* 보정 실패 시 기존 값(null)을 그대로 유지하며 오류를 던지지 않습니다.
|
|
24
|
+
*/
|
|
25
|
+
hydrateProposalReason?: boolean;
|
|
20
26
|
}
|
|
21
27
|
export interface ISearchQuery {
|
|
22
28
|
pageIndex?: number;
|
|
@@ -57,6 +63,8 @@ export declare abstract class ScreenshotBase {
|
|
|
57
63
|
export declare class PalCrawl extends ScreenshotBase {
|
|
58
64
|
private readonly httpClient;
|
|
59
65
|
private readonly parser;
|
|
66
|
+
private readonly likms;
|
|
67
|
+
private readonly hydrateProposalReason;
|
|
60
68
|
constructor(config?: PalCrawlConfig);
|
|
61
69
|
/** 진행 중인 입법예고 목록 페이지 스크린샷을 반환합니다. */
|
|
62
70
|
getPalScreenshot(): Promise<Buffer>;
|
|
@@ -77,6 +85,12 @@ export declare class PalCrawl extends ScreenshotBase {
|
|
|
77
85
|
get(): Promise<ITableData[]>;
|
|
78
86
|
/** ID로 진행 중인 입법예고의 법률안 상세 페이지 HTML을 반환합니다. */
|
|
79
87
|
getContentHTML(id: string): Promise<string>;
|
|
88
|
+
/**
|
|
89
|
+
* PAL 상세 페이지에서 파싱한 제안이유가 비어 있으면 국회 의안정보시스템
|
|
90
|
+
* (likms)에서 같은 의안의 제안이유를 조회해 채웁니다.
|
|
91
|
+
* 보정 실패·의안 없음 등의 경우 기존 결과를 그대로 반환합니다.
|
|
92
|
+
*/
|
|
93
|
+
private hydrateProposalReasonIfEmpty;
|
|
80
94
|
/** ID로 진행 중인 입법예고의 법률안 상세 정보를 조회합니다. */
|
|
81
95
|
getContent(id: string): Promise<IContentData>;
|
|
82
96
|
/** 완료된 입법예고 목록 페이지의 HTML을 반환합니다. */
|
package/dist/pal.js
CHANGED
|
@@ -1,14 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
5
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
36
|
exports.NsmLmSts = exports.PalCrawl = exports.ScreenshotBase = void 0;
|
|
7
37
|
const url_1 = require("url");
|
|
8
|
-
const puppeteer_1 = __importDefault(require("puppeteer"));
|
|
9
38
|
const config_1 = require("./config");
|
|
10
39
|
const http_client_1 = require("./http-client");
|
|
11
40
|
const parser_1 = require("./parser");
|
|
41
|
+
const likms_1 = require("./likms");
|
|
12
42
|
/**
|
|
13
43
|
* Puppeteer 기반 스크린샷 기능을 공유하는 베이스 클래스.
|
|
14
44
|
* `PalCrawl`과 `NsmLmSts` 양쪽에서 상속합니다.
|
|
@@ -28,7 +58,9 @@ class ScreenshotBase {
|
|
|
28
58
|
/** Puppeteer 브라우저 인스턴스를 초기화합니다. */
|
|
29
59
|
async initBrowser() {
|
|
30
60
|
if (!this.browser) {
|
|
31
|
-
|
|
61
|
+
// puppeteer 25+는 순수 ESM이므로 지연 로딩한다 (CJS 환경의 require(esm) 회피).
|
|
62
|
+
const { default: puppeteer } = await Promise.resolve().then(() => __importStar(require('puppeteer')));
|
|
63
|
+
this.browser = await puppeteer.launch({
|
|
32
64
|
headless: true,
|
|
33
65
|
args: ['--no-sandbox', '--disable-setuid-sandbox'],
|
|
34
66
|
});
|
|
@@ -64,7 +96,8 @@ class ScreenshotBase {
|
|
|
64
96
|
? (this.screenshotConfig.quality ?? 80)
|
|
65
97
|
: undefined,
|
|
66
98
|
});
|
|
67
|
-
|
|
99
|
+
// puppeteer 25+는 Uint8Array를 반환하므로 공개 API(Buffer) 호환성을 유지한다.
|
|
100
|
+
return Buffer.from(screenshotBuffer);
|
|
68
101
|
}
|
|
69
102
|
finally {
|
|
70
103
|
await page.close();
|
|
@@ -89,6 +122,13 @@ class PalCrawl extends ScreenshotBase {
|
|
|
89
122
|
customHeaders: config?.customHeaders ?? {},
|
|
90
123
|
});
|
|
91
124
|
this.parser = new parser_1.PalParser();
|
|
125
|
+
this.likms = new likms_1.LikmsCrawler({
|
|
126
|
+
userAgent: config?.userAgent ?? config_1.Config.UserAgent,
|
|
127
|
+
timeout: config?.timeout ?? 10000,
|
|
128
|
+
retryCount: config?.retryCount ?? 3,
|
|
129
|
+
customHeaders: config?.customHeaders ?? {},
|
|
130
|
+
});
|
|
131
|
+
this.hydrateProposalReason = config?.hydrateProposalReason ?? true;
|
|
92
132
|
}
|
|
93
133
|
/** 진행 중인 입법예고 목록 페이지 스크린샷을 반환합니다. */
|
|
94
134
|
async getPalScreenshot() {
|
|
@@ -175,10 +215,31 @@ class PalCrawl extends ScreenshotBase {
|
|
|
175
215
|
url.searchParams.set('lgsltPaId', normalizedId);
|
|
176
216
|
return this.httpClient.get(url);
|
|
177
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* PAL 상세 페이지에서 파싱한 제안이유가 비어 있으면 국회 의안정보시스템
|
|
220
|
+
* (likms)에서 같은 의안의 제안이유를 조회해 채웁니다.
|
|
221
|
+
* 보정 실패·의안 없음 등의 경우 기존 결과를 그대로 반환합니다.
|
|
222
|
+
*/
|
|
223
|
+
async hydrateProposalReasonIfEmpty(id, content) {
|
|
224
|
+
if (!this.hydrateProposalReason || content.proposalReason) {
|
|
225
|
+
return content;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
const proposalReason = await this.likms.getProposalReason(id);
|
|
229
|
+
if (proposalReason) {
|
|
230
|
+
return { ...content, proposalReason };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// likms 보정 실패 시 기존 결과 유지
|
|
235
|
+
}
|
|
236
|
+
return content;
|
|
237
|
+
}
|
|
178
238
|
/** ID로 진행 중인 입법예고의 법률안 상세 정보를 조회합니다. */
|
|
179
239
|
async getContent(id) {
|
|
180
240
|
const html = await this.getContentHTML(id);
|
|
181
|
-
|
|
241
|
+
const content = this.parser.parseContent(html);
|
|
242
|
+
return this.hydrateProposalReasonIfEmpty(id, content);
|
|
182
243
|
}
|
|
183
244
|
/** 완료된 입법예고 목록 페이지의 HTML을 반환합니다. */
|
|
184
245
|
async getDoneHTML() {
|
|
@@ -204,7 +265,8 @@ class PalCrawl extends ScreenshotBase {
|
|
|
204
265
|
/** ID로 완료된 입법예고의 법률안 상세 정보를 조회합니다. */
|
|
205
266
|
async getDoneContent(id) {
|
|
206
267
|
const html = await this.getDoneContentHTML(id);
|
|
207
|
-
|
|
268
|
+
const content = this.parser.parseContent(html);
|
|
269
|
+
return this.hydrateProposalReasonIfEmpty(id, content);
|
|
208
270
|
}
|
|
209
271
|
// ── Search / Filter ──────────────────────────────────────────────────────────
|
|
210
272
|
/** 진행 중인 입법예고를 검색합니다. 필터를 지정하지 않으면 1페이지를 반환합니다. */
|
package/dist/pal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pal.js","sourceRoot":"","sources":["../src/pal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pal.js","sourceRoot":"","sources":["../src/pal.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pal-crawl",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "국회입법예고(pal.assembly.go.kr)의 진행 중인 입법 예고 크롤러",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "vientorepublic",
|
|
@@ -36,18 +36,18 @@
|
|
|
36
36
|
"homepage": "https://github.com/vientorepublic/pal-crawl#readme",
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"cheerio": "^1.0.0",
|
|
39
|
-
"iconv-lite": "^0.7.
|
|
40
|
-
"puppeteer": "^
|
|
39
|
+
"iconv-lite": "^0.7.3",
|
|
40
|
+
"puppeteer": "^25.13.0"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@eslint/js": "^10.0.
|
|
43
|
+
"@eslint/js": "^10.0.1",
|
|
44
44
|
"@types/jest": "^30.0.0",
|
|
45
|
-
"eslint": "^10.
|
|
46
|
-
"jest": "^30.
|
|
47
|
-
"prettier": "^3.
|
|
48
|
-
"ts-jest": "^29.
|
|
49
|
-
"typescript": "^6.0.
|
|
50
|
-
"typescript-eslint": "^8.
|
|
45
|
+
"eslint": "^10.12.0",
|
|
46
|
+
"jest": "^30.5.2",
|
|
47
|
+
"prettier": "^3.9.9",
|
|
48
|
+
"ts-jest": "^29.4.14",
|
|
49
|
+
"typescript": "^6.0.3",
|
|
50
|
+
"typescript-eslint": "^8.71.1"
|
|
51
51
|
},
|
|
52
52
|
"jest": {
|
|
53
53
|
"preset": "ts-jest",
|