parse-comcigan 0.0.6 → 0.3.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 +17 -3
- package/dist/index.d.ts +11 -0
- package/dist/index.js +25 -15
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/src/index.ts +34 -14
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@ Comcigan 클래스의 인스턴스를 생성하여 사용합니다.
|
|
|
25
25
|
|cacheMs|number|0|캐시될 시간(밀리초)입니다. 0일때 캐시를 비활성화합니다.|
|
|
26
26
|
|doNotThrow|boolean|true|[Axios](https://axios-http.com/)에서 validateStatus를 항상 true로 반환할 지에 대한 여부입니다.|
|
|
27
27
|
|debug|(msg: string) => any|undefined|디버그 메시지를 처리하는 콜백입니다. 이 콜백은 주로 컴시간과 통신할 때 호출됩니다.|
|
|
28
|
+
|appVersion|string|2.11|컴시간알리미 안드로이드 앱의 버전입니다.|
|
|
28
29
|
|
|
29
30
|
```typescript
|
|
30
31
|
import Comcigan from 'parse-comcigan';
|
|
@@ -78,9 +79,10 @@ comci.GetTimetable({
|
|
|
78
79
|
"criteria": "period",
|
|
79
80
|
"grade": 3,
|
|
80
81
|
"classN": 5,
|
|
81
|
-
"without8th": false
|
|
82
|
+
"without8th": false,
|
|
83
|
+
"nextWeek": true // 다음 주 시간표 가져오기 (등록된 일자가 1개이면 이번 주 시간표를 가져옵니다.)
|
|
82
84
|
}).then(data => {
|
|
83
|
-
console.log(data.timetable[0][7]); // [요일][교시] 월요일 8교시
|
|
85
|
+
console.log(data.timetable[0][7]); // [요일][교시] 다음주 월요일 8교시
|
|
84
86
|
});
|
|
85
87
|
comci.GetTimetable({
|
|
86
88
|
"schoolCode": 96211,
|
|
@@ -90,7 +92,6 @@ comci.GetTimetable({
|
|
|
90
92
|
"without8th": true
|
|
91
93
|
}).then(data => {
|
|
92
94
|
console.log(data.timetable[4][0]); // [교시][요일] 월요일 5교시
|
|
93
|
-
console.log(data.timetable[7]); // undefined
|
|
94
95
|
});
|
|
95
96
|
```
|
|
96
97
|
|
|
@@ -138,9 +139,22 @@ comci.GetClassList(96211).then(data => {
|
|
|
138
139
|
|criteria|"weekday" or "period"|Yes|리스트 반환을 어떻게 할지 여부입니다.|
|
|
139
140
|
|grade|number|Yes|학년|
|
|
140
141
|
|classN|number|Yes|반|
|
|
142
|
+
|without8th|boolean|No|8교시를 빼고 리턴할지에 대한 여부입니다.|
|
|
143
|
+
|nextWeek|boolean|No|다음 주 시간표를 반환할지에 대한 여부입니다.|
|
|
141
144
|
|
|
142
145
|
## 업데이트 로그
|
|
143
146
|
|
|
147
|
+
### 0.3.0
|
|
148
|
+
|
|
149
|
+
- 다음 주 시간표 보기
|
|
150
|
+
- 디버그 메시지 수정
|
|
151
|
+
|
|
152
|
+
### 0.2.0
|
|
153
|
+
|
|
154
|
+
- 버전 넘버링 수정
|
|
155
|
+
- 앱 버전 수정 기능 추가
|
|
156
|
+
- 시간표 버그 수정
|
|
157
|
+
|
|
144
158
|
### 0.0.6
|
|
145
159
|
|
|
146
160
|
- 모듈이 불러와지지 않던 버그 수정
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,10 @@ export type GetTimetableOptions = {
|
|
|
22
22
|
* 8교시를 빼고 리턴할지 여부입니다.
|
|
23
23
|
*/
|
|
24
24
|
"without8th"?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* 다음 주 시간표를 가져올지에 대한 여부입니다.
|
|
27
|
+
*/
|
|
28
|
+
"nextWeek"?: boolean;
|
|
25
29
|
};
|
|
26
30
|
export interface ComciganInitializeType {
|
|
27
31
|
/**
|
|
@@ -43,6 +47,12 @@ export interface ComciganInitializeType {
|
|
|
43
47
|
* 기본값은 없습니다.
|
|
44
48
|
*/
|
|
45
49
|
debug?: (msg: string) => any;
|
|
50
|
+
/**
|
|
51
|
+
* 컴시간알리미의 앱 버전입니다.
|
|
52
|
+
*
|
|
53
|
+
* 기본값은 2.11입니다.
|
|
54
|
+
*/
|
|
55
|
+
appVersion?: string;
|
|
46
56
|
}
|
|
47
57
|
export type ComciganSearched = {
|
|
48
58
|
/**
|
|
@@ -100,6 +110,7 @@ export default class Comcigan {
|
|
|
100
110
|
private _cache;
|
|
101
111
|
private mSb;
|
|
102
112
|
private mTh;
|
|
113
|
+
private unusable;
|
|
103
114
|
private request;
|
|
104
115
|
private EUC_KR_encodeURI;
|
|
105
116
|
/**
|
package/dist/index.js
CHANGED
|
@@ -18,24 +18,32 @@ export default class Comcigan {
|
|
|
18
18
|
mTh(mm, m2) { if (m2 == 100) {
|
|
19
19
|
return Math.floor(mm / m2);
|
|
20
20
|
} return mm % m2; }
|
|
21
|
+
unusable(object, array) {
|
|
22
|
+
if (object === array[0])
|
|
23
|
+
return;
|
|
24
|
+
return object;
|
|
25
|
+
}
|
|
21
26
|
request(route, doNotParse) {
|
|
22
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
23
29
|
if (this._cache.has(route)) {
|
|
24
|
-
this._options.debug ?
|
|
30
|
+
(_b = (_a = this._options).debug) === null || _b === void 0 ? void 0 : _b.call(_a, `Returning cache with id registered as ${route}`);
|
|
25
31
|
return this._cache.get(route);
|
|
26
32
|
}
|
|
27
|
-
this._options.debug ?
|
|
33
|
+
(_d = (_c = this._options).debug) === null || _d === void 0 ? void 0 : _d.call(_c, `Requesting to http://comci.kr:4081/${route}`);
|
|
34
|
+
const now = new Date();
|
|
28
35
|
const r = yield axios.get(`http://comci.kr:4081/${route}`, Object.assign({}, (this._options.doNotThrow && { "validateStatus": () => true })));
|
|
36
|
+
(_f = (_e = this._options).debug) === null || _f === void 0 ? void 0 : _f.call(_e, `${new Date().getTime() - now.getTime()}ms http://comci.kr:4081/${route}`);
|
|
29
37
|
if (doNotParse) {
|
|
30
38
|
if (this._options.cacheMs && this._options.cacheMs !== 0) {
|
|
31
|
-
this._options.debug ?
|
|
39
|
+
(_h = (_g = this._options).debug) === null || _h === void 0 ? void 0 : _h.call(_g, `Registered cache with id ${route}`);
|
|
32
40
|
this._cache.register(route, r.data, this._options.cacheMs);
|
|
33
41
|
}
|
|
34
42
|
return r.data;
|
|
35
43
|
}
|
|
36
44
|
const data = JSON.parse(r.data.slice(0, r.data.indexOf("}") + 1));
|
|
37
45
|
if (this._options.cacheMs && this._options.cacheMs !== 0) {
|
|
38
|
-
this._options.debug ?
|
|
46
|
+
(_k = (_j = this._options).debug) === null || _k === void 0 ? void 0 : _k.call(_j, `Registered cache with id ${route}`);
|
|
39
47
|
this._cache.register(route, data, this._options.cacheMs);
|
|
40
48
|
}
|
|
41
49
|
return data;
|
|
@@ -54,7 +62,8 @@ export default class Comcigan {
|
|
|
54
62
|
constructor(options) {
|
|
55
63
|
this._options = {
|
|
56
64
|
"cacheMs": 0,
|
|
57
|
-
"doNotThrow": false
|
|
65
|
+
"doNotThrow": false,
|
|
66
|
+
"appVersion": "2.11",
|
|
58
67
|
};
|
|
59
68
|
this._cache = new Cache();
|
|
60
69
|
this._options = Object.assign(Object.assign({}, this._options), options);
|
|
@@ -83,9 +92,10 @@ export default class Comcigan {
|
|
|
83
92
|
*/
|
|
84
93
|
GetTimetable(options) {
|
|
85
94
|
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
var _a;
|
|
87
|
-
const { schoolCode, criteria, grade, classN, without8th } = options;
|
|
88
|
-
const
|
|
95
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
96
|
+
const { schoolCode, criteria, grade, classN, without8th, nextWeek } = options;
|
|
97
|
+
const { appVersion } = this._options;
|
|
98
|
+
const str = `36174_${schoolCode}_${nextWeek ? 2 : 1}_4_0_3_${appVersion}`;
|
|
89
99
|
const route = (str.substring(9) + str.substring(0, 9)).split("").reverse().join("");
|
|
90
100
|
const data = yield this.request(`7813?${route}`, true);
|
|
91
101
|
const [latestVersion, step1] = data.split("^");
|
|
@@ -106,7 +116,7 @@ export default class Comcigan {
|
|
|
106
116
|
for (let period = 1; period < (without8th ? 8 : 9); period++) {
|
|
107
117
|
const o = origin[weekday][period];
|
|
108
118
|
const t = today[weekday][period];
|
|
109
|
-
if (
|
|
119
|
+
if (o === undefined || t === undefined) {
|
|
110
120
|
weekdayList.push({
|
|
111
121
|
"subject": "-",
|
|
112
122
|
"teacher": "-"
|
|
@@ -117,19 +127,19 @@ export default class Comcigan {
|
|
|
117
127
|
const originTeacher = json.성명[this.mTh(o, sep) % sep];
|
|
118
128
|
if (o === t) {
|
|
119
129
|
weekdayList.push({
|
|
120
|
-
"subject": originSubject,
|
|
121
|
-
"teacher": originTeacher
|
|
130
|
+
"subject": (_b = this.unusable(originSubject, json.과목명)) !== null && _b !== void 0 ? _b : "-",
|
|
131
|
+
"teacher": (_c = this.unusable(originTeacher, json.성명)) !== null && _c !== void 0 ? _c : "-"
|
|
122
132
|
});
|
|
123
133
|
continue;
|
|
124
134
|
}
|
|
125
135
|
const changedSubject = json.과목명[this.mSb(t, sep) % sep];
|
|
126
136
|
const changedTeacher = json.성명[this.mTh(t, sep) % sep];
|
|
127
137
|
weekdayList.push({
|
|
128
|
-
"subject":
|
|
129
|
-
"teacher":
|
|
138
|
+
"subject": (_d = this.unusable(changedSubject, json.과목명)) !== null && _d !== void 0 ? _d : "-",
|
|
139
|
+
"teacher": (_e = this.unusable(changedTeacher, json.성명)) !== null && _e !== void 0 ? _e : "-",
|
|
130
140
|
"original": {
|
|
131
|
-
"subject":
|
|
132
|
-
"teacher":
|
|
141
|
+
"subject": (_f = this.unusable(originSubject, json.과목명)) !== null && _f !== void 0 ? _f : "-",
|
|
142
|
+
"teacher": (_g = this.unusable(originTeacher, json.성명)) !== null && _g !== void 0 ? _g : "-",
|
|
133
143
|
}
|
|
134
144
|
});
|
|
135
145
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-comcigan",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "컴시간 알리미에서 시간표를 가져오는 라이브러리입니다.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"pack": "npm run clean && npm run build",
|
|
12
12
|
"build": "tsc",
|
|
13
13
|
"clean": "tsc --build --clean",
|
|
14
|
-
"dev": "nodemon --exec ts-node src/index.ts"
|
|
14
|
+
"dev": "nodemon --exec ts-node src/index.ts",
|
|
15
|
+
"test": "npm run pack && node \"test.js\""
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@types/node": "^22.15.30",
|
package/src/index.ts
CHANGED
|
@@ -27,6 +27,10 @@ export type GetTimetableOptions = {
|
|
|
27
27
|
* 8교시를 빼고 리턴할지 여부입니다.
|
|
28
28
|
*/
|
|
29
29
|
"without8th"?: boolean,
|
|
30
|
+
/**
|
|
31
|
+
* 다음 주 시간표를 가져올지에 대한 여부입니다.
|
|
32
|
+
*/
|
|
33
|
+
"nextWeek"?: boolean;
|
|
30
34
|
};
|
|
31
35
|
export interface ComciganInitializeType {
|
|
32
36
|
/**
|
|
@@ -48,6 +52,12 @@ export interface ComciganInitializeType {
|
|
|
48
52
|
* 기본값은 없습니다.
|
|
49
53
|
*/
|
|
50
54
|
debug?: (msg: string) => any;
|
|
55
|
+
/**
|
|
56
|
+
* 컴시간알리미의 앱 버전입니다.
|
|
57
|
+
*
|
|
58
|
+
* 기본값은 2.11입니다.
|
|
59
|
+
*/
|
|
60
|
+
appVersion?: string;
|
|
51
61
|
}
|
|
52
62
|
export type ComciganSearched = {
|
|
53
63
|
/**
|
|
@@ -105,27 +115,36 @@ export type ComciganTimetable = {
|
|
|
105
115
|
export default class Comcigan {
|
|
106
116
|
private _options: ComciganInitializeType = {
|
|
107
117
|
"cacheMs": 0,
|
|
108
|
-
"doNotThrow": false
|
|
118
|
+
"doNotThrow": false,
|
|
119
|
+
"appVersion": "2.11",
|
|
109
120
|
};
|
|
110
121
|
private _cache = new Cache();
|
|
111
122
|
|
|
112
123
|
private mSb(mm: number, m2: number) { if (m2 == 100) { return mm % m2; } return Math.floor(mm / m2); }
|
|
113
124
|
private mTh(mm: number, m2: number) { if (m2 == 100) { return Math.floor(mm / m2); } return mm % m2; }
|
|
114
125
|
|
|
126
|
+
private unusable(object: any, array: any[]) {
|
|
127
|
+
if (object === array[0]) return;
|
|
128
|
+
|
|
129
|
+
return object;
|
|
130
|
+
}
|
|
131
|
+
|
|
115
132
|
private async request<T = any>(route: string, doNotParse?: boolean): Promise<T> {
|
|
116
133
|
if (this._cache.has(route)) {
|
|
117
|
-
this._options.debug
|
|
134
|
+
this._options.debug?.(`Returning cache with id registered as ${route}`);
|
|
118
135
|
return this._cache.get(route);
|
|
119
136
|
}
|
|
120
137
|
|
|
121
|
-
this._options.debug
|
|
138
|
+
this._options.debug?.(`Requesting to http://comci.kr:4081/${route}`);
|
|
139
|
+
const now = new Date();
|
|
122
140
|
const r = await axios.get<any>(`http://comci.kr:4081/${route}`, {
|
|
123
141
|
...(this._options.doNotThrow && { "validateStatus": () => true })
|
|
124
142
|
});
|
|
143
|
+
this._options.debug?.(`${new Date().getTime() - now.getTime()}ms http://comci.kr:4081/${route}`);
|
|
125
144
|
|
|
126
145
|
if (doNotParse) {
|
|
127
146
|
if (this._options.cacheMs && this._options.cacheMs !== 0) {
|
|
128
|
-
this._options.debug
|
|
147
|
+
this._options.debug?.(`Registered cache with id ${route}`);
|
|
129
148
|
this._cache.register(route, r.data, this._options.cacheMs);
|
|
130
149
|
}
|
|
131
150
|
return r.data;
|
|
@@ -133,7 +152,7 @@ export default class Comcigan {
|
|
|
133
152
|
|
|
134
153
|
const data = JSON.parse(r.data.slice(0, r.data.indexOf("}") + 1));
|
|
135
154
|
if (this._options.cacheMs && this._options.cacheMs !== 0) {
|
|
136
|
-
this._options.debug
|
|
155
|
+
this._options.debug?.(`Registered cache with id ${route}`);
|
|
137
156
|
this._cache.register(route, data, this._options.cacheMs);
|
|
138
157
|
}
|
|
139
158
|
return data;
|
|
@@ -180,9 +199,10 @@ export default class Comcigan {
|
|
|
180
199
|
* @param criteria
|
|
181
200
|
*/
|
|
182
201
|
public async GetTimetable(options: GetTimetableOptions): Promise<ComciganTimetable | undefined> {
|
|
183
|
-
const { schoolCode, criteria, grade, classN, without8th } = options;
|
|
202
|
+
const { schoolCode, criteria, grade, classN, without8th, nextWeek } = options;
|
|
203
|
+
const { appVersion } = this._options;
|
|
184
204
|
|
|
185
|
-
const str = `36174_${schoolCode}
|
|
205
|
+
const str = `36174_${schoolCode}_${nextWeek ? 2 : 1}_4_0_3_${appVersion}`;
|
|
186
206
|
const route = (str.substring(9) + str.substring(0, 9)).split("").reverse().join("");
|
|
187
207
|
const data = await this.request<string>(`7813?${route}`, true);
|
|
188
208
|
|
|
@@ -209,7 +229,7 @@ export default class Comcigan {
|
|
|
209
229
|
const o = origin[weekday][period];
|
|
210
230
|
const t = today[weekday][period];
|
|
211
231
|
|
|
212
|
-
if (
|
|
232
|
+
if (o === undefined || t === undefined) {
|
|
213
233
|
weekdayList.push({
|
|
214
234
|
"subject": "-",
|
|
215
235
|
"teacher": "-"
|
|
@@ -222,8 +242,8 @@ export default class Comcigan {
|
|
|
222
242
|
|
|
223
243
|
if (o === t) {
|
|
224
244
|
weekdayList.push({
|
|
225
|
-
"subject": originSubject,
|
|
226
|
-
"teacher": originTeacher
|
|
245
|
+
"subject": this.unusable(originSubject, json.과목명) ?? "-",
|
|
246
|
+
"teacher": this.unusable(originTeacher, json.성명) ?? "-"
|
|
227
247
|
});
|
|
228
248
|
continue;
|
|
229
249
|
}
|
|
@@ -232,11 +252,11 @@ export default class Comcigan {
|
|
|
232
252
|
const changedTeacher = json.성명[this.mTh(t, sep) % sep];
|
|
233
253
|
|
|
234
254
|
weekdayList.push({
|
|
235
|
-
"subject":
|
|
236
|
-
"teacher":
|
|
255
|
+
"subject": this.unusable(changedSubject, json.과목명) ?? "-",
|
|
256
|
+
"teacher": this.unusable(changedTeacher, json.성명) ?? "-",
|
|
237
257
|
"original": {
|
|
238
|
-
"subject":
|
|
239
|
-
"teacher":
|
|
258
|
+
"subject": this.unusable(originSubject, json.과목명) ?? "-",
|
|
259
|
+
"teacher": this.unusable(originTeacher, json.성명) ?? "-",
|
|
240
260
|
}
|
|
241
261
|
});
|
|
242
262
|
}
|