Files
marketing-parser/kapital.md
2025-09-14 10:39:18 +05:00

67 lines
4.6 KiB
Markdown

**Задача:** Разработать парсер для RSS-ленты `https://kapital.kz/rss/` на Spring Boot с сохранением результатов в MongoDB.
**Контекст:** Парсер является частью AI-платформы для маркетинговой аналитики. Его цель — собирать деловые новости из источника Kapital.kz, нормализовать их и сохранять в общую базу данных для дальнейшей аналитической обработки.
---
## Основные требования
1. **Получение данных**: Создать сервис, который выполняет HTTP GET-запрос к URL: `https://kapital.kz/rss/`.
2. **Парсинг RSS**: Разобрать полученный XML-ответ. Для каждой записи (элемента `<item>`) в RSS-ленте необходимо извлечь следующие поля:
- `title` (заголовок).
- `link` (URL статьи).
- `pubDate` (дата публикации).
- `description` (текстовое содержимое).
3. **Нормализация данных**:
- **Очистка текста**: Текстовое содержимое из поля `description` должно быть полностью очищено от HTML-тегов.
- **Формат даты**: Дата публикации должна быть приведена к формату `ISODate`.
4. **Создание хэша**: Для каждой новости необходимо сгенерировать уникальный хэш для дедупликации по формуле `sha256(url + "::" + title)`.
5. **Сохранение в MongoDB**:
- Подготовленные данные должны сохраняться в ту же коллекцию `market_items`.
- Операция сохранения должна быть **"upsert"** (обновить, если существует, или вставить, если нет), используя поле `hash` в качестве уникального ключа.
---
## Модель данных для коллекции `market_items` в MongoDB
Структура документа должна полностью соответствовать уже существующей модели.
```json
{
"source_name": "Kapital.kz (Бизнес)", // Статическое значение для этого парсера
"url": "https://kapital.kz/...", // Из поля <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
- **Реализация**: Рекомендуется создать новый класс-сервис (например, `KapitalParserService`) по аналогии с существующим `KursivParserService`.
- **Планирование**: Новый сервис также должен запускаться по общему расписанию — **каждые 30 минут**. Это можно сделать, добавив аннотацию `@Scheduled(cron = "0 0/30 * * * ?")` на метод парсинга в новом сервисе.
---
## Критерии выполнения
- Создан новый Spring Boot сервис (`KapitalParserService`), который успешно парсит данные с `https://kapital.kz/rss/`.
- Приложение автоматически запускает оба парсера (Kursiv и Kapital) каждые 30 минут.
- Новости из Kapital.kz корректно сохраняются в общую коллекцию `market_items` без создания дубликатов.
- Структура сохраненных документов в MongoDB полностью соответствует указанной модели данных.