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 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Бд-СОінф123';
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 extraction await schedule.getSchedule();
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.0",
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": ["dist"],
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
- "iconv-lite": "^0.7.0",
30
- "node-fetch": "^3.3.2"
36
+ "cross-fetch": "^4.1.0",
37
+ "iconv-lite": "^0.7.0"
31
38
  }
32
39
  }
File without changes
@@ -1 +0,0 @@
1
- "use strict";
@@ -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
@@ -1,3 +0,0 @@
1
- import { Schedule } from "./index";
2
- const schedule = new Schedule();
3
- console.log((await schedule.getGroups()));
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- export * from "./schedule";
2
- export * from "./types";
3
- export * from "./constants";
File without changes
@@ -1 +0,0 @@
1
- "use strict";
@@ -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
- }
@@ -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 {};