This commit is contained in:
root
2025-09-14 10:13:50 +05:00
parent 3f77c72e6f
commit 2ef51e43a3
14 changed files with 1334 additions and 10 deletions
+67
View File
@@ -0,0 +1,67 @@
### Техническое задание для 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
Документ в коллекции должен иметь следующую структуру:
```json
{
"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 полностью соответствует указанной модели данных.