import os import re import sys import anthropic from datetime import datetime # Ruta donde están los archivos ruta_archivos = "/var/www/html" # Patrón para archivos con fechas en el nombre patron_fecha = re.compile(r"resumen_sapian_(\d{4}-\d{2}-\d{2})") # Verificar si el usuario pasó el mes como argumento if len(sys.argv) != 2: print("Uso: python3 concatenar_archivos.py ") print("Ejemplo: python3 concatenar_archivos.py 11") sys.exit(1) mes_argumento = sys.argv[1] # Validar el argumento del mes if not mes_argumento.isdigit() or not (1 <= int(mes_argumento) <= 12): print("El mes debe ser un número entre 01 y 12.") sys.exit(1) # Formatear el mes como dos dígitos mes_argumento = mes_argumento.zfill(2) # Obtener el año actual para construir el filtro de archivos anio_actual = datetime.now().year # Lista para almacenar archivos que coinciden con el mes especificado archivos_mes = [] # Recorrer los archivos en la ruta for archivo in os.listdir(ruta_archivos): match = patron_fecha.search(archivo) if match: fecha_str = match.group(1) fecha = datetime.strptime(fecha_str, "%Y-%m-%d") if fecha.strftime("%Y-%m") == f"{anio_actual}-{mes_argumento}": archivos_mes.append(os.path.join(ruta_archivos, archivo)) # Verificar si se encontraron archivos if not archivos_mes: print(f"No se encontraron archivos para el mes {mes_argumento} del año {anio_actual}.") sys.exit(0) # Archivo de salida archivo_salida = os.path.join(ruta_archivos, f"resumen_sapian_{anio_actual}-{mes_argumento}.txt") # Concatenar el contenido de todos los archivos contenido_total = "" for archivo in archivos_mes: with open(archivo, "r") as entrada: contenido_total += entrada.read() + "\n" # Eliminar todas las etiquetas HTML contenido_sin_html = re.sub(r"<[^>]*>", "", contenido_total) # Eliminar el bloque CSS repetido. Suponiendo que el CSS siempre está entre # 'body {' y la siguiente "Resumen de Llamada". # Esta expresión regular busca "body {", consume todo hasta el siguiente "Resumen de Llamada" # y lo reemplaza por nada. contenido_sin_css = re.sub(r"(?s)body\s*\{.*?Resumen de Llamada", "Resumen de Llamada", contenido_sin_html) # También podrías optar por eliminar cualquier otro bloque CSS conocido. Por ejemplo, si tu CSS # siempre va desde `body {` hasta antes del siguiente `Resumen de Llamada`, el anterior regex debería funcionar. # Si tu CSS es exactamente el mismo en todas partes, podrías usar una expresión más específica. # Limpiar espacios en blanco excesivos contenido_limpio = re.sub(r"\s+\n", "\n", contenido_sin_css).strip() # Guardar el resultado limpio en el archivo final with open(archivo_salida, "w") as salida: salida.write(contenido_limpio) print(f"Archivos del mes {mes_argumento} concatenados sin HTML/CSS en: {archivo_salida}") def consultar_claude(text): ruta_archivo = "/home/promt_back.txt" # Leer el contenido del archivo y asignarlo a un string try: with open(ruta_archivo, "r") as archivo: contenido = archivo.read() except FileNotFoundError: print(f"El archivo {ruta_archivo} no existe.") contenido = "" except Exception as e: print(f"Ocurrió un error al leer el archivo: {e}") contenido = "" client = anthropic.Anthropic(api_key='sk-ant-') message = client.messages.create( model="claude-3-5-haiku-20241022", max_tokens=5000, temperature=0, system=( "vas a recibir el siguiente archivo con varias llamadas, debes devolver la respuesta en HTML para una pagina con tablas CSS. De cada petición devuélvemela formateada en HTML. Lo que devuelvas será escrito en una página con la siguiente peticion:" + contenido ), messages=[ { "role": "user", "content": [{"type": "text", "text": text}] } ] ) respuesta_claude = "".join([msg.text for msg in message.content]) # Procesar para agregar la clase TEMA a todas las celdas correspondientes respuesta_claude = respuesta_claude.replace("", "") return respuesta_claude try: with open(archivo_salida, "r") as archivo: contenido = archivo.read() except FileNotFoundError: print(f"El archivo {archivo_salida} no existe.") contenido = "" except Exception as e: print(f"Ocurrió un error al leer el archivo: {e}") contenido = "" resp_claude = consultar_claude(contenido) archivo_salida_html = os.path.join(ruta_archivos, f"back_de_mes_sapian_{anio_actual}-{mes_argumento}.html") try: with open(archivo_salida_html, "w") as archivo: archivo.write(resp_claude) print(f"Archivo creado exitosamente en: {archivo_salida_html}") except Exception as e: print(f"Error al crear el archivo: {e}")