Агрегатор RSS/Atom: редакционная очередь «Сигнал»
Построим «Сигнал» — локальный редакционный агрегатор метаданных RSS и Atom. Он запоминает записи и изменения, предлагает кандидатов человеку и экспортирует явно подтверждённые версии в Markdown-заготовки. Полные тексты чужих статей не копируются, автоматической публикации нет.
Один проект развивается на протяжении десяти уроков. Начальные данные — собственные вымышленные ленты. Внешняя загрузка доступна только для фиксированного источника в конфигурации и требует явного включения. Серия входит в подборку «Платформы и инструменты веб-приложений».
Последовательность уроков
| № | Урок | Что добавляем в проект |
|---|---|---|
| 1 | Источники и модель подборки | Договор редакционного отбора, конфигурация и собственные RSS/Atom-примеры |
| 2 | Чтение и нормализация ленты | Одна форма полей, UTC и неизвестные даты, текст заголовка и URL-политика |
| 3 | Устойчивые идентификаторы и дубли | Ключ источника и записи, отпечаток метаданных, противоречивые дубли |
| 4 | Условная загрузка HTTP | ETag, Last-Modified, 304, ограничения чтения и выключенные перенаправления |
| 5 | История в SQLite | Транзакция записей, ревизий и сохранённых валидаторов |
| 6 | Расписание и повторные попытки | Постоянный next_due, backoff и один рабочий процесс |
| 7 | Изменения и редакционная очередь | Подтверждение конкретного fingerprint и отзыв отбора при изменении |
| 8 | API и страница подборки | Loopback-сервер только для чтения, курсор и безопасный DOM |
| 9 | Экспорт для Markdown-публикации | Неизменяемые версии заготовок, актуальный манифест и защита ручных правок |
| 10 | Наблюдение и границы источников | Состояние источников, квоты истории и условия расширения |
Исходники и окружение
Скачать исходники «Сигнал». Каждая папка lesson-01 … lesson-10 содержит полное самостоятельное состояние исходников и инструкцию. Пользовательская база, экспортированные записи и зависимости в архив не включены. Код предназначен для самостоятельного запуска читателем вне репозитория сайта.
Основа — Python 3.13 и feedparser 6.0.14. Для блокировки единственного рабочего процесса с шестого урока нужны Linux или macOS; для Windows подходит отдельная среда WSL. Сервер страницы использует порт 4394 и слушает только loopback. Это редакционный учебный стенд без учётных записей и публичного размещения.
Сохранение манифеста означает фиксацию состава выбранных заготовок. Старые файлы могут остаться на диске как история; переносить весь каталог экспортов в сайт нельзя. Редактор читает первоисточник, пишет собственное объяснение, выбирает URL и раздел будущей статьи отдельно.
Учебные приложения, сетевые загрузки, база и зависимости при подготовке не запускались. Описанные результаты ожидаются из чтения кода; проверка во время самостоятельного прохождения приведена в уроках. Все материалы этой партии опубликованы.