from dataclasses import dataclass, field from typing import List, Optional, Dict, Any import re from datetime import datetime import logging import html from uuid import uuid4 # Настройка логирования logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) @dataclass class Comment: """ Представляет комментарий Instagram со всеми метаданными и вложенной структурой. Attributes: id: Уникальный идентификатор комментария username: Имя пользователя time: Временная метка content: Текст комментария likes: Количество лайков level: Уровень вложенности parent_id: ID родительского комментария replies: Список ответов is_verified: Верифицированный аккаунт mentions: Упоминания пользователей hashtags: Хэштеги is_deleted: Флаг удаленного комментария """ id: str = field(default_factory=lambda: str(uuid4())) username: str = "" time: str = "" content: str = "" likes: int = 0 level: int = 0 parent_id: Optional[str] = None replies: List['Comment'] = field(default_factory=list) is_verified: bool = False mentions: List[str] = field(default_factory=list) hashtags: List[str] = field(default_factory=list) is_deleted: bool = False def __post_init__(self): """Валидация после инициализации""" if len(self.content) > 2200: logger.warning(f"Comment content exceeds 2200 characters for user {self.username}") self.content = self.content[:2200] + "..." class InstagramCommentAnalyzer: """ Основной класс для обработки и анализа комментариев Instagram. Обрабатывает парсинг комментариев, вложенную структуру и особые случаи. """ # Регулярное выражение для извлечения комментариев COMMENT_PATTERN = r''' (?P[\w.-]+)\s+ (?P