zdu-student-api 1.1.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 +162 -0
- package/dist/audience/index.d.ts +0 -0
- package/dist/audience/index.js +1 -0
- package/dist/audience.d.ts +68 -0
- package/dist/cabinet/index.d.ts +2 -0
- package/dist/cabinet/index.js +1 -0
- package/dist/cabinet/sesId.d.ts +9 -0
- package/dist/cabinet/types.d.ts +13 -0
- package/dist/constants.d.ts +58 -0
- package/dist/constants.js +67 -0
- package/dist/examples.d.ts +1 -0
- package/dist/examples.js +3 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +3 -0
- package/dist/schedule/http.d.ts +0 -0
- package/dist/schedule/http.js +1 -0
- package/dist/schedule/index.d.ts +64 -0
- package/dist/schedule/index.js +98 -0
- package/dist/schedule.d.ts +117 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.js +1 -0
- package/dist/utility/dops.d.ts +27 -0
- package/dist/utility/groups.d.ts +26 -0
- package/dist/utility/rooms.d.ts +23 -0
- package/dist/utility/teachers.d.ts +29 -0
- package/dist/utility/types-audience.d.ts +25 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# ZDU Student API
|
|
2
|
+
|
|
3
|
+
API для **Житомирського державного університету імені Івана Франка**.
|
|
4
|
+
|
|
5
|
+
Бібліотека надає програмний доступ до відкритих сервісів університету, зокрема:
|
|
6
|
+
|
|
7
|
+
* 📅 розклад занять студентів / викладачів / аудиторій
|
|
8
|
+
* 🚪 зайняті / вільні аудиторії
|
|
9
|
+
* 🏫 списки аудиторій
|
|
10
|
+
* 👥 списки груп
|
|
11
|
+
* 👨🏫 списки викладачів
|
|
12
|
+
|
|
13
|
+
### 🔮 У планах
|
|
14
|
+
|
|
15
|
+
* API кабінету студента
|
|
16
|
+
* оцінки
|
|
17
|
+
* рейтинги
|
|
18
|
+
|
|
19
|
+
> ⚠️ Проєкт **не є офіційним** API університету.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Встановлення
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install zdu-student-api
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Базове використання
|
|
32
|
+
|
|
33
|
+
### Отримання розкладу
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { Schedule, scheduleErrors } from 'zdu-student-api';
|
|
37
|
+
|
|
38
|
+
const schedule = new Schedule();
|
|
39
|
+
schedule.group = '23Бд-СОінф123';
|
|
40
|
+
schedule.type = 'group';
|
|
41
|
+
schedule.rosText = true;
|
|
42
|
+
schedule.allStreamComponents = true;
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const sc = await extraction await schedule.getSchedule();
|
|
46
|
+
console.log('Розклад:', sc);
|
|
47
|
+
} catch (err: any) {
|
|
48
|
+
console.error(err.message);
|
|
49
|
+
console.error(scheduleErrors[JSON.parse(err.message).errorcode]);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Розклад для аудиторії
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
const schedule = new Schedule();
|
|
59
|
+
schedule.roomId = 35;
|
|
60
|
+
schedule.type = 'room';
|
|
61
|
+
schedule.rosText = true;
|
|
62
|
+
|
|
63
|
+
const sc = await schedule.getSchedule();
|
|
64
|
+
console.log(sc);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Довідкові методи
|
|
70
|
+
|
|
71
|
+
### Групи
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { getGroups } from 'zdu-student-api';
|
|
75
|
+
|
|
76
|
+
const groups = await getGroups('25Бд-Комп');
|
|
77
|
+
console.log(groups);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Викладачі
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { getTeachers } from 'zdu-student-api';
|
|
86
|
+
|
|
87
|
+
const teachers = await getTeachers('Кривонос Олександр');
|
|
88
|
+
console.log(teachers);
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
### Аудиторії
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
import { getRooms } from 'zdu-student-api';
|
|
97
|
+
|
|
98
|
+
const rooms = await getRooms('319');
|
|
99
|
+
console.log(rooms);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Типи аудиторій
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import { getTypesAudience } from 'zdu-student-api';
|
|
108
|
+
|
|
109
|
+
const types = await getTypesAudience('Ле');
|
|
110
|
+
console.log(types);
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### Аудиторії за корпусом / гуртожитком
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
import { Audience } from 'zdu-student-api';
|
|
119
|
+
|
|
120
|
+
const audience = new Audience();
|
|
121
|
+
audience.blockName = 'гуртож №3';
|
|
122
|
+
|
|
123
|
+
const audiences = await audience.getAudience();
|
|
124
|
+
console.log(audiences);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### Додаткові параметри (DOPs)
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import { getDops } from 'zdu-student-api';
|
|
133
|
+
|
|
134
|
+
const dops = await getDops();
|
|
135
|
+
console.log(dops);
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### Кабінет студента (WIP)
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
import { getSesId } from 'zdu-student-api';
|
|
144
|
+
|
|
145
|
+
const sessionId = await getSesId('LOGIN', 'PASSWORD');
|
|
146
|
+
console.log(sessionId);
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
> ⚠️ Функціонал у розробці
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Документація
|
|
154
|
+
|
|
155
|
+
📘 API-документація (TypeDoc):
|
|
156
|
+
[https://nicita-3.github.io/zdu-student-api](https://nicita-3.github.io/zdu-student-api)
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Ліцензія
|
|
161
|
+
|
|
162
|
+
MIT © 2025
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { AudienceRoom, Blocks } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Клас розкладу
|
|
4
|
+
* @category Audience
|
|
5
|
+
*/
|
|
6
|
+
export declare class Audience {
|
|
7
|
+
/**
|
|
8
|
+
* Назва корпусу
|
|
9
|
+
*/
|
|
10
|
+
blockName?: Blocks;
|
|
11
|
+
/**
|
|
12
|
+
* Номер пари
|
|
13
|
+
*/
|
|
14
|
+
lesson: number;
|
|
15
|
+
/**
|
|
16
|
+
* Тип аудиторій який є в даному корпусі
|
|
17
|
+
*/
|
|
18
|
+
roomType?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Кількість місць не менше ніж
|
|
21
|
+
*/
|
|
22
|
+
size_min?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Кількість місць не більше ніж
|
|
25
|
+
*/
|
|
26
|
+
size_max?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Дата аудиторії
|
|
29
|
+
*/
|
|
30
|
+
roomsDate: Date;
|
|
31
|
+
/**
|
|
32
|
+
* Наявніть доп. обладнання типу 1, 2, 3, 4, 5, 6, 7, 8
|
|
33
|
+
*/
|
|
34
|
+
dops: number[];
|
|
35
|
+
/**
|
|
36
|
+
* Повертає список аудиторій
|
|
37
|
+
*
|
|
38
|
+
* @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* import { Audience } from "./audience.ts";
|
|
43
|
+
* const audience = new Audience();
|
|
44
|
+
* try {
|
|
45
|
+
* const audiences = await audience.getAudience();
|
|
46
|
+
* console.log("Аудиторії:", audiences); // Поверне список аудиторій
|
|
47
|
+
* } catch (err: any) {
|
|
48
|
+
* console.error(err.message);
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* У `err.message` може повертатися простий текст помилки,
|
|
54
|
+
* або об’єкт у форматі:
|
|
55
|
+
* ```JSON
|
|
56
|
+
* {
|
|
57
|
+
* "error_message": "Текст помилки",
|
|
58
|
+
* "errorcode": "Код помилки"
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* Де:
|
|
63
|
+
* - `error_message` - текст помилки відповідно до {@link scheduleErrors}
|
|
64
|
+
* - `errorcode` - код помилки відповідно до {@link scheduleErrors}
|
|
65
|
+
*/
|
|
66
|
+
getAudience(): Promise<AudienceRoom[]>;
|
|
67
|
+
private encodeCP1251;
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SessionData } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Отримати sesID та sessGUID користувача
|
|
4
|
+
* @category Cabinet
|
|
5
|
+
* @param family - прізвище користувача
|
|
6
|
+
* @param password - пароль
|
|
7
|
+
* @returns Об'єкт { sesID, sessGUID }
|
|
8
|
+
*/
|
|
9
|
+
export declare function getSesId(family: string, password: string): Promise<SessionData>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sesID та sessGUID користувача
|
|
3
|
+
* @category Cabinet
|
|
4
|
+
* @remarks
|
|
5
|
+
* - `ok` — Успіх отримання токену
|
|
6
|
+
* - `sesID` — Айді сесії
|
|
7
|
+
* - `sessGUID` — Унікальний token у cookie для ідентифікації сесії
|
|
8
|
+
*/
|
|
9
|
+
export interface SessionData {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
sesID: string;
|
|
12
|
+
sessGUID: string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Faculty } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Список факультетів університету.
|
|
4
|
+
* @category Schedule
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* - `none`: { id: 0, name: 'Оберіть факультет' }
|
|
8
|
+
* - `physicsMath`: { id: 1001, name: 'Фізико-математичний факультет' }
|
|
9
|
+
* - `philologyJournalism`: { id: 1002, name: 'Навчально-науковий інститут філології та журналістики' }
|
|
10
|
+
* - `historyLawPublic`: { id: 1003, name: 'Факультет історії, права та публічного управління' }
|
|
11
|
+
* - `foreignPhilology`: { id: 1004, name: 'Навчально-науковий інститут іноземної філології' }
|
|
12
|
+
* - `natural`: { id: 1005, name: 'Природничий факультет' }
|
|
13
|
+
* - `pedagogy`: { id: 1006, name: 'Навчально-науковий інститут педагогіки' }
|
|
14
|
+
* - `socialPsychology`: { id: 1007, name: 'Соціально-психологічний факультет' }
|
|
15
|
+
* - `physicalEducation`: { id: 1008, name: 'Факультет фізичного виховання і спорту' }
|
|
16
|
+
* - `preUniversityCenter`: { id: 1009, name: 'Центр доуніверситетської освіти та освіти дорослих' }
|
|
17
|
+
* - `partTime`: { id: 1010, name: 'Заочна форма навчання' }
|
|
18
|
+
* - `postgraduate`: { id: 1011, name: 'Відділ аспірантури та докторантури' }
|
|
19
|
+
* - `scientificLyceum`: { id: 1012, name: 'Науковий ліцей' }
|
|
20
|
+
*/
|
|
21
|
+
export declare const faculties: Record<string, Faculty>;
|
|
22
|
+
/**
|
|
23
|
+
* Список помилок для розкладу.
|
|
24
|
+
* @category Schedule
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* Ключі — числові коди помилок.
|
|
28
|
+
* Значення — опис помилки.
|
|
29
|
+
*
|
|
30
|
+
* Коди помилок:
|
|
31
|
+
* - -200: Не має доступу до сервера або помилка доступу до бази даних
|
|
32
|
+
* - -100: Помилка у роботі модуля, зверніться до розробника
|
|
33
|
+
* - -90: Об`єкт, для якого потрібно показати розклад, не знайдено
|
|
34
|
+
* - -80: Неправильний режим (помилка у параметрі req_mode або req_type)
|
|
35
|
+
* - -70: Помилка у датах
|
|
36
|
+
* - -60: Помилка у параметрах
|
|
37
|
+
* - -7: Зараз відбувається технічне обслуговування бази, робота тимчасово неможлива!
|
|
38
|
+
* - -6: Вигрузка всього розкладу разом заборонена Адмiнiстратором
|
|
39
|
+
* - -5: Технічні роботи на сервері
|
|
40
|
+
* - -4: За даним запитом нічого не знайдено
|
|
41
|
+
* - -3: Перегляд розкладу на вказані дати заблоковано адміністратором (Розклад у процесі складання і ще не готовий для демонстрації)
|
|
42
|
+
* - -2: Перегляд розкладу заблоковано адміністратором (Розклад у процесі складання і ще не готовий для демонстрації)
|
|
43
|
+
* - -1: Розклад у базі відсутній
|
|
44
|
+
*/
|
|
45
|
+
export declare const scheduleErrors: Record<number, string>;
|
|
46
|
+
/**
|
|
47
|
+
* Тип розкладу.
|
|
48
|
+
* @category Schedule
|
|
49
|
+
*
|
|
50
|
+
* @remarks
|
|
51
|
+
* Типи: group, teacher, room.
|
|
52
|
+
*/
|
|
53
|
+
export declare const scheduleTypes: Record<string, string>;
|
|
54
|
+
/**
|
|
55
|
+
* Блоки
|
|
56
|
+
* @category Audience
|
|
57
|
+
*/
|
|
58
|
+
export declare const blocks: Record<string, string>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Список факультетів університету.
|
|
3
|
+
* - `none`: { id: 0, name: "Оберіть факультет" }
|
|
4
|
+
* - `physicsMath`: { id: 1001, name: "Фізико-математичний факультет" }
|
|
5
|
+
* - `philologyJournalism`: { id: 1002, name: "Навчально-науковий інститут філології та журналістики" }
|
|
6
|
+
* - `historyLawPublic`: { id: 1003, name: "Факультет історії, права та публічного управління" }
|
|
7
|
+
* - `foreignPhilology`: { id: 1004, name: "Навчально-науковий інститут іноземної філології" }
|
|
8
|
+
* - `natural`: { id: 1005, name: "Природничий факультет" }
|
|
9
|
+
* - `pedagogy`: { id: 1006, name: "Навчально-науковий інститут педагогіки" }
|
|
10
|
+
* - `socialPsychology`: { id: 1007, name: "Соціально-психологічний факультет" }
|
|
11
|
+
* - `physicalEducation`: { id: 1008, name: "Факультет фізичного виховання і спорту" }
|
|
12
|
+
* - `preUniversityCenter`: { id: 1009, name: "Центр доуніверситетської освіти та освіти дорослих" }
|
|
13
|
+
* - `partTime`: { id: 1010, name: "Заочна форма навчання" }
|
|
14
|
+
* - `postgraduate`: { id: 1011, name: "Відділ аспірантури та докторантури" }
|
|
15
|
+
* - `scientificLyceum`: { id: 1012, name: "Науковий ліцей" }
|
|
16
|
+
*/
|
|
17
|
+
export const faculties = {
|
|
18
|
+
none: { id: 0, name: "Оберіть факультет" },
|
|
19
|
+
physicsMath: { id: 1001, name: "Фізико-математичний факультет" },
|
|
20
|
+
philologyJournalism: { id: 1002, name: "Навчально-науковий інститут філології та журналістики" },
|
|
21
|
+
historyLawPublic: { id: 1003, name: "Факультет історії, права та публічного управління" },
|
|
22
|
+
foreignPhilology: { id: 1004, name: "Навчально-науковий інститут іноземної філології" },
|
|
23
|
+
natural: { id: 1005, name: "Природничий факультет" },
|
|
24
|
+
pedagogy: { id: 1006, name: "Навчально-науковий інститут педагогіки" },
|
|
25
|
+
socialPsychology: { id: 1007, name: "Соціально-психологічний факультет" },
|
|
26
|
+
physicalEducation: { id: 1008, name: "Факультет фізичного виховання і спорту" },
|
|
27
|
+
preUniversityCenter: { id: 1009, name: "Центр доуніверситетської освіти та освіти дорослих" },
|
|
28
|
+
partTime: { id: 1010, name: "Заочна форма навчання" },
|
|
29
|
+
postgraduate: { id: 1011, name: "Відділ аспірантури та докторантури" },
|
|
30
|
+
scientificLyceum: { id: 1012, name: "Науковий ліцей" }
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Список помилок для розкладу.
|
|
34
|
+
*
|
|
35
|
+
* Ключі — числові коди помилок.
|
|
36
|
+
* Значення — опис помилки.
|
|
37
|
+
*
|
|
38
|
+
* Коди помилок:
|
|
39
|
+
* - -200: Не має доступу до сервера або помилка доступу до бази даних
|
|
40
|
+
* - -100: Помилка у роботі модуля, зверніться до розробника
|
|
41
|
+
* - -90: Об`єкт, для якого потрібно показати розклад, не знайдено
|
|
42
|
+
* - -80: Неправильний режим (помилка у параметрі req_mode або req_type)
|
|
43
|
+
* - -70: Помилка у датах
|
|
44
|
+
* - -60: Помилка у параметрах
|
|
45
|
+
* - -7: Зараз відбувається технічне обслуговування бази, робота тимчасово неможлива!
|
|
46
|
+
* - -6: Вигрузка всього розкладу разом заборонена Адмiнiстратором
|
|
47
|
+
* - -5: Технічні роботи на сервері
|
|
48
|
+
* - -4: За даним запитом нічого не знайдено
|
|
49
|
+
* - -3: Перегляд розкладу на вказані дати заблоковано адміністратором (Розклад у процесі складання і ще не готовий для демонстрації)
|
|
50
|
+
* - -2: Перегляд розкладу заблоковано адміністратором (Розклад у процесі складання і ще не готовий для демонстрації)
|
|
51
|
+
* - -1: Розклад у базі відсутній
|
|
52
|
+
*/
|
|
53
|
+
export const scheduleErrors = {
|
|
54
|
+
[-200]: "Не має доступу до сервера або помилка доступу до бази даних",
|
|
55
|
+
[-100]: "Помилка у роботі модуля, зверніться до розробника",
|
|
56
|
+
[-90]: "Об`єкт, для якого потрібно показати розклад, не знайдено",
|
|
57
|
+
[-80]: "Неправильний режим (помилка у параметрі req_mode або req_type)",
|
|
58
|
+
[-70]: "Помилка у датах",
|
|
59
|
+
[-60]: "Помилка у параметрах",
|
|
60
|
+
[-7]: "Зараз відбувається технічне обслуговування бази, робота тимчасово неможлива!",
|
|
61
|
+
[-6]: "Вигрузка всього розкладу разом заборонена Адмiнiстратором",
|
|
62
|
+
[-5]: "Технічні роботи на сервері",
|
|
63
|
+
[-4]: "За даним запитом нічого не знайдено",
|
|
64
|
+
[-3]: "Перегляд розкладу на вказані дати заблоковано адміністратором (Розклад у процесі складання і ще не готовий для демонстрації)",
|
|
65
|
+
[-2]: "Перегляд розкладу заблоковано адміністратором (Розклад у процесі складання і ще не готовий для демонстрації)",
|
|
66
|
+
[-1]: "Розклад у базі відсутній"
|
|
67
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/examples.js
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./schedule.ts";
|
|
2
|
+
export * from "./types.ts";
|
|
3
|
+
export * from "./constants.ts";
|
|
4
|
+
export * from "./utility/groups.ts";
|
|
5
|
+
export * from "./utility/rooms.ts";
|
|
6
|
+
export * from "./utility/teachers.ts";
|
|
7
|
+
export * from "./audience.ts";
|
|
8
|
+
export * from "./utility/types-audience.ts";
|
|
9
|
+
export * from "./utility/dops.ts";
|
|
10
|
+
export * from "./cabinet/index.ts";
|
package/dist/index.js
ADDED
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Faculty } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Клас розкладу
|
|
4
|
+
*/
|
|
5
|
+
export declare class Schedule {
|
|
6
|
+
/**
|
|
7
|
+
* Група
|
|
8
|
+
*/
|
|
9
|
+
group: string;
|
|
10
|
+
/**
|
|
11
|
+
* Факультет.
|
|
12
|
+
*
|
|
13
|
+
* Можна призначити одну з констант з `faculties`, наприклад:
|
|
14
|
+
* ```ts
|
|
15
|
+
* schedule.faculty = faculties.physicsMath;
|
|
16
|
+
* console.log(schedule.faculty.id); // 1001
|
|
17
|
+
* console.log(schedule.faculty.name); // "Фізико-математичний факультет"
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
faculty: Faculty;
|
|
21
|
+
/**
|
|
22
|
+
* Викладач
|
|
23
|
+
*/
|
|
24
|
+
teacher: string;
|
|
25
|
+
/**
|
|
26
|
+
* Курс
|
|
27
|
+
*
|
|
28
|
+
* `0` - не вибрано
|
|
29
|
+
*/
|
|
30
|
+
course: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
31
|
+
/**
|
|
32
|
+
* Початкова дата розкладу
|
|
33
|
+
*/
|
|
34
|
+
beginDate: Date;
|
|
35
|
+
/**
|
|
36
|
+
* Кінцева дата розкладу (за промовчанням +7 днів)
|
|
37
|
+
*/
|
|
38
|
+
endDate: Date;
|
|
39
|
+
/**
|
|
40
|
+
* Показувати пусті дні - false
|
|
41
|
+
*/
|
|
42
|
+
showEmpty: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* false - сформований текст (за промовчанням)
|
|
45
|
+
* true - окремі стовпчики
|
|
46
|
+
*/
|
|
47
|
+
private _rosText;
|
|
48
|
+
/**
|
|
49
|
+
* Показувати повний склад потоку (тільки для rosText=true)
|
|
50
|
+
*/
|
|
51
|
+
allStreamComponents: boolean;
|
|
52
|
+
set rosText(value: boolean);
|
|
53
|
+
get rosText(): boolean;
|
|
54
|
+
constructor();
|
|
55
|
+
/**
|
|
56
|
+
* Повертає список груп
|
|
57
|
+
*/
|
|
58
|
+
getGroups(): Promise<string[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Повертає список викладачів
|
|
61
|
+
*/
|
|
62
|
+
getTeachers(): Promise<string[]>;
|
|
63
|
+
getSchedule(): Promise<string>;
|
|
64
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import iconv from 'iconv-lite';
|
|
2
|
+
import fetch from 'node-fetch';
|
|
3
|
+
import { Buffer } from 'buffer';
|
|
4
|
+
import { faculties } from "../constants";
|
|
5
|
+
/**
|
|
6
|
+
* Клас розкладу
|
|
7
|
+
*/
|
|
8
|
+
export class Schedule {
|
|
9
|
+
/**
|
|
10
|
+
* Група
|
|
11
|
+
*/
|
|
12
|
+
group = '';
|
|
13
|
+
/**
|
|
14
|
+
* Факультет.
|
|
15
|
+
*
|
|
16
|
+
* Можна призначити одну з констант з `faculties`, наприклад:
|
|
17
|
+
* ```ts
|
|
18
|
+
* schedule.faculty = faculties.physicsMath;
|
|
19
|
+
* console.log(schedule.faculty.id); // 1001
|
|
20
|
+
* console.log(schedule.faculty.name); // "Фізико-математичний факультет"
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
faculty = faculties.none;
|
|
24
|
+
/**
|
|
25
|
+
* Викладач
|
|
26
|
+
*/
|
|
27
|
+
teacher = '';
|
|
28
|
+
/**
|
|
29
|
+
* Курс
|
|
30
|
+
*
|
|
31
|
+
* `0` - не вибрано
|
|
32
|
+
*/
|
|
33
|
+
course = 0;
|
|
34
|
+
/**
|
|
35
|
+
* Початкова дата розкладу
|
|
36
|
+
*/
|
|
37
|
+
beginDate = new Date();
|
|
38
|
+
/**
|
|
39
|
+
* Кінцева дата розкладу (за промовчанням +7 днів)
|
|
40
|
+
*/
|
|
41
|
+
endDate = new Date(this.beginDate.getTime() + 7 * 24 * 60 * 60 * 1000);
|
|
42
|
+
/**
|
|
43
|
+
* Показувати пусті дні - false
|
|
44
|
+
*/
|
|
45
|
+
showEmpty = false;
|
|
46
|
+
/**
|
|
47
|
+
* false - сформований текст (за промовчанням)
|
|
48
|
+
* true - окремі стовпчики
|
|
49
|
+
*/
|
|
50
|
+
_rosText = false;
|
|
51
|
+
/**
|
|
52
|
+
* Показувати повний склад потоку (тільки для rosText=true)
|
|
53
|
+
*/
|
|
54
|
+
allStreamComponents = false;
|
|
55
|
+
set rosText(value) {
|
|
56
|
+
this._rosText = value;
|
|
57
|
+
// Якщо rosText = false, блокувати allStreamComponents
|
|
58
|
+
if (!value) {
|
|
59
|
+
this.allStreamComponents = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
get rosText() {
|
|
63
|
+
return this._rosText;
|
|
64
|
+
}
|
|
65
|
+
constructor() {
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Повертає список груп
|
|
69
|
+
*/
|
|
70
|
+
async getGroups() {
|
|
71
|
+
const url = 'https://dekanat.zu.edu.ua/cgi-bin/groups.cgi'; // приклад
|
|
72
|
+
const response = await fetch(url);
|
|
73
|
+
const buffer = await response.arrayBuffer(); // отримуємо raw data
|
|
74
|
+
const text = iconv.decode(Buffer.from(buffer), 'windows-1251'); // конвертуємо в UTF-8
|
|
75
|
+
// Тут треба парсити текст і витягувати групи, наприклад через регулярки
|
|
76
|
+
const groups = text.match(/<option value=".*?">(.*?)<\/option>/g)?.map(opt => opt.replace(/<.*?>/g, '').trim()) || [];
|
|
77
|
+
return groups;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Повертає список викладачів
|
|
81
|
+
*/
|
|
82
|
+
async getTeachers() {
|
|
83
|
+
const url = 'https://dekanat.zu.edu.ua/cgi-bin/teachers.cgi';
|
|
84
|
+
const response = await fetch(url);
|
|
85
|
+
const buffer = await response.arrayBuffer();
|
|
86
|
+
const text = iconv.decode(Buffer.from(buffer), 'windows-1251');
|
|
87
|
+
const teachers = text.match(/<option value=".*?">(.*?)<\/option>/g)?.map(opt => opt.replace(/<.*?>/g, '').trim()) || [];
|
|
88
|
+
return teachers;
|
|
89
|
+
}
|
|
90
|
+
async getSchedule() {
|
|
91
|
+
const url = `https://dekanat.zu.edu.ua/cgi-bin/timetable_export.cgi?group=${this.group}&faculty=${this.faculty.id}`;
|
|
92
|
+
const response = await fetch(url);
|
|
93
|
+
const buffer = await response.arrayBuffer();
|
|
94
|
+
const text = iconv.decode(Buffer.from(buffer), 'windows-1251');
|
|
95
|
+
// Тут треба парсити HTML/JSON розкладу
|
|
96
|
+
return text;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { BaseLesson, DetailedLesson, Faculty, ScheduleTypes } from './types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Клас розкладу
|
|
4
|
+
* @category Schedule
|
|
5
|
+
*/
|
|
6
|
+
export declare class Schedule {
|
|
7
|
+
/**
|
|
8
|
+
* Тип розкладу.
|
|
9
|
+
*
|
|
10
|
+
* Типи: group, teacher, room.
|
|
11
|
+
*/
|
|
12
|
+
type: ScheduleTypes;
|
|
13
|
+
/**
|
|
14
|
+
* Група
|
|
15
|
+
*/
|
|
16
|
+
group: string;
|
|
17
|
+
/**
|
|
18
|
+
* Id групи
|
|
19
|
+
*/
|
|
20
|
+
groupId?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Викладач
|
|
23
|
+
*/
|
|
24
|
+
teacher: string;
|
|
25
|
+
/**
|
|
26
|
+
* Id викладача
|
|
27
|
+
*/
|
|
28
|
+
teacherId?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Аудиторія
|
|
31
|
+
*/
|
|
32
|
+
room: string;
|
|
33
|
+
/**
|
|
34
|
+
* Id аудиторії
|
|
35
|
+
*/
|
|
36
|
+
roomId?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Факультет.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* Можна призначити одну з констант з `faculties`, наприклад:
|
|
42
|
+
* ```ts
|
|
43
|
+
* schedule.faculty = faculties.physicsMath;
|
|
44
|
+
* console.log(schedule.faculty.id); // 1001
|
|
45
|
+
* console.log(schedule.faculty.name); // 'Фізико-математичний факультет'
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
faculty: Faculty;
|
|
49
|
+
/**
|
|
50
|
+
* Курс
|
|
51
|
+
*
|
|
52
|
+
* `0` - не вибрано
|
|
53
|
+
*/
|
|
54
|
+
course: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
55
|
+
/**
|
|
56
|
+
* Початкова дата розкладу
|
|
57
|
+
*/
|
|
58
|
+
beginDate: Date;
|
|
59
|
+
/**
|
|
60
|
+
* Кінцева дата розкладу (за промовчанням +7 днів)
|
|
61
|
+
*/
|
|
62
|
+
endDate: Date;
|
|
63
|
+
/**
|
|
64
|
+
* Показувати пусті дні - false
|
|
65
|
+
*/
|
|
66
|
+
showEmpty: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* false - сформований текст (за промовчанням)
|
|
69
|
+
* true - окремі стовпчики
|
|
70
|
+
*/
|
|
71
|
+
private _rosText;
|
|
72
|
+
/**
|
|
73
|
+
* Показувати повний склад потоку (тільки для rosText=true)
|
|
74
|
+
*/
|
|
75
|
+
allStreamComponents: boolean;
|
|
76
|
+
set rosText(value: boolean);
|
|
77
|
+
get rosText(): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Повертає список пар (розклад)
|
|
80
|
+
*
|
|
81
|
+
* @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import { Schedule, scheduleErrors } from "./index.ts";
|
|
86
|
+
* const schedule = new Schedule();
|
|
87
|
+
* schedule.group = '23Бд-СОінф123' // встановлюєм неправильну назву групи
|
|
88
|
+
* schedule.type = 'group' // встановлєм тип пошуку по групі
|
|
89
|
+
* schedule.rosText = true; // встановлюєм окремі стовпчики
|
|
90
|
+
* schedule.allStreamComponents = true; // встановлюєм повний склад потоку
|
|
91
|
+
* try {
|
|
92
|
+
* const mySchedule = await schedule.getSchedule();
|
|
93
|
+
* console.log("Розклад:", mySchedule);
|
|
94
|
+
* } catch (err: any) {
|
|
95
|
+
* // Отримуєм помилку тому що ми неправильно вказали назву групи
|
|
96
|
+
* console.error(err.message); // Поверне: "{"error_message":"Об‘єкт - 23Бд-СОінф123 - Об‘єкт не знайдено ","errorcode":"-90"}"
|
|
97
|
+
* console.error(scheduleErrors[JSON.parse(err.message).errorcode]); // Поверне: "Об`єкт, для якого потрібно показати розклад, не знайдено"
|
|
98
|
+
* }
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @remarks
|
|
102
|
+
* У `err.message` може повертатися простий текст помилки,
|
|
103
|
+
* або об’єкт у форматі:
|
|
104
|
+
* ```JSON
|
|
105
|
+
* {
|
|
106
|
+
* "error_message": "Текст помилки",
|
|
107
|
+
* "errorcode": "Код помилки"
|
|
108
|
+
* }
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* Де:
|
|
112
|
+
* - `error_message` - текст помилки відповідно до {@link scheduleErrors}
|
|
113
|
+
* - `errorcode` - код помилки відповідно до {@link scheduleErrors}
|
|
114
|
+
*/
|
|
115
|
+
getSchedule(): Promise<DetailedLesson[] | BaseLesson[]>;
|
|
116
|
+
private encodeCP1251;
|
|
117
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Факультет
|
|
3
|
+
* @category Schedule
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* - `id` — Числовий ідентифікатор факультету
|
|
7
|
+
* - `name` — Повна назва факультету
|
|
8
|
+
*/
|
|
9
|
+
export interface Faculty {
|
|
10
|
+
name: string;
|
|
11
|
+
id: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Група
|
|
15
|
+
* @category Schedule
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* - `name` — Повна назва групи
|
|
19
|
+
* - `id` — Ідентифікатор групи
|
|
20
|
+
* - `faculty` — Повна назва факультету
|
|
21
|
+
*/
|
|
22
|
+
export interface Group {
|
|
23
|
+
name: string;
|
|
24
|
+
id: string;
|
|
25
|
+
faculty: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Викладач
|
|
29
|
+
* @category Schedule
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* - `name` — Ім'я викладача в форматі Прізвище І.П.
|
|
33
|
+
* - `id` — Ідентифікатор викладача
|
|
34
|
+
* - `faculty` — Повна назва факультету
|
|
35
|
+
* - `surname` — Прізвище
|
|
36
|
+
* - `firstname` — Ім'я
|
|
37
|
+
* - `lastname` — По батькові
|
|
38
|
+
*/
|
|
39
|
+
export interface Teacher {
|
|
40
|
+
name: string;
|
|
41
|
+
id: string;
|
|
42
|
+
faculty: string;
|
|
43
|
+
surname: string;
|
|
44
|
+
firstname: string;
|
|
45
|
+
lastname: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Аудиторія
|
|
49
|
+
* @category Schedule
|
|
50
|
+
*
|
|
51
|
+
* @remarks
|
|
52
|
+
* - `name` — Назва аудиторії
|
|
53
|
+
* - `id` — Ідентифікатор аудиторії
|
|
54
|
+
* - `block` — Назва блоку (гуртожиток/корпус), до якого належить аудиторія
|
|
55
|
+
*/
|
|
56
|
+
export interface Room {
|
|
57
|
+
name: string;
|
|
58
|
+
id: string;
|
|
59
|
+
block: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Типи для отримання розкладу.
|
|
63
|
+
* @category Schedule
|
|
64
|
+
*
|
|
65
|
+
*/
|
|
66
|
+
export type ScheduleTypes = 'group' | 'teacher' | 'room';
|
|
67
|
+
/**
|
|
68
|
+
* Базова інформація про заняття
|
|
69
|
+
* @category Schedule
|
|
70
|
+
*
|
|
71
|
+
* @remarks
|
|
72
|
+
* - `object` — Назва групи, аудиторія, викладач
|
|
73
|
+
* - `date` — Дата проведення заняття у форматі DD.MM.YYYY
|
|
74
|
+
* - `comment` — Коментар до заняття
|
|
75
|
+
* - `lesson_number` — Номер пари за розкладом (1–6)
|
|
76
|
+
* - `lesson_name` — Назва пари
|
|
77
|
+
* - `lesson_time` — Час проведення пари, наприклад "10:30-11:50"
|
|
78
|
+
* - `lesson_description` — Повний текстовий опис пари (rosText = false)
|
|
79
|
+
* - `stream_components` — ID груп потоку (цифрові коди), через кому
|
|
80
|
+
*/
|
|
81
|
+
export interface BaseLesson {
|
|
82
|
+
object: string;
|
|
83
|
+
date: string;
|
|
84
|
+
comment: string;
|
|
85
|
+
lesson_number: string;
|
|
86
|
+
lesson_name: string;
|
|
87
|
+
lesson_time: string;
|
|
88
|
+
lesson_description?: string;
|
|
89
|
+
stream_components?: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Детальна інформація про заняття
|
|
93
|
+
* Розділена на окремі поля (rosText = true)
|
|
94
|
+
* @category Schedule
|
|
95
|
+
*
|
|
96
|
+
* @remarks
|
|
97
|
+
* - `half` — Номер підгрупи
|
|
98
|
+
* - `teacher` — Основний викладач
|
|
99
|
+
* - `teachers_add` — Додаткові викладачі
|
|
100
|
+
* - `room` — Аудиторія, наприклад "319/№1"
|
|
101
|
+
* - `group` — Список груп, які відвідують заняття
|
|
102
|
+
* - `title` — Повна назва предмету або його код
|
|
103
|
+
* - `type` — Тип заняття
|
|
104
|
+
* - `replacement` — Позначка про заміну пари
|
|
105
|
+
* - `online` — Чи є онлайн-посилання / онлайн-режим
|
|
106
|
+
* - `comment4link` — Коментар до посилання (іноді використовується для Zoom/Meet)
|
|
107
|
+
* - `link` — Посилання на онлайн-заняття
|
|
108
|
+
*/
|
|
109
|
+
export interface DetailedLesson extends BaseLesson {
|
|
110
|
+
half: string;
|
|
111
|
+
teacher: string;
|
|
112
|
+
teachers_add: string;
|
|
113
|
+
room: string;
|
|
114
|
+
group: string;
|
|
115
|
+
title: string;
|
|
116
|
+
type: string;
|
|
117
|
+
replacement: string;
|
|
118
|
+
reservation: string;
|
|
119
|
+
online: string;
|
|
120
|
+
comment4link: string;
|
|
121
|
+
link: string;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Аудиторія
|
|
125
|
+
* @category Audience
|
|
126
|
+
*
|
|
127
|
+
* @remarks
|
|
128
|
+
* - `name` — Назва аудиторії
|
|
129
|
+
* - `block` — Назва блоку
|
|
130
|
+
* - `type` — Тип аудиторії
|
|
131
|
+
* - `places` — Кількість місць
|
|
132
|
+
* - `comment` — Коментар до аудиторії
|
|
133
|
+
*/
|
|
134
|
+
export interface AudienceRoom {
|
|
135
|
+
name: string;
|
|
136
|
+
block: string;
|
|
137
|
+
type: string;
|
|
138
|
+
places: string;
|
|
139
|
+
comment: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Блоки
|
|
143
|
+
* @category Audience
|
|
144
|
+
*/
|
|
145
|
+
export type Blocks = '' | '№1' | '№2' | '№3' | '№4' | '№5' | 'гуртож №1' | 'гуртож №2' | 'гуртож №3' | 'гуртож №4' | 'гуртож №5';
|
|
146
|
+
/**
|
|
147
|
+
* Тип аудиторії
|
|
148
|
+
* @category Audience
|
|
149
|
+
*/
|
|
150
|
+
export interface TypeAudience {
|
|
151
|
+
full: string;
|
|
152
|
+
short: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Доп. обладнання
|
|
156
|
+
* @category Audience
|
|
157
|
+
*/
|
|
158
|
+
export interface Dop {
|
|
159
|
+
name: string;
|
|
160
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Dop } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Повертає список доп. обладнання аудиторій
|
|
4
|
+
* @category Utility
|
|
5
|
+
*
|
|
6
|
+
* @param query - Рядок пошуку доп. обладнання
|
|
7
|
+
* @returns Масив доп. обладнання
|
|
8
|
+
*
|
|
9
|
+
* @deprecated Ця функція не використовується і повертає безкорисливі данні.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* console.log((await getDops()));
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* Виведе:
|
|
18
|
+
* ```JSON
|
|
19
|
+
* [
|
|
20
|
+
* {
|
|
21
|
+
* name: 'Не використовується',
|
|
22
|
+
* ...
|
|
23
|
+
* }
|
|
24
|
+
* ]
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function getDops(query?: string): Promise<Dop[]>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Group } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Повертає список груп
|
|
4
|
+
* @category Utility
|
|
5
|
+
*
|
|
6
|
+
* @param query - Рядок пошуку групи
|
|
7
|
+
* @returns Масив груп
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* console.log((await getGroups('23Бд-СОінф')));
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Виведе:
|
|
16
|
+
* ```JSON
|
|
17
|
+
* [
|
|
18
|
+
* {
|
|
19
|
+
* name: '23Бд-СОінф',
|
|
20
|
+
* id: '-3158',
|
|
21
|
+
* faculty: 'Фізико-математичний факультет'
|
|
22
|
+
* }
|
|
23
|
+
* ]
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function getGroups(query?: string): Promise<Group[]>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Room } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Повертає список аудиторій
|
|
4
|
+
* @category Utility
|
|
5
|
+
*
|
|
6
|
+
* @param query - Рядок пошуку аудиторії
|
|
7
|
+
* @returns Масив аудиторій
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* console.log((await getRooms('319')));
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Виведе:
|
|
16
|
+
* ```JSON
|
|
17
|
+
* [
|
|
18
|
+
* { name: '319/№1', id: '35', block: '№1' },
|
|
19
|
+
* { name: '319/№3', id: '270', block: '№3' }
|
|
20
|
+
* ]
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function getRooms(query?: string): Promise<Room[]>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Teacher } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Повертає список викладачів
|
|
4
|
+
* @category Utility
|
|
5
|
+
*
|
|
6
|
+
* @param query - Рядок пошуку викладача
|
|
7
|
+
* @returns Масив викладачів
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* console.log((await getTeachers('Кривонос Олександр')));
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Виведе:
|
|
16
|
+
* ```JSON
|
|
17
|
+
* [
|
|
18
|
+
* {
|
|
19
|
+
* name: 'Кривонос О.М.',
|
|
20
|
+
* id: '420',
|
|
21
|
+
* faculty: 'Кафедра комп’ютерних наук та інформаційних технологій',
|
|
22
|
+
* surname: 'Кривонос',
|
|
23
|
+
* firstname: 'Олександр',
|
|
24
|
+
* lastname: 'Миколайович'
|
|
25
|
+
* }
|
|
26
|
+
* ]
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function getTeachers(query?: string): Promise<Teacher[]>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { TypeAudience } from "../types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Повертає список типів аудиторій
|
|
4
|
+
* @category Utility
|
|
5
|
+
*
|
|
6
|
+
* @param query - Рядок пошуку типу
|
|
7
|
+
* @returns Масив типів аудиторій
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* console.log((await getTypesAudience('Ле')));
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* Виведе:
|
|
16
|
+
* ```JSON
|
|
17
|
+
* [
|
|
18
|
+
* {
|
|
19
|
+
* full: 'Лекція',
|
|
20
|
+
* short: 'лек'
|
|
21
|
+
* }
|
|
22
|
+
* ]
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function getTypesAudience(query?: string): Promise<TypeAudience[]>;
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zdu-student-api",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "API client for ZDU student services",
|
|
5
|
+
"author": "Nicita3 <ni596157@gmail.com> (https://github.com/Nicita-3)",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"files": ["dist"],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"docs": "typedoc --out docs src",
|
|
13
|
+
"test": "node --loader ts-node/esm src/examples.ts"
|
|
14
|
+
},
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/Nicita-3/zdu-student-api"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://nicita-3.github.io/zdu-student-api",
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@types/node": "^24.10.1",
|
|
23
|
+
"ts-node": "^10.9.2",
|
|
24
|
+
"typedoc": "^0.28.14",
|
|
25
|
+
"typescript": "^5.9.3"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"buffer": "^6.0.3",
|
|
29
|
+
"iconv-lite": "^0.7.0",
|
|
30
|
+
"node-fetch": "^3.3.2"
|
|
31
|
+
}
|
|
32
|
+
}
|