Files
marketing-parser/TASK.md
2025-09-14 10:13:50 +05:00

5.1 KiB
Raw Permalink Blame History

Техническое задание для AI-агента

Задача: Разработать парсер (парсер) для RSS-ленты https://kursiv.media/feed/ на Spring Boot с сохранением результатов в MongoDB.

[cite_start]Контекст: Этот парсер является частью большой AI-платформы для маркетинговой аналитики[cite: 5]. Его цель — собирать новости из указанного источника, нормализовать их и сохранять в базу данных для дальнейшей обработки.


Основные требования

  1. Получение данных: Создать сервис, который выполняет HTTP GET-запрос к URL: https://kursiv.media/feed/.
  2. Парсинг RSS: Разобрать полученный XML-ответ. Для каждой записи (элемента <item>) в RSS-ленте необходимо извлечь следующие поля:
    • [cite_start]title (заголовок)[cite: 64].
    • [cite_start]link или guid (URL статьи)[cite: 64].
    • [cite_start]pubDate или isoDate (дата публикации)[cite: 64].
    • [cite_start]description или content (текстовое содержимое)[cite: 65].
  3. Нормализация данных:
    • [cite_start]Очистка текста: Текстовое содержимое из description/content должно быть полностью очищено от HTML-тегов[cite: 65].
    • Формат даты: Дата публикации должна быть приведена к формату ISODate.
  4. Создание хэша: Для каждой новости необходимо сгенерировать уникальный хэш для дедупликации. [cite_start]Хэш формируется по формуле sha256(url + "::" + title)[cite: 54].
  5. Сохранение в MongoDB:
    • Подготовленные данные должны сохраняться в коллекцию MongoDB с названием market_items.
    • [cite_start]Операция сохранения должна быть "upsert" (обновить, если существует, или вставить, если нет)[cite: 56]. [cite_start]В качестве ключа для поиска существующей записи используйте поле hash[cite: 56].

Модель данных для коллекции market_items в MongoDB

Документ в коллекции должен иметь следующую структуру:

{
  "source_name": "Kursiv (Бизнес/экономика)", // Статическое значение для этого парсера
  "url": "https://kursiv.media/article/...", // Из поля <link>
  "title": "Заголовок новости", // Из поля <title>
  "published_at": ISODate("2025-09-14T..."), // Из поля <pubDate>
  "added_at": ISODate("..."), // Текущее время при добавлении
  "raw_text": "Очищенный от HTML текст статьи...", // Из поля <description>
  "hash": "...", // Сгенерированный SHA-256 хэш
  "category": "Бизнес", // Можно задать по умолчанию

  // Этот блок будет заполняться на следующем этапе, но его нужно предусмотреть
  "analytics": {
    "summary": null,
    "sentiment": null,
    "tags": [],
    "entities": {}
  }
}

Технологический стек и реализация

  • Фреймворк: Spring Boot
  • База данных: Spring Data MongoDB
  • HTTP-клиент: RestTemplate или WebClient
  • Парсинг XML/RSS: Рекомендуется использовать библиотеку, например, Rome (com.rometools:rome), для удобной работы с RSS-лентами.
  • Логика: Реализовать класс-сервис (например, KursivParserService), который будет содержать всю логику. Для взаимодействия с MongoDB использовать MongoRepository или MongoTemplate.

Критерии выполнения

  • Создан Spring Boot сервис, который успешно получает и парсит данные с https://kursiv.media/feed/.
  • При вызове метода этого сервиса, новые записи появляются в коллекции market_items в MongoDB.
  • При повторном вызове дубликаты новостей не создаются, а существующие записи могут быть обновлены (логика upsert).
  • Структура сохраненных документов в MongoDB полностью соответствует указанной модели данных.