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

68 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### Техническое задание для 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 полностью соответствует указанной модели данных.