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>
This commit is contained in:
74
app/publishers/base.py
Normal file
74
app/publishers/base.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user