Spaces:
Runtime error
Runtime error
File size: 5,132 Bytes
b75c0f0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | %writefile app.py
import os
import csv
from datetime import datetime
import gradio as gr
import google.generativeai as genai
# --- Configuración de la API de Gemini para Hugging Face Spaces ---
# Asegúrate de añadir GOOGLE_API_KEY como un secreto en tu Space de Hugging Face
GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
if GOOGLE_API_KEY:
genai.configure(api_key=GOOGLE_API_KEY)
gemini_model = genai.GenerativeModel('gemini-pro')
print("Modelo de Gemini inicializado correctamente.")
else:
print("Advertencia: La clave GOOGLE_API_KEY no está configurada. La evaluación de Gemini no estará disponible.")
gemini_model = None # Para evitar errores si la clave no está presente
# Definir el nombre del archivo CSV donde se guardarán los resultados
ARCHIVO_CSV = "resultados_encuesta.csv"
def encuesta_preguntas_de_seguridad(
p1_respuesta, p2_respuesta, p3_respuesta, p4_respuesta, p5_respuesta,
p6_respuesta, p7_respuesta, p8_respuesta, p9_respuesta, p10_respuesta
):
puntaje = 0
if p1_respuesta == "Sí":
puntaje += 1
if p2_respuesta == "Sí":
puntaje += 1
if p3_respuesta == "Sí":
puntaje += 1
if p4_respuesta == "Sí":
puntaje += 1
if p5_respuesta == "Sí":
puntaje += 1
if p6_respuesta == "Sí":
puntaje += 1
if p7_respuesta == "Sí":
puntaje += 1
if p8_respuesta == "Sí":
puntaje += 1
if p9_respuesta == "Sí":
puntaje += 1
if p10_respuesta == "Sí":
puntaje += 1
evaluacion_gemini = "No se pudo generar una evaluación detallada."
if gemini_model:
prompt = f"El usuario obtuvo un puntaje de {puntaje} sobre 10 en una encuesta de seguridad digital. Genera una evaluación concisa y personalizada sobre su nivel de seguridad, incluyendo recomendaciones específicas para mejorar, si es necesario. Enfócate en un tono motivador y educativo."
try:
response = gemini_model.generate_content(prompt)
evaluacion_gemini = response.text
except Exception as e:
evaluacion_gemini = f"No se pudo generar una evaluación detallada con Gemini (Error: {e})."
# Guardado directo en el archivo CSV local de forma anónima
fecha_actual = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(ARCHIVO_CSV, mode='a', newline='', encoding='utf-8') as f:
csv.writer(f).writerow([
fecha_actual, p1_respuesta, p2_respuesta, p3_respuesta, p4_respuesta, p5_respuesta,
p6_respuesta, p7_respuesta, p8_respuesta, p9_respuesta, p10_respuesta, f"{puntaje}/10"
])
print(f"\n Guardado en el almacenamiento local ({fecha_actual}). Puntaje: {puntaje}/10")
# Lo que ve el usuario en su teléfono
resultado_final = f"Tu puntuación total es: {puntaje} / 10\n\nEvaluación de Seguridad Digital:\n{evaluacion_gemini}"
return resultado_final
# --- INTERFAZ GRÁFICA WEB ---
opciones = ["Sí", "No"]
introduccion_texto = (
"Escanear un código QR parece algo seguro y cotidiano, pero muchas veces puede llevarnos a sitios falsos o engañosos sin que lo notemos. Esta actividad busca demostrar lo fácil que es caer en un engaño digital y la importancia de verificar antes de escanear cualquier código QR."
"hola mi nombre es evelyn lorena espinoza olivo de la especialidad de ciberseguridad 2A, el codigo lo creamos para ver que tanto puedes confiar en engaños o escanear codigos QR sin saber que es lo que puede llegar a contener"
)
interfaz = gr.Interface(
fn=encuesta_preguntas_de_seguridad,
inputs=[
gr.Radio(opciones, label="1. Uso de contraseñas seguras y diferentes en cada cuenta o correo:"),
gr.Radio(opciones, label="2. Tengo activada la verificación en dos pasos:"),
gr.Radio(opciones, label="3. Reviso los permisos de las aplicaciones antes instaladas:"),
gr.Radio(opciones, label="4. Configuro adecuadamente la privacidad en mis redes sociales:"),
gr.Radio(opciones, label="5. Realizo respaldos periódicos de información importante: "),
gr.Radio(opciones, label="6. Actualizo mis contraseñas de manera regular, al menos cada 6 meses: "),
gr.Radio(opciones, label="7. Evito conectarme a redes wifi públicas para acceder a bancos en línea y operaciones financieras sencillas: "),
gr.Radio(opciones, label="8. Mantengo mi sistema operativo y aplicaciones actualizadas:"),
gr.Radio(opciones, label="9. No comparto información personal sensible (INE, dirección, ubicación) en sitios no confiables: "),
gr.Radio(opciones, label="10. Uso antivirus y herramientas de seguridad en mis dispositivos:")
],
outputs=gr.Textbox(label="Resultado de tu Evaluación:"),
title="Encuesta de Seguridad Informática",
description=introduccion_texto
)
# --- LANZAMIENTO DEL INTERFAZ DE GRADIO ---
# En Hugging Face Spaces, no necesitas especificar 'share=True',
# ya que la URL pública se gestiona automáticamente.
# Esta línea iniciará la aplicación Gradio cuando el script se ejecute.
interfaz.launch(server_name="0.0.0.0", server_port=0)
|