Files
social-media-automation/app/publishers/base.py
Consultoría AS 049d2133f9 Implementación inicial del sistema de automatización de redes sociales
- Estructura completa del proyecto con FastAPI
- Modelos de base de datos (productos, servicios, posts, calendario, interacciones)
- Publishers para X, Threads, Instagram, Facebook
- Generador de contenido con DeepSeek API
- Worker de Celery con tareas programadas
- Dashboard básico con templates HTML
- Docker Compose para despliegue
- Documentación completa

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 01:11:44 +00:00

75 lines
1.8 KiB
Python

"""
Clase base para publishers de redes sociales.
"""
from abc import ABC, abstractmethod
from typing import Optional, List, Dict
from dataclasses import dataclass
@dataclass
class PublishResult:
"""Resultado de una publicación."""
success: bool
post_id: Optional[str] = None
url: Optional[str] = None
error_message: Optional[str] = None
class BasePublisher(ABC):
"""Clase base abstracta para publishers."""
platform: str = "base"
@abstractmethod
async def publish(
self,
content: str,
image_path: Optional[str] = None
) -> PublishResult:
"""Publicar contenido en la plataforma."""
pass
@abstractmethod
async def publish_thread(
self,
posts: List[str],
images: Optional[List[str]] = None
) -> PublishResult:
"""Publicar un hilo de posts."""
pass
@abstractmethod
async def reply(
self,
post_id: str,
content: str
) -> PublishResult:
"""Responder a un post."""
pass
@abstractmethod
async def like(self, post_id: str) -> bool:
"""Dar like a un post."""
pass
@abstractmethod
async def get_mentions(self, since_id: Optional[str] = None) -> List[Dict]:
"""Obtener menciones recientes."""
pass
@abstractmethod
async def get_comments(self, post_id: str) -> List[Dict]:
"""Obtener comentarios de un post."""
pass
@abstractmethod
async def delete(self, post_id: str) -> bool:
"""Eliminar un post."""
pass
def validate_content(self, content: str) -> bool:
"""Validar que el contenido cumple con los límites de la plataforma."""
# Implementar en subclases según límites específicos
return True