IDAT Sync

Una herramienta de automatización basada en Python que sincroniza de forma transparente los materiales de cursos de idat y las grabaciones de clases desde Moodle y Microsoft SharePoint en un directorio local limpio y bien estructurado.

IDAT Sync
  • Python
  • Playwright
  • yt-dlp
  • PyInstaller
  • Github-Actions
  • Tkinter

Descripción General

Los portales de aprendizaje y los sistemas de almacenamiento en la nube son esenciales, pero navegar por ellos es notoriamente engorroso. Cada semana perdía tiempo valioso haciendo clic manualmente en Moodle para verificar nuevos materiales, autenticándome en Microsoft SharePoint para descargar presentaciones, y buscando las grabaciones de clases asociadas. Diseñé una herramienta de automatización basada en Python para eliminar este trabajo repetitivo, sincronizando de forma transparente todos los archivos del curso y videos en un directorio local estructurado y disponible sin conexión.

Stack Tecnológico

  • APIs: Moodle Web Services, API de SharePoint.

  • Autenticación Asíncrona: Playwright.

  • Descarga de Documentos: office365-rest-python-client.

  • Descarga de Videos: yt-dlp.

  • CI/CD y Empaquetado: GitHub Actions , PyInstaller.

Arquitectura y Enfoque

La herramienta actúa como un orquestador headless que conecta múltiples plataformas institucionales en un único pipeline automatizado:

  1. Extracción de Metadatos y Mapeo Fiel: El script consulta los Web Services de Moodle y SharePoint para analizar el plan de estudios del curso, mapear con precisión las estructuras web de carpetas al entorno local y resolver los endpoints de descarga para nuevos materiales.

  2. Autenticación Headless Asíncrona y Manejo de MFA: Debido a que los entornos de Microsoft 365 utilizan flujos complejos de Single Sign-On (SSO) que bloquean la autenticación REST estándar, utilicé Playwright para iniciar programáticamente un navegador. Se implementó código asíncrono para navegar por los desafíos de inicio de sesión y la Autenticación Multifactor (MFA), logrando extraer las cookies de sesión autenticadas.

  3. Descarga de Recursos:

  • Para documentos estándar (PDFs, presentaciones, docx), las cookies extraídas se inyectan en office365-rest-python-client para obtener archivos de forma segura directamente del ecosistema OneDrive/SharePoint.

  • Para las grabaciones de clases alojadas en OneDrive, el mismo estado de sesión se pasa a yt-dlp. Esto permite que la herramienta evada la barrera de autenticación del reproductor de video de SharePoint y descargue de forma segura los archivos de video pesados.

Desafíos Técnicos Superados

Bypass de Restricciones de API de Entra ID (Azure AD) Normalmente, interactuar con SharePoint u OneDrive a nivel de programación requiere registrar una aplicación en Microsoft Entra ID, lo cual es inaccesible para cuentas de estudiantes sin privilegios de administrador institucional. Para resolver esto, la herramienta evade el uso tradicional de la API al emplear Playwright. Inyectando las cookies de la sesión en los scripts de descarga, el servidor asume que se trata de tráfico web legítimo, permitiendo la extracción de recursos sin requerir una aplicación corporativa de Microsoft.

Gestión Unificada de Cookies Entre Bibliotecas Diversas El principal obstáculo fue cerrar la brecha entre el SSO basado en navegador y los descargadores basados en terminal. Las solicitudes de tokens API estándar fallaban contra el portal de inicio de sesión de la universidad. Al utilizar Playwright para replicar una sesión de usuario genuina, pude capturar los datos de cookies sin procesar. El logro técnico principal fue escribir un manejador de sesión que serializaba el estado de Playwright en un formato universal que tanto el cliente Python de Office 365 como yt-dlp podían procesar sin problemas, creando una cadena de autenticación ininterrumpida a través de tres interfaces completamente diferentes.

Empaquetado y Distribución Continua (CI/CD)

Para hacer que la herramienta fuese accesible a estudiantes y usuarios sin experiencia en programación, configuré un flujo robusto de Integración y Despliegue Continuo utilizando GitHub Actions. Cada vez que se lanza una nueva versión, el pipeline de CI/CD compila automáticamente el código con PyInstaller, generando archivos binarios ejecutables listos para usar en Windows, Linux y macOS. Esto asegura una instalación de cero configuraciones independientemente del sistema operativo del usuario.

Impacto

  • Eliminación del Trabajo Manual: Ahorró horas de clics repetitivos por semestre al automatizar completamente la obtención de materiales de estudio.

  • Disponibilidad Sin Conexión: Generó un repositorio local limpio y altamente organizado, garantizando capacidades de estudio ininterrumpidas independientemente del tiempo de inactividad del portal o la disponibilidad de internet.

  • Base Escalable: Construyó un pipeline modular de autenticación y descarga que puede adaptarse fácilmente para extraer y sincronizar datos de otros entornos protegidos por SSO.