Перейти к содержимому
Все проекты

Сбор данных · Медиамониторинг

Платформа мониторинга новостей

Национальная платформа агрегации и мониторинга новостей: собирает статьи с зарегистрированных новостных сайтов на туркменском, русском и английском, фильтрует их по ключевым словам и формирует отчёты.

Моя роль
Backend-разработчик. Реализовал сбор новостей, поиск источников, API и отчёты.
Стек
  • Go
  • Echo
  • GORM
  • PostgreSQL
  • RSS
  • Serper API

Задача

Аналитикам нужны были все публикации по заданным темам на множестве сайтов на трёх языках, а новые источники появляются постоянно, поэтому фиксированный список сайтов упускает часть публикаций.

Архитектура

Платформа мониторинга новостей — Схема архитектурыNews sitesRSS feedsPollerscheduledFilterkeywords · langNews DBPostgreSQLGoogle NewsSerper APIDiscoverynew domainsModerationvalid / invalidAPIreports · Excel
Фоновый цикл с настраиваемым интервалом опрашивает RSS-ленты, декодирует записи, сверяет их с ключевыми словами, определяет язык и сохраняет новости в базу корпуса через upsert. Задача поиска опрашивает Google News, извлекает домены, отбрасывает известные и ставит остальные в очередь модерации. Админский и публичный API (Echo) отдают новости, отчёты и выгрузки в Excel.

Ключевые решения

  1. 01Upsert делает опрос идемпотентным

    Почему
    Ленты повторяют записи между опросами. Вставка с ON CONFLICT позволяет запускать цикл сколько угодно часто без дубликатов.
  2. 02Найденные источники проходят модерацию

    Почему
    В результатах поиска много шума. Новые домены сохраняются со статусом new, valid или invalid, и только одобренные попадают в список опроса — охват растёт, а корпус не засоряется.
  3. 03Отдельные базы для данных платформы и корпуса

    Почему
    Корпус новостей быстро растёт и используется для отчётов. Отделение его от пользователей и API-ключей позволяет делать бэкапы и миграции каждой базы независимо.
    Компромисс
    Нет join-ов между базами; сервис держит два подключения.

Что я сделал

  • Сбор RSS с зарегистрированных сайтов по расписанию с фильтрацией по ключевым словам
  • Определение языка для туркменского, русского и английского контента
  • Поиск новых источников через Google News (Serper API) с очередью модерации
  • Две базы PostgreSQL: пользователи и ключи платформы и корпус новостей
  • Идемпотентные upsert, SQL-отчёты по сайтам и языкам, выгрузка в Excel