Табло вылетов наоборот: как я превратил телеграм-канал Росавиации в статистику закрытиям аэропортов

С лета 2025 года у многих появилась привычка перед вылетом проверять сведения об ограничениях в аэропортах. Один из таких источников — телеграм-канал "Говорит Росавиация". Там коротко пишут, где ввели ограничения на приём и выпуск самолётов, а где сняли. Несколько дней назад один телеграм-канал сделал по этим постам инфографику "Когда спокойнее всего улетать из Москвы": проценты по часам и дням недели для четырёх московских аэропортов. Инфографика отличная, но я живу в Петербурге. Так что первым делом я пошёл искать, откуда взяты данные, чтобы сделать такую же для Пулково.
А потом, как это обычно у меня бывает, задача выросла. Раз парсер всё равно пишется, почему бы не посчитать все аэропорты? А раз все — зачем снимок на одну дату? Хотелось живую статистику: зайти в любой момент и увидеть, что происходит сейчас и как было за любой период.
Так появился сайт-проект Небо под ковром. Это карта аэропортов, где для каждого видно, сколько времени он был под ограничениями, в какие часы и дни это бывает чаще всего и закрыт ли он прямо сейчас. В статье — как разобрать посты Росавиации и что делать с ограничением, которое ввели и забыли снять.
Откуда данные
Единственный открытый источник — сам канал "Говорит Росавиация". API у него нет, но у любого публичного канала есть веб-версия t.me/s/<канал>: обычная HTML-страница примерно с 20 постами и параметром ?before=<id>, чтобы листать назад. Для истории я выгрузил канал целиком через Telegram Desktop: 8 818 постов с ноября 2023 года.
Ограничения в канале до конца 2024 года редкие и единичные, поэтому считаю с июля 2025-го: с этого момента посты идут по единому (почти) шаблону.
С июля 2025 года всё выглядит предсказуемо:
⛔ ВВЕДЕНЫ временные ограничения на прием и выпуск воздушных судов Аэропорт ПЕРМЬ (Большое Савино)
Есть ещё сообщения в стиле 🟡 "принимает и отправляет рейсы по согласованию" — это я классифицировал как частичный режим, а также⬜️ "СНЯТЫ ограничения" и редкие массовые посты вроде "Все аэропорты столичного региона принимают и отправляют рейсы".

Справочник: два аэропорта на четыре названия
Одно из самых неожиданных мест — названия. «Н. НОВГОРОД» и «Н.НОВГОРОД» — один город. «РАМЕНСКОЕ» — это Жуковский. «ТУНОШНА» — Ярославль. «Стригино» и «Чкалов» — один аэропорт Нижнего Новгорода, переименованный в 2019 году. В итоге у каждой строки справочника есть колонка со всеми написаниями из постов, а ИКАО я сверил с кодами из самих постов. Координаты и IATA подтягиваются скриптом из OurAirports по ИКАО.
Всего в справочнике 70 аэропортов, которые закрывались хотя бы раз за весь период исследования (с июля 2025 года). Восемь из них — Анапа, Белгород, Брянск, Воронеж, Курск, Липецк, Ростов-на-Дону и Симферополь — закрыты с 24 февраля 2022 года. На карте они отмечены отдельно и в статистику не входят, иначе каждый из них давал бы 100 % и съедал любой рейтинг.

Интервалы, у которых нет конца
Пост — это событие, а считать нужно время: "закрыт с 03:12 до 07:40". Казалось бы, задача простая: ищем когда ограничение введено, потом ждём снятия — и готово. Однако так при сборе данных работает далеко не всегда. По факту 58 раз сообщения о "снятии" пришли без введения, а ещё бывают повторные сообщения об ограничениях для того же аэропорта и ограничения, снятие которых не объявили вовсе.
В итоге пришлось придумывать свои правила:
ограничение было снято, но никогда не вводилось — игнорируем;
повторное ограничение не сдвигает начало, но подтверждает, что ограничение ещё действует;
если сутки нет ни снятия, ни повторного сообщения — снятие считаем необъявленным, и интервал длится типичное время (медиану) после последнего сообщения.
Первая версия вместо медианы обрезала такой интервал ровно через сутки. Это казалось осторожным решением, но в итоге ограничения в статистике были дольше, чем по факту. Поэтому потом всё же решил выбрать медиану вместо суток.

Сбор каждые 15 минут
На сервере раз в 15 минут запускается команда, которая читает t.me/s/favt_info и листает назад, пока не встретит уже сохранённый пост. Последние две страницы она перечитывает каждый раз: посты иногда правят. После любой загрузки интервалы пересчитываются из всех постов целиком — 4,6 тысячи интервалов собираются меньше чем за секунду, так что инкрементальная логика тут не нужна.
Если сбор падает три раза подряд или больше часа не было удачного запуска, приходит сообщение в мой бот-помощник. А если канал сменит формат, это тоже будет видно: появятся посты с ограничением без аэропорта.
Табло, а не дашборд
Дизайн я выбирал из пяти направлений и остановился на табло вылетов: тёмный фон, моноширинный шрифт для цифр, разрезные цифры на плитках. Карта России нарисована точечной матрицей, как на старых светодиодных табло, а каждый аэропорт — круглое пятно из колец точек, размер которого зависит от доли времени под ограничениями.
Что получилось в цифрах
За последние 90 дней (с 28 июля по 25 октября) под ограничениями были 62 аэропорта из 70. В сумме — 6 774 аэропорто-часа. Больше всего одновременно было закрыто 20 аэропортов: 16 октября около половины шестого утра.
Время суток решает очень много. С 5 до 6 утра по Москве в среднем по стране ограничения действуют почти 11% времени, а с 16 до 21 часа — до 2%, то есть почти в шесть раз реже. Худший день — пятница (7%), лучший — вторник (3%).

В Москве разница между аэропортами огромная. Внуково за 90 дней — 15,4% ограничений, Домодедово — 13,4%, Жуковский — 7,2%, а Шереметьево — 2,9%. Но у Внуково это в основном режим "по согласованию", когда часть рейсов всё же летает: полностью закрыт он был только 3,4% времени.

Пулково — меньше 1 % времени, и все ограничения там ночные и утренние.

А самый "закрытый" аэропорт — Калуга: 34 % за 90 дней и больше 40 % за последний месяц.

Чего сайт не знает
Он считает только то, что объявлено в канале. Постоянные ночные ограничения южных аэропортов по NOTAM туда не попадают. И это время, а не рейсы: два часа ночью в Калуге и два часа днём в Шереметьево — очень разные события. Следующий шаг, который я обдумываю, — взвесить часы по расписанию и посчитать долю рейсов, попавших в ограничения.
Интерактивная версию проекта Небо под ковром. Там можно выбрать любой период, открыть страницу своего аэропорта и проверить, когда из него спокойнее всего вылетать.
Буду рад вопросам и замечаниям по методике, особенно если вы знаете, как сделать лучше.
Кстати, о таких проектах я ещё пишу в телеграме online ergo sum.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.