zdu-student-api 1.1.0 → 1.1.2
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 +2 -2
- package/package.json +12 -5
- package/dist/audience/index.d.ts +0 -0
- package/dist/audience/index.js +0 -1
- package/dist/cabinet/index.js +0 -1
- package/dist/constants.js +0 -67
- package/dist/examples.js +0 -3
- package/dist/index.js +0 -3
- package/dist/schedule/http.d.ts +0 -0
- package/dist/schedule/http.js +0 -1
- package/dist/schedule/index.d.ts +0 -64
- package/dist/schedule/index.js +0 -98
- package/dist/types.js +0 -1
package/README.md
CHANGED
|
@@ -36,13 +36,13 @@ npm install zdu-student-api
|
|
|
36
36
|
import { Schedule, scheduleErrors } from 'zdu-student-api';
|
|
37
37
|
|
|
38
38
|
const schedule = new Schedule();
|
|
39
|
-
schedule.group = '23Бд-СОінф
|
|
39
|
+
schedule.group = '23Бд-СОінф';
|
|
40
40
|
schedule.type = 'group';
|
|
41
41
|
schedule.rosText = true;
|
|
42
42
|
schedule.allStreamComponents = true;
|
|
43
43
|
|
|
44
44
|
try {
|
|
45
|
-
const sc = await
|
|
45
|
+
const sc = await schedule.getSchedule();
|
|
46
46
|
console.log('Розклад:', sc);
|
|
47
47
|
} catch (err: any) {
|
|
48
48
|
console.error(err.message);
|
package/package.json
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zdu-student-api",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
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",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"type": "module",
|
|
9
|
-
"files": [
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
10
12
|
"scripts": {
|
|
11
13
|
"build": "tsc",
|
|
12
14
|
"docs": "typedoc --out docs src",
|
|
13
|
-
"test": "node --loader ts-node/esm src/examples.ts"
|
|
15
|
+
"test": "node --loader ts-node/esm src/examples.ts",
|
|
16
|
+
"publish:all": "npm run build && npm run docs && npm publish"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
".": "./dist/index.js",
|
|
20
|
+
"./schedule": "./dist/schedule/index.js"
|
|
14
21
|
},
|
|
15
22
|
"license": "MIT",
|
|
16
23
|
"repository": {
|
|
@@ -26,7 +33,7 @@
|
|
|
26
33
|
},
|
|
27
34
|
"dependencies": {
|
|
28
35
|
"buffer": "^6.0.3",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
36
|
+
"cross-fetch": "^4.1.0",
|
|
37
|
+
"iconv-lite": "^0.7.0"
|
|
31
38
|
}
|
|
32
39
|
}
|
package/dist/audience/index.d.ts
DELETED
|
File without changes
|
package/dist/audience/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/dist/cabinet/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/dist/constants.js
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
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
|
-
};
|
package/dist/examples.js
DELETED
package/dist/index.js
DELETED
package/dist/schedule/http.d.ts
DELETED
|
File without changes
|
package/dist/schedule/http.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|
package/dist/schedule/index.d.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
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
|
-
}
|
package/dist/schedule/index.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
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
|
-
}
|
package/dist/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|