zdu-student-api 1.1.4 → 1.1.6
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 +23 -12
- package/dist/audience.d.ts +45 -45
- package/dist/audience.js +50 -48
- package/dist/cabinet/cabinet.d.ts +79 -0
- package/dist/cabinet/cabinet.js +162 -0
- package/dist/cabinet/data.d.ts +37 -0
- package/dist/cabinet/data.js +69 -0
- package/dist/cabinet/disciplines.d.ts +19 -0
- package/dist/cabinet/disciplines.js +87 -0
- package/dist/cabinet/index.d.ts +6 -2
- package/dist/cabinet/index.js +6 -2
- package/dist/cabinet/parsers.d.ts +18 -0
- package/dist/cabinet/parsers.js +166 -0
- package/dist/cabinet/scores.d.ts +12 -0
- package/dist/cabinet/scores.js +101 -0
- package/dist/cabinet/sesId.d.ts +5 -4
- package/dist/cabinet/sesId.js +17 -16
- package/dist/cabinet/types.d.ts +139 -2
- package/dist/cabinet/utils.d.ts +8 -0
- package/dist/cabinet/utils.js +22 -0
- package/dist/cabinet/validSession.d.ts +8 -0
- package/dist/cabinet/validSession.js +29 -0
- package/dist/constants.d.ts +50 -50
- package/dist/constants.js +55 -52
- package/dist/examples.js +55 -12
- package/dist/index.d.ts +10 -10
- package/dist/index.js +10 -10
- package/dist/schedule.d.ts +63 -63
- package/dist/schedule.js +75 -69
- package/dist/types.d.ts +13 -13
- package/dist/types.js +0 -1
- package/dist/utility/dops.d.ts +1 -1
- package/dist/utility/groups.d.ts +1 -1
- package/dist/utility/rooms.d.ts +1 -1
- package/dist/utility/teachers.d.ts +1 -1
- package/dist/utility/types-audience.d.ts +1 -1
- package/package.json +2 -1
package/dist/schedule.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
import iconv from 'iconv-lite';
|
|
2
2
|
import fetch from 'cross-fetch';
|
|
3
|
-
import { faculties } from './constants';
|
|
3
|
+
import { faculties } from './constants.js';
|
|
4
4
|
/**
|
|
5
5
|
* Клас розкладу
|
|
6
6
|
* @category Schedule
|
|
7
7
|
*/
|
|
8
8
|
export class Schedule {
|
|
9
9
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
* Тип розкладу.
|
|
11
|
+
*
|
|
12
|
+
* Типи: group, teacher, room.
|
|
13
|
+
*/
|
|
14
14
|
type = 'group';
|
|
15
15
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
* Група
|
|
17
|
+
*/
|
|
18
18
|
group = '';
|
|
19
19
|
/**
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
* Id групи
|
|
21
|
+
*/
|
|
22
22
|
groupId;
|
|
23
23
|
/**
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
* Викладач
|
|
25
|
+
*/
|
|
26
26
|
teacher = '';
|
|
27
27
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
* Id викладача
|
|
29
|
+
*/
|
|
30
30
|
teacherId;
|
|
31
31
|
/**
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
* Аудиторія
|
|
33
|
+
*/
|
|
34
34
|
room = '';
|
|
35
35
|
/**
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
* Id аудиторії
|
|
37
|
+
*/
|
|
38
38
|
roomId;
|
|
39
39
|
/**
|
|
40
40
|
* Факультет.
|
|
@@ -49,22 +49,22 @@ export class Schedule {
|
|
|
49
49
|
*/
|
|
50
50
|
faculty = faculties.none;
|
|
51
51
|
/**
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
* Курс
|
|
53
|
+
*
|
|
54
|
+
* `0` - не вибрано
|
|
55
|
+
*/
|
|
56
56
|
course = 0;
|
|
57
57
|
/**
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
* Початкова дата розкладу
|
|
59
|
+
*/
|
|
60
60
|
beginDate = new Date();
|
|
61
61
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
* Кінцева дата розкладу (за промовчанням +7 днів)
|
|
63
|
+
*/
|
|
64
64
|
endDate = new Date(this.beginDate.getTime() + 7 * 24 * 60 * 60 * 1000);
|
|
65
65
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
* Показувати пусті дні - false
|
|
67
|
+
*/
|
|
68
68
|
showEmpty = false;
|
|
69
69
|
/**
|
|
70
70
|
* false - сформований текст (за промовчанням)
|
|
@@ -84,69 +84,75 @@ export class Schedule {
|
|
|
84
84
|
return this._rosText;
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
87
|
+
* Повертає список пар (розклад)
|
|
88
|
+
*
|
|
89
|
+
* @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* import { Schedule, scheduleErrors } from "./index.ts";
|
|
94
|
+
* const schedule = new Schedule();
|
|
95
|
+
* schedule.group = '23Бд-СОінф123' // встановлюєм неправильну назву групи
|
|
96
|
+
* schedule.type = 'group' // встановлєм тип пошуку по групі
|
|
97
|
+
* schedule.rosText = true; // встановлюєм окремі стовпчики
|
|
98
|
+
* schedule.allStreamComponents = true; // встановлюєм повний склад потоку
|
|
99
|
+
* try {
|
|
100
|
+
* const mySchedule = await schedule.getSchedule();
|
|
101
|
+
* console.log("Розклад:", mySchedule);
|
|
102
|
+
* } catch (err: any) {
|
|
103
|
+
* // Отримуєм помилку тому що ми неправильно вказали назву групи
|
|
104
|
+
* console.error(err.message); // Поверне: "{"error_message":"Об‘єкт - 23Бд-СОінф123 - Об‘єкт не знайдено ","errorcode":"-90"}"
|
|
105
|
+
* console.error(scheduleErrors[JSON.parse(err.message).errorcode]); // Поверне: "Об`єкт, для якого потрібно показати розклад, не знайдено"
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* @remarks
|
|
110
|
+
* У `err.message` може повертатися простий текст помилки,
|
|
111
|
+
* або об’єкт у форматі:
|
|
112
|
+
* ```JSON
|
|
113
|
+
* {
|
|
114
|
+
* "error_message": "Текст помилки",
|
|
115
|
+
* "errorcode": "Код помилки"
|
|
116
|
+
* }
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* Де:
|
|
120
|
+
* - `error_message` - текст помилки відповідно до {@link scheduleErrors}
|
|
121
|
+
* - `errorcode` - код помилки відповідно до {@link scheduleErrors}
|
|
122
|
+
*/
|
|
123
123
|
async getSchedule() {
|
|
124
124
|
const beginDate = this.beginDate.toLocaleDateString('uk-UA', {
|
|
125
125
|
day: '2-digit',
|
|
126
126
|
month: '2-digit',
|
|
127
|
-
year: 'numeric'
|
|
127
|
+
year: 'numeric',
|
|
128
128
|
});
|
|
129
129
|
const endDate = this.endDate.toLocaleDateString('uk-UA', {
|
|
130
130
|
day: '2-digit',
|
|
131
131
|
month: '2-digit',
|
|
132
|
-
year: 'numeric'
|
|
132
|
+
year: 'numeric',
|
|
133
133
|
});
|
|
134
|
-
let id =
|
|
134
|
+
let id = this.type === 'group'
|
|
135
|
+
? this.groupId
|
|
136
|
+
: this.type === 'teacher'
|
|
137
|
+
? this.teacherId
|
|
138
|
+
: this.roomId;
|
|
135
139
|
if (!id)
|
|
136
140
|
id = '';
|
|
137
|
-
let name =
|
|
141
|
+
let name = this.type === 'group' ? this.group : this.type === 'teacher' ? this.teacher : this.room;
|
|
138
142
|
name = this.encodeCP1251(name);
|
|
139
143
|
const response = await fetch(`https://dekanat.zu.edu.ua/cgi-bin/timetable_export.cgi?req_type=rozklad&req_mode=${this.type}&OBJ_ID=${id}&OBJ_name=${name}&dep_name=&begin_date=${beginDate}&end_date=${endDate}&ros_text=${this.rosText ? 'separated' : 'united'}${this.showEmpty ? '' : '&show_empty=yes'}${this.allStreamComponents ? '' : '&all_stream_components=yes'}&req_format=json&coding_mode=UTF8&bs=%D1%F4%EE%F0%EC%F3%E2%E0%F2%E8+%E7%E0%EF%E8%F2`);
|
|
140
144
|
if (!response.ok)
|
|
141
145
|
throw new Error(`HTTP error ${response.status}: ${response.statusText}`);
|
|
142
146
|
const data = await response.json();
|
|
143
147
|
if (data.psrozklad_export.code !== '0') {
|
|
144
|
-
throw new Error(JSON.stringify(data.psrozklad_export.error) ||
|
|
148
|
+
throw new Error(JSON.stringify(data.psrozklad_export.error) || 'Unknown error');
|
|
145
149
|
}
|
|
146
150
|
return data.psrozklad_export.roz_items;
|
|
147
151
|
}
|
|
148
152
|
encodeCP1251(str) {
|
|
149
153
|
const buf = iconv.encode(str, 'win1251');
|
|
150
|
-
return Array.from(buf)
|
|
154
|
+
return Array.from(buf)
|
|
155
|
+
.map((b) => '%' + b.toString(16).toUpperCase().padStart(2, '0'))
|
|
156
|
+
.join('');
|
|
151
157
|
}
|
|
152
158
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -59,10 +59,10 @@ export interface Room {
|
|
|
59
59
|
block: string;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Типи для отримання розкладу.
|
|
63
|
-
* @category Schedule
|
|
64
|
-
*
|
|
65
|
-
*/
|
|
62
|
+
* Типи для отримання розкладу.
|
|
63
|
+
* @category Schedule
|
|
64
|
+
*
|
|
65
|
+
*/
|
|
66
66
|
export type ScheduleTypes = 'group' | 'teacher' | 'room';
|
|
67
67
|
/**
|
|
68
68
|
* Базова інформація про заняття
|
|
@@ -139,22 +139,22 @@ export interface AudienceRoom {
|
|
|
139
139
|
comment: string;
|
|
140
140
|
}
|
|
141
141
|
/**
|
|
142
|
-
* Блоки
|
|
143
|
-
* @category Audience
|
|
144
|
-
*/
|
|
142
|
+
* Блоки
|
|
143
|
+
* @category Audience
|
|
144
|
+
*/
|
|
145
145
|
export type Blocks = '' | '№1' | '№2' | '№3' | '№4' | '№5' | 'гуртож №1' | 'гуртож №2' | 'гуртож №3' | 'гуртож №4' | 'гуртож №5';
|
|
146
146
|
/**
|
|
147
|
-
* Тип аудиторії
|
|
148
|
-
* @category Audience
|
|
149
|
-
*/
|
|
147
|
+
* Тип аудиторії
|
|
148
|
+
* @category Audience
|
|
149
|
+
*/
|
|
150
150
|
export interface TypeAudience {
|
|
151
151
|
full: string;
|
|
152
152
|
short: string;
|
|
153
153
|
}
|
|
154
154
|
/**
|
|
155
|
-
* Доп. обладнання
|
|
156
|
-
* @category Audience
|
|
157
|
-
*/
|
|
155
|
+
* Доп. обладнання
|
|
156
|
+
* @category Audience
|
|
157
|
+
*/
|
|
158
158
|
export interface Dop {
|
|
159
159
|
name: string;
|
|
160
160
|
}
|
package/dist/types.js
CHANGED
package/dist/utility/dops.d.ts
CHANGED
package/dist/utility/groups.d.ts
CHANGED
package/dist/utility/rooms.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zdu-student-api",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "API client for ZDU student services",
|
|
5
5
|
"author": "Nicita3 <ni596157@gmail.com> (https://github.com/Nicita-3)",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"homepage": "https://nicita-3.github.io/zdu-student-api",
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^24.10.1",
|
|
26
|
+
"prettier": "^3.7.4",
|
|
26
27
|
"ts-node": "^10.9.2",
|
|
27
28
|
"typedoc": "^0.28.14",
|
|
28
29
|
"typescript": "^5.9.3"
|