From 3b7d052fa3cdd3fdcfe8e6360f293cdb8e719e9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D1=81=D0=B8=D0=BD=D0=B5=D1=87=D0=BA=D0=B0=20=E2=99=A1?= <63897347+ktnk-dev@users.noreply.github.com> Date: Sat, 21 Sep 2024 16:25:10 +0300 Subject: [PATCH] Add files via upload --- parse.py | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 parse.py diff --git a/parse.py b/parse.py new file mode 100644 index 0000000..a41ee87 --- /dev/null +++ b/parse.py @@ -0,0 +1,110 @@ +import json +import openpyxl.cell +import requests +from importlib import reload + +import openpyxl +from openpyxl import load_workbook +import config + + +def update(group: str, course: str): + files = json.load(open('files.json', 'r', encoding='utf-8')) + url = files[group][course] + + response = requests.get(url, stream=True) + + print(f'\n{group} ({course})') + with open("temp/table.xlsx", "wb") as handle: + for data in response.iter_content(): + handle.write(data) + + result = {} + book = load_workbook('./temp/table.xlsx', data_only = True).active + for c in 'CDEFGHIJKLMNOPQRSTUVWXYZ': + try: typename = book[f'{c}8'].value.replace(' ','') + except: continue + if not typename: continue + # if c != 'D': continue #test + + print(f'├── {typename}') + result[typename] = {} + + last_day = '' + last_delta = '' + last_lesson = '' + + this = {} + + for r in range(9, 99): + day = book[f'A{r}'].value + if day: day = day.capitalize() + delta = book[f'B{r}'].value + lesson = book[f'{c}{r}'].value + + if day == 'Суббота': break + + if delta: + SS, EE = delta.split('-')[0], delta.split('-')[1] + if len(SS) == 3: SS = f'{SS[0]}:{SS[1]}{SS[2]}' + else: SS = f'{SS[0]}{SS[1]}:{SS[2]}{SS[3]}' + + if len(EE) == 3: EE = f'{EE[0]}:{EE[1]}{EE[2]}' + else: EE = f'{EE[0]}{EE[1]}:{EE[2]}{EE[3]}' + delta = f'{SS} - {EE}' + + # print(f'{c}{r}', day, delta, 'Lesson text...' if lesson else 'None', book[f'{c}{r}']) + + if day or delta or (lesson) or (not lesson and type(book[f'{c}{r}']) != openpyxl.cell.MergedCell): + if day and day != last_day: + last_day = day + this[last_day] = {} + + if delta and delta != last_delta: + last_delta = delta + this[last_day][last_delta] = [] + + if lesson and lesson != last_lesson: + + last_lesson = lesson + lessonOBJ = {'type': '', 'name': '', 'info': [], 'raw': lesson, 'ok': True} + if lesson[0] == '*': + lessonOBJ['ok'] = False + this[last_day][last_delta].append(lessonOBJ) + continue + lessonOBJ['name'] = lesson.split('\n')[0] + try: lessonOBJ['type'] = lesson.split('\n')[1].split(' ')[0] + except: + lessonOBJ['ok'] = False + this[last_day][last_delta].append(lessonOBJ) + continue + + addInfo = ' '.join(lesson.split('\n')[2:]).replace(' ', '$') + if len(lesson.split('\n')[1].split(' ')) > 1: + addInfo = ' '.join(lesson.split('\n')[1].split(' ')[1:]).replace(' ', '$') + '$$' + addInfo + for info in addInfo.split('$'): + if info == '' or info == ' ': continue + while (info[0] == ' ' or info[-1] == ' '): + if info[0] == ' ': info = info[1:] + elif info[-1] == ' ': info = info[:-1] + lessonOBJ['info'].append(info) + this[last_day][last_delta].append(lessonOBJ) + else: this[last_day][last_delta].append(None) + + + + result[typename] = this + print(f'└──── Downloaded \n') + json.dump(result, open(f'./timetables/{group} {course}.json'.replace(' ','_'), 'w', encoding='utf-8'), ensure_ascii=False, indent=4) + + + +def updateAll(): + global config + config = reload(config) + + for group, courses in config.LOAD.items(): + for course in courses: + update(group, course) + +updateAll() \ No newline at end of file