102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
import datetime
|
|
import logging
|
|
|
|
from requests import get
|
|
|
|
import settings
|
|
|
|
fields = [
|
|
'discipline',
|
|
'building',
|
|
'auditorium',
|
|
'date_start',
|
|
'date_end',
|
|
'lecturer_profiles',
|
|
'stream_links'
|
|
]
|
|
|
|
|
|
class RUZ:
|
|
|
|
def reformat_data(self, col):
|
|
for data in col:
|
|
date_start = datetime.datetime.strptime(data['date_start'], "%Y-%m-%dT%H:%M:%SZ")
|
|
date_end = datetime.datetime.strptime(data['date_end'], "%Y-%m-%dT%H:%M:%SZ")
|
|
data['date'] = date_start.strftime("%Y.%m.%d")
|
|
data['beginLesson'] = date_start.strftime("%H:%M")
|
|
data['endLesson'] = date_end.strftime("%H:%M")
|
|
try:
|
|
data['lecturer'] = data['lecturer_profiles'][0]["full_name"]
|
|
except:
|
|
data['lecturer'] = 'Неизвестный преподаватель'
|
|
try:
|
|
data['url1'] = data['stream_links'][0]['link']
|
|
except:
|
|
data['url1'] = None
|
|
del data['date_start']
|
|
del data['date_end']
|
|
del data['lecturer_profiles']
|
|
del data['stream_links']
|
|
|
|
def get_schedule(self, user: dict, begin_date: datetime.datetime):
|
|
start_date_str = begin_date.strftime("%Y.%m.%d")
|
|
search_str = settings.RUZ_API + f"v3/ruz/lessons?start={start_date_str}&offset=30&email={user['email']}"
|
|
try:
|
|
data = get(search_str)
|
|
except:
|
|
return None
|
|
if data.status_code != 200:
|
|
return None
|
|
try:
|
|
data = data.json()
|
|
except:
|
|
logging.info("Json ignored, data content is")
|
|
logging.info(data.content)
|
|
return None
|
|
formatted_data = [
|
|
{
|
|
field: element.get(field)
|
|
for field in fields
|
|
}
|
|
for element in data
|
|
]
|
|
self.reformat_data(formatted_data)
|
|
return formatted_data
|
|
|
|
def _name_weekday(self, weekday: int) -> str:
|
|
if weekday == 0:
|
|
return "Понедельник"
|
|
if weekday == 1:
|
|
return "Вторник"
|
|
if weekday == 2:
|
|
return "Среда"
|
|
if weekday == 3:
|
|
return "Четверг"
|
|
if weekday == 4:
|
|
return "Пятница"
|
|
if weekday == 5:
|
|
return "Суббота"
|
|
return "Воскресенье"
|
|
|
|
def schedule_builder(self, lessons: list[dict]) -> str:
|
|
ans = ""
|
|
last_date = None
|
|
for lesson in lessons:
|
|
date = lesson['begin'].strftime('%d.%m')
|
|
if date != last_date:
|
|
if last_date is not None:
|
|
ans += "=======================\n\n"
|
|
last_date = date
|
|
ans += f"📅 *{date} {self._name_weekday(lesson['begin'].weekday())}*\n\n"
|
|
ans += f"📚 {lesson['discipline']}\n"
|
|
ans += f"🏢 {lesson['building']}, {lesson['auditorium']}\n"
|
|
ans += f"🕑 {lesson['begin'].strftime('%H:%M')} - {lesson['end'].strftime('%H:%M')}\n"
|
|
ans += f"👨🏫 {(lesson['lecturer'] or 'Неизвестно')}\n"
|
|
if lesson.get('link', None):
|
|
ans += f"🔗 {lesson['link']}\n"
|
|
ans += "\n"
|
|
return ans
|
|
|
|
|
|
ruz = RUZ()
|