После того как появился сам сайт, захотелось решить ещё одну задачу: не заходить на сервер каждый раз, когда нужно опубликовать новую заметку.
Поэтому Telegram фактически стал интерфейсом публикации.
Я создал канал и бота. Бот добавлен в канал администратором с правом публикации, а новые сообщения из канала Telegram отправляет на мой сервер через webhook.
На сервере работает небольшое приложение на FastAPI. Оно принимает webhook, проверяет секретный токен, получает текст публикации и разделяет его на две части.
Первая строка становится заголовком.
Всё остальное становится содержанием заметки.
После этого создаётся каталог публикации с post.json и content.md. Затем запускается генератор сайта, который пересобирает HTML страницы, главную страницу и sitemap.xml.
Но на этом появилась другая небольшая задача.
Если сайт уже открыт в браузере, хотелось видеть новую публикацию сразу. Простая перезагрузка страницы это решает, но выглядит грубо и для самой страницы в этом нет необходимости.
Поэтому для главной страницы я добавил SSE — Server-Sent Events.
Открытая страница устанавливает соединение с /events. Когда Telegram-публикация успешно обработана и сайт пересобран, сервер отправляет событие браузеру.
Браузер получает событие, запрашивает свежую главную страницу и заменяет только список заметок.
Сама страница при этом не перезагружается.
В итоге получилась довольно простая цепочка:
Telegram → webhook → FastAPI → файлы публикации → генератор → HTML → SSE → браузер.
Без базы данных, без отдельной CMS и без JavaScript-фреймворка.
Для небольшого личного технического сайта этого оказалось вполне достаточно.
- работает публикация
- редактирование
- удаление
и всё это через телеграм.