Скрипт автоматически выгружает расписание группы с сайта МГТУ и синхронизирует его в Google Calendar для одного или нескольких пользователей
- Парсит расписание по коду группы с https://timetable.magtu.ru
- Учитывает четность недели
- Создает или обновляет пары в Google Calendar
- Удаляет устаревшие события (которых больше нет в актуальном расписании)
- Пропускает дни, которые отмечены как государственные праздники в календаре РФ
- Поддерживает индивидуальные цвета типов занятий для каждого пользователя
parser.py- парсер расписанияgoogle_sync.py- синхронизация событий в Google Calendarutils/config.py- загрузка конфигурации из.envusers.json- список пользователей и их параметровcredentials.json- ключ Service Account Google (не публиковать)
- Python 3.10+
- Google Cloud проект с включенным Google Calendar API
- Service Account с JSON-ключом
- Доступ Service Account к календарям пользователей
- Клонируйте репозиторий и перейдите в папку проекта
- Создайте виртуальное окружение
- Установите зависимости
pip install -r requirements.txt- В Google Cloud создайте Service Account.
- Включите Google Calendar API.
- Скачайте ключ в JSON и положите его в корень проекта как
credentials.json. - Для каждого календаря, куда нужно писать события, дайте доступ сервисному аккаунту (с правом изменения событий).
Пример сервисного аккаунта:
calendar-bot@magtu-timetable.iam.gserviceaccount.com
При первом запуске проект автоматически создаст .env, если файла нет.
Стандартные значения:
USERS_FILE=users.json
CRED_PATH=credentials.json{
"user@example.com": {
"group": "АВб-25-2_2",
"colors": {
"Лекция": "10",
"Практика": "6",
"Лабораторная": "4"
}
}
}Где ключ верхнего уровня (user@example.com) - это calendarId целевого календаря.
Поддерживаемые значения colorId:
1- Лаванда (Фиолетовый)2- Шалфей (Серый)3- Виноград (Фиолетовый)4- Фламинго (Красный)5- Банан (Желтый)6- Мандарин (Оранжевый)7- Павлин (Синий)8- Графит (Черный)9- Черника (Синий)10- Базилик (Зеленый)11- Помидор (Красный)
Может есть больше цветов, но эти точно работают. Рекомендуется использовать разные цвета для разных типов занятий (лекция, практика, лаба) для лучшей визуальной организации
Одноразовая синхронизация для всех пользователей из users.json:
python google_sync.pyСценарий синхронизирует текущую и следующую учебную неделю, используя уникальный ключ занятия.
Если занятие уже есть в календаре - оно обновляется. Если занятия нет - создается. Если занятие удалено из расписания - удаляется из календаря.
-
403 Forbiddenили404 Not Foundпри записи в календарь- Проверьте, что календарь открыт для сервисного аккаунта.
-
Пустое расписание
- Проверьте корректность кода группы в
users.json.
- Проверьте корректность кода группы в
-
Ошибка чтения
.env- Убедитесь, что файл существует и содержит корректные пути.
- Не публикуйте
credentials.jsonв открытый доступ. - Добавьте секреты в
.gitignore(если еще не добавлены).