Gefined get_full_schedule function.

This commit is contained in:
Rhinemann 2023-05-04 19:46:37 +03:00
parent 0f127d9efa
commit 378feec148
3 changed files with 161 additions and 157 deletions

View File

@ -1,6 +1,6 @@
[ [
{ {
"12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"} "12:20": {"name": "Культура мовлення та ділове мовлення (лекція)", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"}
}, },
{ {
}, },

View File

@ -1,14 +1,5 @@
## code ## ## code ##
if (self.MESSAGE["text"].lower() == "!пара" or self.MESSAGE["text"].lower().split()[0] == "!пари"): def get_full_schedule():
#getting current time
current_time = datetime.datetime.now()
current_week = current_time.isocalendar()[1] % 2
current_day = current_time.weekday()
current_seconds = current_week*604800 + current_day*86400 + current_time.hour*3600 + current_time.minute*60 + current_time.second
reference_time = int(current_time.strftime("%s")) - current_seconds
# baking defined schedule # baking defined schedule
raw_schedule = json.loads( readfile(self.path + "schedule.json") ) raw_schedule = json.loads( readfile(self.path + "schedule.json") )
schedule = {} schedule = {}
@ -30,34 +21,79 @@ if (self.MESSAGE["text"].lower() == "!пара" or self.MESSAGE["text"].lower().
schedule[ts] = new_item schedule[ts] = new_item
full_schedule = dict(list(schedule.items()) + list(additions.items())) full_schedule = dict(list(schedule.items()) + list(additions.items()))
return full_schedule
if self.MESSAGE["text"].lower() == "!пара": if (self.MESSAGE["text"].lower() == "!пара" or self.MESSAGE["text"].lower().split()[0] == "!пари"):
print("test1")
print(f"Full schedule printout: {full_schedule}")
print(f"Current delta_time: {current_seconds}")
p = None
next_lesson_time = None
key_list = list(full_schedule.keys()) #getting current time
key_list.sort() current_time = datetime.datetime.now()
for i in key_list:
if i > current_seconds - 5400: current_week = current_time.isocalendar()[1] % 2
p = full_schedule[i] current_day = current_time.weekday()
next_lesson_time = i current_seconds = current_week*604800 + current_day*86400 + current_time.hour*3600 + current_time.minute*60 + current_time.second
break reference_time = int(current_time.strftime("%s")) - current_seconds
full_schedule = get_full_schedule()
print("test2") if self.MESSAGE["text"].lower() == "!пара":
if next_lesson_time == None: print("test1")
actual_lesson_ts = reference_time + min(full_schedule.keys()) print(f"Full schedule printout: {full_schedule}")
dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts) print(f"Current delta_time: {current_seconds}")
dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400) lesson = None
next_lesson_time = None
if len(full_schedule.keys()) > 0: key_list = list(full_schedule.keys())
print("test3.1") key_list.sort()
p = full_schedule[min(full_schedule.keys())] for i in key_list:
print("test3.1.1") if i > current_seconds - 5400:
lesson = full_schedule[i]
next_lesson_time = i
break
print("{} == 6 && {} == 1, {}".format(current_day, dt_lesson.strftime('%u'), str( ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")) ))) print("test2")
if next_lesson_time == None:
actual_lesson_ts = reference_time + min(full_schedule.keys())
dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts)
dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400)
if len(full_schedule.keys()) > 0:
print("test3.1")
lesson = full_schedule[min(full_schedule.keys())]
print("test3.1.1")
print("{} == 6 && {} == 1, {}".format(current_day, dt_lesson.strftime('%u'), str( ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")) )))
human_readable_date = ""
if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(dt_lesson.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1])
elif current_day != (int(dt_lesson.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
print("test3.1.2")
human_readable_date += "з "
print("test3.1.3")
human_readable_date += dt_lesson.strftime("%H:%M")
print("test3.1.4")
human_readable_date += " до "
human_readable_date += dt_lesson_finish.strftime("%H:%M")
self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(lesson['name'], human_readable_date, lesson['teacher'], lesson['link'])
print("test3.1.5")
else:
self.RESPONCE = "Пар немає взагалі. Ми вільні!"
else:
print("test3.2")
actual_lesson_ts = reference_time + next_lesson_time
dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts)
dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400)
human_readable_date = "" human_readable_date = ""
if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")):
@ -69,119 +105,87 @@ if self.MESSAGE["text"].lower() == "!пара":
else: else:
human_readable_date += "сьогодні " human_readable_date += "сьогодні "
print("test3.1.2")
human_readable_date += "з " human_readable_date += "з "
print("test3.1.3")
human_readable_date += dt_lesson.strftime("%H:%M") human_readable_date += dt_lesson.strftime("%H:%M")
print("test3.1.4")
human_readable_date += " до " human_readable_date += " до "
human_readable_date += dt_lesson_finish.strftime("%H:%M") human_readable_date += dt_lesson_finish.strftime("%H:%M")
self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(lesson['name'], human_readable_date, lesson['teacher'], lesson['link'])
print("test3.1.5")
else:
self.RESPONCE = "Пар немає взагалі. Ми вільні!"
else: if self.MESSAGE["text"].lower().split()[0] == "!пари":
print("test3.2") command = self.MESSAGE["text"].lower().split()
actual_lesson_ts = reference_time + next_lesson_time
dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts)
dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400)
human_readable_date = "" preferences = {"name": True, "date": True, "teacher": True, "link": True}
if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")): selected_day = current_week*7 + current_day
human_readable_date += "завтра "
elif current_week != int(dt_lesson.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1])
elif current_day != (int(dt_lesson.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
human_readable_date += "з " if len(command) >= 2 and len(command[1]) > 0:
human_readable_date += dt_lesson.strftime("%H:%M") if command[1][0] == "+":
try:
selected_day += int(command[1][1:])
except Exception as e:
print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}")
elif command[1][0] == "-":
try:
selected_day -= int(command[1][1:])
except Exception as e:
print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}")
else:
try:
selected_day = int(command[1])
except Exception as e:
print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}")
human_readable_date += " до " # keeping day in bounds
human_readable_date += dt_lesson_finish.strftime("%H:%M") selected_day = selected_day % 14
self.RESPONCE = "Актуальна пара: {}\nДата: {}\nВикладач: {}\nПосилання на пару: {}".format(p['name'], human_readable_date, p['teacher'], p['link']) if len(command) > 2:
for i in command[2:]:
if len(i) >= 2:
if i[1:] in preferences:
if i[0] == "+":
preferences[i[1:]] = True
elif i[0] == "-":
preferences[i[1:]] = False
if self.MESSAGE["text"].lower().split()[0] == "!пари": found_lessons = {}
command = self.MESSAGE["text"].lower().split() for i in full_schedule:
if selected_day*86400 <= i < (selected_day+1)*86400:
found_lessons[i] = dict(full_schedule[i])
preferences = {"name": True, "date": True, "teacher": True, "link": True} result_text = f"Пари у {self.WEEKDAYS_ACCUSATIVE[selected_day%7]}:\n\n"
selected_day = current_week*7 + current_day for i in found_lessons:
actual_lesson_ts = reference_time + i
dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts)
dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400)
lesson = found_lessons[i]
if len(command) >= 2 and len(command[1]) > 0: human_readable_date = ""
if command[1][0] == "+": if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")):
try: human_readable_date += "завтра "
selected_day += int(command[1][1:]) elif current_week != int(dt_lesson.strftime("%W")) % 2:
except Exception as e: human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1])
print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}") elif current_day != (int(dt_lesson.strftime("%u")) - 1):
elif command[1][0] == "-": human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1])
try: else:
selected_day -= int(command[1][1:]) human_readable_date += "сьогодні "
except Exception as e:
print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}")
else:
try:
selected_day = int(command[1])
except Exception as e:
print(f"[auto-schedule-pro:error] Got exception '{e}' while parsing {command[1]}")
# keeping day in bounds human_readable_date += "з "
selected_day = selected_day % 14 human_readable_date += dt_lesson.strftime("%H:%M")
if len(command) > 2: human_readable_date += " до "
for i in command[2:]: human_readable_date += dt_lesson_finish.strftime("%H:%M")
if len(i) >= 2:
if i[1:] in preferences:
if i[0] == "+":
preferences[i[1:]] = True
elif i[0] == "-":
preferences[i[1:]] = False
found_lessons = {}
for i in full_schedule:
if selected_day*86400 <= i < (selected_day+1)*86400:
found_lessons[i] = dict(full_schedule[i])
result_text = f"Пари у {self.WEEKDAYS_ACCUSATIVE[selected_day%7]}:\n\n"
for i in found_lessons:
actual_lesson_ts = reference_time + i
dt_lesson = datetime.datetime.fromtimestamp(actual_lesson_ts)
dt_lesson_finish = datetime.datetime.fromtimestamp(actual_lesson_ts + 5400)
p = found_lessons[i]
human_readable_date = ""
if ((current_day + 2) == int(dt_lesson.strftime("%u"))) or ((str(current_day) == "6") and (dt_lesson.strftime("%u") == "1")):
human_readable_date += "завтра "
elif current_week != int(dt_lesson.strftime("%W")) % 2:
human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_NEXT[int(dt_lesson.strftime("%u")) - 1])
elif current_day != (int(dt_lesson.strftime("%u")) - 1):
human_readable_date += "{} ".format(self.WEEKDAYS_GENITIVE_THIS[int(dt_lesson.strftime("%u")) - 1])
else:
human_readable_date += "сьогодні "
human_readable_date += "з "
human_readable_date += dt_lesson.strftime("%H:%M")
human_readable_date += " до "
human_readable_date += dt_lesson_finish.strftime("%H:%M")
if preferences['name']: if preferences['name']:
result_text += f"Назва: {p['name']}\n" result_text += f"Назва: {lesson['name']}\n"
if preferences['date']: if preferences['date']:
result_text += f"Дата: {human_readable_date}\n" result_text += f"Дата: {human_readable_date}\n"
if preferences['teacher']: if preferences['teacher']:
result_text += f"Викладач: {p['teacher']}\n" result_text += f"Викладач: {lesson['teacher']}\n"
if preferences['link']: if preferences['link']:
result_text += f"Посилання на пару: {p['link']}\n" result_text += f"Посилання на пару: {lesson['link']}\n"
result_text += "\n" result_text += "\n"
self.RESPONCE = result_text self.RESPONCE = result_text

