Перейти к содержанию

Агрегатор 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 и раздел будущей статьи отдельно.

Учебные приложения, сетевые загрузки, база и зависимости при подготовке не запускались. Описанные результаты ожидаются из чтения кода; проверка во время самостоятельного прохождения приведена в уроках. Все материалы этой партии опубликованы.