pal-crawl 1.1.0 → 1.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/README.md CHANGED
@@ -17,9 +17,11 @@
17
17
 
18
18
  - [Introduction](#introduction)
19
19
  - [Installation](#installation)
20
+ - [Configuration](#configuration)
20
21
  - [Base Types](#base-types)
21
22
  - [Methods](#methods)
22
23
  - [get](#get)
24
+ - [Examples](#examples)
23
25
  - [License](#license)
24
26
 
25
27
  ---
@@ -38,6 +40,39 @@ npm install pal-crawl
38
40
 
39
41
  ---
40
42
 
43
+ ## Configuration
44
+
45
+ `PalCrawl` 클래스는 생성자에서 선택적 설정 객체를 받을 수 있습니다.
46
+
47
+ ```typescript
48
+ interface PalCrawlConfig {
49
+ userAgent?: string; // 사용자 정의 User-Agent (기본값: Chrome User-Agent)
50
+ timeout?: number; // HTTP 요청 타임아웃 (밀리초, 기본값: 10000)
51
+ retryCount?: number; // 재시도 횟수 (기본값: 3)
52
+ customHeaders?: Record<string, string>; // 사용자 정의 헤더
53
+ }
54
+ ```
55
+
56
+ ### 기본 사용법
57
+
58
+ ```typescript
59
+ // 기본 설정으로 사용
60
+ const palCrawl = new PalCrawl();
61
+
62
+ // 사용자 정의 설정으로 사용
63
+ const palCrawl = new PalCrawl({
64
+ userAgent: 'My Custom Bot 1.0',
65
+ timeout: 15000,
66
+ retryCount: 5,
67
+ customHeaders: {
68
+ 'Accept-Language': 'ko-KR',
69
+ Accept: 'text/html,application/xhtml+xml',
70
+ },
71
+ });
72
+ ```
73
+
74
+ ---
75
+
41
76
  ## Base Types
42
77
 
43
78
  `ITableData`는 크롤링된 입법 예고 데이터를 나타내는 인터페이스입니다.
@@ -61,7 +96,7 @@ interface ITableData {
61
96
 
62
97
  `get` 메서드는 진행 중인 입법 예고 데이터를 가져옵니다.
63
98
 
64
- ```javascript
99
+ ```typescript
65
100
  import { PalCrawl } from 'pal-crawl';
66
101
 
67
102
  const palCrawl = new PalCrawl();
@@ -72,6 +107,74 @@ console.log(table);
72
107
 
73
108
  ---
74
109
 
110
+ ## Examples
111
+
112
+ ### 기본 사용법
113
+
114
+ ```typescript
115
+ import { PalCrawl } from 'pal-crawl';
116
+
117
+ const palCrawl = new PalCrawl();
118
+ const data = await palCrawl.get();
119
+ console.log(data);
120
+ ```
121
+
122
+ ### 사용자 정의 User-Agent 사용
123
+
124
+ ```typescript
125
+ import { PalCrawl, type PalCrawlConfig } from 'pal-crawl';
126
+
127
+ const config: PalCrawlConfig = {
128
+ userAgent: 'MyBot/1.0 (https://example.com)',
129
+ };
130
+
131
+ const palCrawl = new PalCrawl(config);
132
+ const data = await palCrawl.get();
133
+ ```
134
+
135
+ ### 고급 설정 (타임아웃, 재시도, 헤더)
136
+
137
+ ```typescript
138
+ import { PalCrawl, type PalCrawlConfig } from 'pal-crawl';
139
+
140
+ const config: PalCrawlConfig = {
141
+ userAgent: 'Advanced Bot 2.0',
142
+ timeout: 20000, // 20초 타임아웃
143
+ retryCount: 2, // 2회 재시도
144
+ customHeaders: {
145
+ 'Accept-Language': 'ko-KR',
146
+ 'Cache-Control': 'no-cache',
147
+ },
148
+ };
149
+
150
+ const palCrawl = new PalCrawl(config);
151
+ const data = await palCrawl.get();
152
+ ```
153
+
154
+ ### 에러 처리
155
+
156
+ ```typescript
157
+ import { PalCrawl } from 'pal-crawl';
158
+
159
+ const palCrawl = new PalCrawl({
160
+ timeout: 5000,
161
+ retryCount: 3,
162
+ });
163
+
164
+ try {
165
+ const data = await palCrawl.get();
166
+ console.log('입법예고 데이터:', data);
167
+ } catch (error) {
168
+ if (error.message.includes('timeout')) {
169
+ console.error('요청 타임아웃:', error.message);
170
+ } else {
171
+ console.error('크롤링 실패:', error.message);
172
+ }
173
+ }
174
+ ```
175
+
176
+ ---
177
+
75
178
  ## License
76
179
 
77
180
  This project is licensed under the MIT License. See the [LICENSE](#license) section for details.
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
- export { PalCrawl } from './pal';
1
+ export { PalCrawl, type ITableData, type PalCrawlConfig } from './pal';
2
+ export { Config } from './config';
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PalCrawl = void 0;
3
+ exports.Config = exports.PalCrawl = void 0;
4
4
  var pal_1 = require("./pal");
5
5
  Object.defineProperty(exports, "PalCrawl", { enumerable: true, get: function () { return pal_1.PalCrawl; } });
6
+ var config_1 = require("./config");
7
+ Object.defineProperty(exports, "Config", { enumerable: true, get: function () { return config_1.Config; } });
6
8
  //# 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,6BAAiC;AAAxB,+FAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,6BAAuE;AAA9D,+FAAA,QAAQ,OAAA;AACjB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA"}
package/dist/pal.d.ts CHANGED
@@ -1,3 +1,9 @@
1
+ export interface PalCrawlConfig {
2
+ userAgent?: string;
3
+ timeout?: number;
4
+ retryCount?: number;
5
+ customHeaders?: Record<string, string>;
6
+ }
1
7
  export interface ITableData {
2
8
  num: number;
3
9
  subject: string;
@@ -7,6 +13,12 @@ export interface ITableData {
7
13
  link: string;
8
14
  }
9
15
  export declare class PalCrawl {
16
+ private userAgent;
17
+ private timeout;
18
+ private retryCount;
19
+ private customHeaders;
20
+ constructor(config?: PalCrawlConfig);
21
+ private makeRequest;
10
22
  getPalHTML(): Promise<string>;
11
23
  parseTable(html: string): ITableData[];
12
24
  get(): Promise<ITableData[]>;
package/dist/pal.js CHANGED
@@ -39,18 +39,25 @@ const url_1 = require("url");
39
39
  const cheerio = __importStar(require("cheerio"));
40
40
  const config_1 = require("./config");
41
41
  class PalCrawl {
42
- async getPalHTML() {
42
+ constructor(config) {
43
+ this.userAgent = config?.userAgent ?? config_1.Config.UserAgent;
44
+ this.timeout = config?.timeout ?? 10000; // Default 10 seconds
45
+ this.retryCount = config?.retryCount ?? 3; // Default 3 attempts
46
+ this.customHeaders = config?.customHeaders ?? {};
47
+ }
48
+ async makeRequest() {
43
49
  return new Promise((resolve, reject) => {
44
50
  const url = new url_1.URL(config_1.Config.URL, config_1.Config.DOMAIN);
51
+ const headers = {
52
+ 'User-Agent': this.userAgent,
53
+ ...this.customHeaders,
54
+ };
45
55
  const options = {
46
- headers: {
47
- 'User-Agent': config_1.Config.UserAgent,
48
- },
56
+ headers,
57
+ timeout: this.timeout,
49
58
  };
50
- https
51
- .get(url, options, (res) => {
52
- if (res.statusCode &&
53
- (res.statusCode < 200 || res.statusCode >= 300)) {
59
+ const req = https.get(url, options, (res) => {
60
+ if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
54
61
  reject(new Error(`Invalid response: ${res.statusCode} ${res.statusMessage}`));
55
62
  return;
56
63
  }
@@ -61,12 +68,34 @@ class PalCrawl {
61
68
  res.on('end', () => {
62
69
  resolve(data);
63
70
  });
64
- })
65
- .on('error', (err) => {
71
+ });
72
+ req.on('timeout', () => {
73
+ req.destroy();
74
+ reject(new Error(`Request timeout after ${this.timeout}ms`));
75
+ });
76
+ req.on('error', (err) => {
66
77
  reject(err);
67
78
  });
79
+ req.setTimeout(this.timeout);
68
80
  });
69
81
  }
82
+ async getPalHTML() {
83
+ let lastError;
84
+ for (let attempt = 1; attempt <= this.retryCount; attempt++) {
85
+ try {
86
+ return await this.makeRequest();
87
+ }
88
+ catch (error) {
89
+ lastError = error;
90
+ if (attempt < this.retryCount) {
91
+ // Exponential backoff before retrying
92
+ const delay = Math.min(1000 * Math.pow(2, attempt - 1), 5000);
93
+ await new Promise((resolve) => setTimeout(resolve, delay));
94
+ }
95
+ }
96
+ }
97
+ throw lastError;
98
+ }
70
99
  parseTable(html) {
71
100
  const $ = cheerio.load(html);
72
101
  const body = $('body');
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/dist/pal.test.js CHANGED
@@ -7,6 +7,21 @@ describe('PalCrawl', () => {
7
7
  const html = await palCrawl.getPalHTML();
8
8
  expect(typeof html).toBe('string');
9
9
  });
10
+ test('constructor: should use custom userAgent when provided in config', async () => {
11
+ const config = {
12
+ userAgent: 'Custom User Agent',
13
+ };
14
+ const palCrawl = new pal_1.PalCrawl(config);
15
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
16
+ });
17
+ test('constructor: should use default userAgent when config is empty', async () => {
18
+ const palCrawl = new pal_1.PalCrawl({});
19
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
20
+ });
21
+ test('constructor: should use default userAgent when no config provided', async () => {
22
+ const palCrawl = new pal_1.PalCrawl();
23
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
24
+ });
10
25
  test('parseTable: array length should be 0 when invalid html', () => {
11
26
  const palCrawl = new pal_1.PalCrawl();
12
27
  const table = palCrawl.parseTable('asdf');
@@ -17,5 +32,41 @@ describe('PalCrawl', () => {
17
32
  const table = await palCrawl.get();
18
33
  expect(table).toHaveLength(10);
19
34
  });
35
+ test('constructor: should use custom timeout when provided', () => {
36
+ const config = {
37
+ timeout: 5000,
38
+ };
39
+ const palCrawl = new pal_1.PalCrawl(config);
40
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
41
+ });
42
+ test('constructor: should use custom retryCount when provided', () => {
43
+ const config = {
44
+ retryCount: 5,
45
+ };
46
+ const palCrawl = new pal_1.PalCrawl(config);
47
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
48
+ });
49
+ test('constructor: should use custom headers when provided', () => {
50
+ const config = {
51
+ customHeaders: {
52
+ 'Accept-Language': 'ko-KR',
53
+ 'Custom-Header': 'test-value',
54
+ },
55
+ };
56
+ const palCrawl = new pal_1.PalCrawl(config);
57
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
58
+ });
59
+ test('constructor: should use all custom config options', () => {
60
+ const config = {
61
+ userAgent: 'Custom Agent',
62
+ timeout: 15000,
63
+ retryCount: 2,
64
+ customHeaders: {
65
+ Accept: 'application/json',
66
+ },
67
+ };
68
+ const palCrawl = new pal_1.PalCrawl(config);
69
+ expect(palCrawl).toBeInstanceOf(pal_1.PalCrawl);
70
+ });
20
71
  });
21
72
  //# sourceMappingURL=pal.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pal.test.js","sourceRoot":"","sources":["../src/pal.test.ts"],"names":[],"mappings":";;AAAA,+BAAiC;AAEjC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,QAAQ,GAAG,IAAI,cAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAClE,MAAM,QAAQ,GAAG,IAAI,cAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAI,cAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"pal.test.js","sourceRoot":"","sources":["../src/pal.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pal-crawl",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "국회입법예고(pal.assembly.go.kr)의 진행 중인 입법 예고 크롤러",
5
5
  "license": "MIT",
6
6
  "author": "vientorepublic",
@@ -12,7 +12,18 @@
12
12
  "test": "jest",
13
13
  "test:verbose": "jest --verbose",
14
14
  "test:watch": "jest --watch",
15
- "test:cov": "jest --coverage"
15
+ "test:cov": "jest --coverage",
16
+ "clean": "rm -rf dist",
17
+ "prepack": "npm run clean && npm run build",
18
+ "prepublishOnly": "npm run lint && npm run test && npm run build",
19
+ "release:patch": "npm version patch && npm publish",
20
+ "release:minor": "npm version minor && npm publish",
21
+ "release:major": "npm version major && npm publish",
22
+ "release:dry": "npm publish --dry-run",
23
+ "version:check": "npm version --help",
24
+ "pack:local": "npm pack",
25
+ "size": "npm pack --dry-run",
26
+ "preview": "npm pack && tar -tzf melona-*.tgz"
16
27
  },
17
28
  "repository": {
18
29
  "type": "git",
@@ -27,7 +38,6 @@
27
38
  },
28
39
  "devDependencies": {
29
40
  "@eslint/js": "^9.18.0",
30
- "@types/cheerio": "^0.22.35",
31
41
  "@types/jest": "^29.5.14",
32
42
  "eslint": "^9.18.0",
33
43
  "jest": "^29.7.0",