View File

@ -1,52 +1,52 @@
[ [
{ {
"8:30": {"name": "Дискретна математика", "teacher": "Новотарський М. А.", "link": "https://us02web.zoom.us/j/87578307057?pwd=UGwyVGlwc3M4Q0Q0Q0NLWUt6bmVpUT09"}, "8:30": {"name": "Дискретна математика (лекція)", "teacher": "Новотарський М. А.", "link": "https://us02web.zoom.us/j/87578307057?pwd=UGwyVGlwc3M4Q0Q0Q0NLWUt6bmVpUT09"},
"10:25": {"name": "Комп'ютерна логіка", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-osi-lup-ou8"}, "10:25": {"name": "Комп'ютерна логіка (лекція)", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-osi-lup-ou8"},
"12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Онуфрієнко О. П.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} "12:20": {"name": "Культура мовлення та ділове мовлення (лекція)", "teacher": "Онуфрієнко О. П.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}
}, },
{ {
"12:20": {"name": "Практичний курс іноземної мови. Частина 1", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"}, "12:20": {"name": "Практичний курс іноземної мови. Частина 1 (практика)", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"},
"14:15": {"name": "Фізика", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} "14:15": {"name": "Фізика (лабораторна)", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}
}, },
{ {
"8:30": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}, "8:30": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування (лабораторна)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"},
"10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} "10:25": {"name": "Вища математика (практика)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}
}, },
{ {
"10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, "10:25": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
"12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, "12:20": {"name": "Фізика (лекція)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
"14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування (лекція)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
}, },
{ {
"10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, "10:25": {"name": "Фізика (практика)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
"12:20": {"name": "Дискретна математика", "teacher": "Пономаренко А. М.", "link": "https://us05web.zoom.us/j/7089075754?pwd=TWRlZmxyVlFiTWU1UGlVVU1XcFE0Zz09"}, "12:20": {"name": "Дискретна математика (лабораторна)", "teacher": "Пономаренко А. М.", "link": "https://us05web.zoom.us/j/7089075754?pwd=TWRlZmxyVlFiTWU1UGlVVU1XcFE0Zz09"},
"14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"} "14:15": {"name": "Основи здорового способу життя (практика)", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"}
}, },
{}, {},
{}, {},
{ {
"8:30": {"name": "Дискретна математика", "teacher": "Новотарський М. А.", "link": "https://us02web.zoom.us/j/87578307057?pwd=UGwyVGlwc3M4Q0Q0Q0NLWUt6bmVpUT09"}, "8:30": {"name": "Дискретна математика (лекція)", "teacher": "Новотарський М. А.", "link": "https://us02web.zoom.us/j/87578307057?pwd=UGwyVGlwc3M4Q0Q0Q0NLWUt6bmVpUT09"},
"10:25": {"name": "Комп'ютерна логіка", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-osi-lup-ou8"}, "10:25": {"name": "Комп'ютерна логіка (лекція)", "teacher": "Жабін В. І.", "link": "https://bbb.comsys.kpi.ua/b/val-2vb-o7w-y5y АБО https://bbb.ugrid.org/b/val-osi-lup-ou8"},
"12:20": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} "12:20": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}
}, },
{ {
"8:30": {"name": "Комп'ютерна логіка", "teacher": "Верба О. А.", "link": "https://us04web.zoom.us/j/7382214783?pwd=RnZ3SWgwK1JoVkZtNndnKzdPZjFGdz09"}, "8:30": {"name": "Комп'ютерна логіка (лабораторна)", "teacher": "Верба О. А.", "link": "https://us04web.zoom.us/j/7382214783?pwd=RnZ3SWgwK1JoVkZtNndnKzdPZjFGdz09"},
"10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, "10:25": {"name": "Вища математика (практика)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
"12:20": {"name": "Практичний курс іноземної мови. Частина 1", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"}, "12:20": {"name": "Практичний курс іноземної мови. Частина 1 (практика)", "teacher": "Шевченко О. М.", "link": "https://meet.google.com/bwg-pdnr-evh"},
"14:15": {"name": "Фізика", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"} "14:15": {"name": "Фізика (лабораторна)", "teacher": "Федотов В. В. & Іванова І. М.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!"}
}, },
{ {
"10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"} "10:25": {"name": "Вища математика (практика)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}
}, },
{ {
"10:25": {"name": "Вища математика", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"}, "10:25": {"name": "Вища математика (лекція)", "teacher": "Ординська З. П.", "link": "https://us04web.zoom.us/j/2684350438?pwd=kiOi3BrgbJHeYvkrx7qaSxa08J8m8O.1"},
"12:20": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, "12:20": {"name": "Фізика (лекція)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
"14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"} "14:15": {"name": "Програмування. Частина 2. Об'єктно-орієнтоване програмування (лекція)", "teacher": "Алещенко О. В.", "link": "https://us02web.zoom.us/j/2711546637?pwd=Ry82RHp3SjV6WTZRMXl6WUNod25hUT09"}
}, },
{ {
"10:25": {"name": "Фізика", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"}, "10:25": {"name": "Фізика (практика)", "teacher": "Русаков В. Ф.", "link": "В житті не буває нічого вічного. Життя мінливе, як і посилання на кожну нову пару. Щасти вам його віднайти!", "container_id": "1"},
"12:20": {"name": "Культура мовлення та ділове мовлення", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"}, "12:20": {"name": "Культура мовлення та ділове мовлення (практика)", "teacher": "Кушлаба М. П.", "link": "https://bbb.comsys.kpi.ua/b/myk-0iw-red-p01"},
"14:15": {"name": "Основи здорового способу життя", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"} "14:15": {"name": "Основи здорового способу життя (практика)", "teacher": "Соболенко А. І.", "link": "https://zoom.us/j/2035574145?pwd=bk1wTVhGbjJsQTR4WmVQMlROWFBCZz09"}
}, },
{}, {},
{} {}