4.6 KiB
4.6 KiB
Задача: Разработать парсер для RSS-ленты https://kapital.kz/rss/ на Spring Boot с сохранением результатов в MongoDB.
Контекст: Парсер является частью AI-платформы для маркетинговой аналитики. Его цель — собирать деловые новости из источника Kapital.kz, нормализовать их и сохранять в общую базу данных для дальнейшей аналитической обработки.
Основные требования
- Получение данных: Создать сервис, который выполняет HTTP GET-запрос к URL:
https://kapital.kz/rss/. - Парсинг RSS: Разобрать полученный XML-ответ. Для каждой записи (элемента
<item>) в RSS-ленте необходимо извлечь следующие поля:title(заголовок).link(URL статьи).pubDate(дата публикации).description(текстовое содержимое).
- Нормализация данных:
- Очистка текста: Текстовое содержимое из поля
descriptionдолжно быть полностью очищено от HTML-тегов. - Формат даты: Дата публикации должна быть приведена к формату
ISODate.
- Очистка текста: Текстовое содержимое из поля
- Создание хэша: Для каждой новости необходимо сгенерировать уникальный хэш для дедупликации по формуле
sha256(url + "::" + title). - Сохранение в MongoDB:
- Подготовленные данные должны сохраняться в ту же коллекцию
market_items. - Операция сохранения должна быть "upsert" (обновить, если существует, или вставить, если нет), используя поле
hashв качестве уникального ключа.
- Подготовленные данные должны сохраняться в ту же коллекцию
Модель данных для коллекции market_items в MongoDB
Структура документа должна полностью соответствовать уже существующей модели.
{
"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 полностью соответствует указанной модели данных.