Браузерное расширение (Chrome, Manifest V3), которое сканирует страницу
расписания в личном кабинете ИТМО (my.itmo.ru) и экспортирует его в файл
.ics для импорта в Google Calendar.
- На странице расписания в правом верхнем углу календаря появляется кнопка «Экспорт в Google Calendar».
- По нажатию расширение сбрасывает вид на текущий месяц и идёт вперёд
месяц за месяцем, считывая занятия из DOM, пока не встретит пустой месяц
(не более 5 месяцев).
Готовность определяется по
aria-busyу блоков.b-overlay-wrap, окружающих заголовок и таблицу календаря. Расширение отслеживает изменения DOM и при смене месяца ждёт начала и завершения загрузки таблицы, а не только смены заголовка. Занятия считываются без опроса по таймеру и фиксированных пауз. Если загрузка или переключение месяца зависли, через 30 секунд показывается ошибка вместо неполного экспорта. - Перед скачиванием показывается окно предпросмотра: сколько найдено занятий и предметов, сколько месяцев просканировано и список предметов — можно подтвердить экспорт или отменить.
- После подтверждения занятия группируются по (предмет, день недели, время),
интервал (еженедельно / раз в две недели) определяется по реальным датам, и
формируется файл
itmo-schedule.ics.
Экспортируются только будущие занятия (начиная с сегодняшнего дня). Каждое сочетание (предмет, день, время) — отдельное событие с правилом повторения, поэтому отдельные пары легко удалять в календаре.
Страница расписания отдаёт в DOM только название предмета и время начала —
без преподавателя, аудитории и времени окончания. Длительность пары задана
константой LESSON_MINUTES = 90 в src/ics.ts.
В терминале, в папке проекта:
npm install # если ещё не делали
npm run build
npm test # необязательно: проверка генерации .icsПосле этого появится папка dist/ с расширением: content.js, manifest.json
и папка icons/. Именно её Chrome будет загружать.
- Откройте
chrome://extensions(вставьте в адресную строку). - Включите переключатель Developer mode (Режим разработчика) — справа вверху.
- Нажмите Load unpacked (Загрузить распакованное).
- Выберите папку
dist/(не корень проекта, а именноdist/). - Расширение появится в списке. Убедитесь, что у него нет красной надписи об ошибке.
- Зайдите на
my.itmo.ruи авторизуйтесь. - Перейдите в раздел Расписание.
- Убедитесь, что включён вид «Месяц» (он по умолчанию активен — переключатель Неделя/Месяц справа над календарём).
- В правом верхнем углу календаря должна появиться синяя кнопка «Экспорт в Google Calendar».
Если кнопки нет — подождите 1–2 секунды (она добавляется по таймеру) или обновите страницу.
- Нажмите кнопку «Экспорт в Google Calendar».
- Календарь сам перескочит на текущий месяц и начнёт листать вперёд — на кнопке
будет видно
Сканирование… (1),(2), и т.д. - Когда дойдёт до пустого месяца — остановится и вернётся на сегодня, а на экране
появится окно предпросмотра:
Нашёл N занятий, M предметов,Просканировано: K мес.и список предметов. - Нажмите «Скачать .ics», чтобы сохранить файл
itmo-schedule.ics, или «Отмена», чтобы ничего не скачивать. - После скачивания на кнопке появится
Готово: N занятий (M мес.)(илиЭкспорт отменён, если вы закрыли окно).
Прежде чем заливать в Google Calendar, откройте скачанный файл в текстовом редакторе и проверьте глазами:
- Названия предметов (
SUMMARY:) читаются нормально, без «кракозябр». - Даты и время (
DTSTART:) совпадают с тем, что в расписании. - Повторения (
RRULE:илиRDATE:) выглядят разумно — например,FREQ=WEEKLY;INTERVAL=2для пар раз в две недели.
- Откройте calendar.google.com.
- Настройки (шестерёнка) → Settings → Import & export → Import.
- Выберите файл
itmo-schedule.ics, укажите календарь и нажмите Import. - Проверьте, что события встали на правильные дни и время.
Совет: для первого раза импортируйте в отдельный/тестовый календарь, чтобы при ошибке легко всё удалить, не задев основной.