Spaces:
Runtime error
Runtime error
| %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) | |