5.1 KiB
5.1 KiB
Техническое задание для AI-агента
Задача: Разработать парсер (парсер) для RSS-ленты https://kursiv.media/feed/ на Spring Boot с сохранением результатов в MongoDB.
[cite_start]Контекст: Этот парсер является частью большой AI-платформы для маркетинговой аналитики[cite: 5]. Его цель — собирать новости из указанного источника, нормализовать их и сохранять в базу данных для дальнейшей обработки.
Основные требования
- Получение данных: Создать сервис, который выполняет HTTP GET-запрос к URL:
https://kursiv.media/feed/. - Парсинг 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].
- [cite_start]
- Нормализация данных:
- [cite_start]Очистка текста: Текстовое содержимое из
description/contentдолжно быть полностью очищено от HTML-тегов[cite: 65]. - Формат даты: Дата публикации должна быть приведена к формату
ISODate.
- [cite_start]Очистка текста: Текстовое содержимое из
- Создание хэша: Для каждой новости необходимо сгенерировать уникальный хэш для дедупликации. [cite_start]Хэш формируется по формуле
sha256(url + "::" + title)[cite: 54]. - Сохранение в MongoDB:
- Подготовленные данные должны сохраняться в коллекцию MongoDB с названием
market_items. - [cite_start]Операция сохранения должна быть "upsert" (обновить, если существует, или вставить, если нет)[cite: 56]. [cite_start]В качестве ключа для поиска существующей записи используйте поле
hash[cite: 56].
- Подготовленные данные должны сохраняться в коллекцию MongoDB с названием
Модель данных для коллекции 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 полностью соответствует указанной модели данных.