You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.8 KiB
137 lines
4.8 KiB
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 <mes>")
|
|
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("<td>", "<td class='TEMA'>")
|
|
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}")
|
|
|