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.
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAUX;AAVD,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;AACrC,CAAC,EAVW,MAAM,sBAAN,MAAM,QAUjB"}
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"}
@@ -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
  }
@@ -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.get(url, options, (res) => {
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 body = Buffer.concat(chunks);
124
- resolve(this.decodeBody(body, res.headers['content-type']));
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;
@@ -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"}
@@ -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 { type Browser } from 'puppeteer';
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 __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
- this.browser = await puppeteer_1.default.launch({
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
- return screenshotBuffer;
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
- return this.parser.parseContent(html);
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
- return this.parser.parseContent(html);
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.5",
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.2",
40
- "puppeteer": "^22.0.0"
39
+ "iconv-lite": "^0.7.3",
40
+ "puppeteer": "^25.13.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@eslint/js": "^10.0.0",
43
+ "@eslint/js": "^10.0.1",
44
44
  "@types/jest": "^30.0.0",
45
- "eslint": "^10.0.0",
46
- "jest": "^30.0.0",
47
- "prettier": "^3.4.2",
48
- "ts-jest": "^29.2.5",
49
- "typescript": "^6.0.0",
50
- "typescript-eslint": "^8.20.0"
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",