79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
from telegram import Bot
|
|
import asyncio
|
|
from sqlalchemy.orm import Session
|
|
from database import get_db
|
|
from models import NewsItem
|
|
from datetime import datetime, timedelta
|
|
import asyncio
|
|
|
|
# Configura tu bot con el token de BotFather
|
|
TOKEN = "7626026035:AAHEMp_iIN3y8AwywL0R6OTQvNi7EcJZ0iY"
|
|
CHAT_ID = "-4731993289" # Reemplaza con el ID del grupo
|
|
|
|
bot = Bot(token=TOKEN)
|
|
|
|
async def enviar_mensaje(mensaje: str):
|
|
await bot.send_message(chat_id=CHAT_ID, text=mensaje)
|
|
|
|
def obtener_titulares_por_keyword():
|
|
"""
|
|
Consulta la base de datos para obtener titulares agrupados por keywords del día anterior.
|
|
"""
|
|
db: Session = next(get_db()) # Obtener la sesión de la DB
|
|
try:
|
|
# Calcular el rango de fechas (ayer)
|
|
hoy = datetime.now()
|
|
# ayer = hoy - timedelta(days=1)
|
|
|
|
# Obtener todas las keywords disponibles
|
|
keywords = (
|
|
db.query(NewsItem.keyword)
|
|
.filter(NewsItem.fecha == hoy.date())
|
|
.distinct()
|
|
.all()
|
|
)
|
|
keywords = [k[0] for k in keywords if k[0] is not None] # Extraer valores y filtrar None
|
|
|
|
# Obtener titulares por keyword
|
|
resumen = {}
|
|
for keyword in keywords:
|
|
resultados = (
|
|
db.query(NewsItem.titulo)
|
|
.filter(
|
|
NewsItem.keyword == keyword,
|
|
NewsItem.fecha == hoy.date(),
|
|
# NewsItem.fecha < hoy.date()
|
|
)
|
|
.all()
|
|
)
|
|
resumen[keyword] = [r[0] for r in resultados] # Convertir en lista de strings
|
|
|
|
return resumen
|
|
|
|
except Exception as e:
|
|
print(f"Error al obtener titulares: {e}")
|
|
return {}
|
|
|
|
finally:
|
|
db.close() # Cerrar la conexión
|
|
|
|
def enviar_resumen_diario():
|
|
"""
|
|
Construye el mensaje con los titulares por keyword y lo envía por Telegram.
|
|
"""
|
|
resumen = obtener_titulares_por_keyword()
|
|
|
|
if not resumen:
|
|
mensaje = "¡Hola! No se encontraron noticias relevantes ayer. ¡Mañana volvemos con más información!"
|
|
else:
|
|
mensaje = "¡Hola! Estos son los titulares más relevantes de las noticias de ayer:\n\n"
|
|
for keyword, titulares in resumen.items():
|
|
mensaje += f"🔹 *{keyword}*:\n"
|
|
for titulo in titulares:
|
|
mensaje += f" - {titulo}\n"
|
|
mensaje += "\n"
|
|
mensaje += "📢 ¡Mañana volveremos con más información!"
|
|
|
|
# Enviar mensaje de forma asíncrona
|
|
asyncio.run(enviar_mensaje(mensaje))
|