238 lines
10 KiB
Markdown
238 lines
10 KiB
Markdown
# HALLAZGOS - Descarga del Curso de Vóley (Online Education Center)
|
|
|
|
> Última actualización: 2026-05-02
|
|
|
|
## Información del Curso
|
|
|
|
- **Plataforma**: Online Education Center (similar a Moodle, usa Auth0 para login)
|
|
- **URL base del campus**: `https://voley.onlineeducation.center/es/campus/student/training/e/14197`
|
|
- **Usuario**: `saldis_karina@hotmail.com`
|
|
- **Contraseña**: `Martes13#`
|
|
- **Estado**: Curso finalizado
|
|
|
|
## Estructura del Curso
|
|
|
|
El curso tiene **2 Módulos** con **11 secciones** en total.
|
|
|
|
### Módulo 1 (m/19096) - PLANIFICACIÓN
|
|
|
|
| Sección | ID | URL |
|
|
|---|---|---|
|
|
| PLANIFICACION | s/34868 | `/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list` |
|
|
| PREPARACION ATLETICA | s/34869 | `/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list` |
|
|
| EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR | s/34870 | `/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list` |
|
|
| SEGUIMIENTOS DE EQUIPOS | s/35523 | `/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list` |
|
|
| ANALISIS DE EQUIPOS DE VOLEIBOL | s/35524 | `/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list` |
|
|
| ANALISIS DE EQUIPOS DE VOLEIBOL 2 | s/35525 | `/es/campus/student/training/e/14197/m/19096/s/35525/study-resources/list` |
|
|
| TRABAJO PRACTICO FINAL DE LA UNIDAD | s/35526 | `/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list` |
|
|
|
|
### Módulo 2 (m/19097) - ENTRENAMIENTO
|
|
|
|
| Sección | ID | URL |
|
|
|---|---|---|
|
|
| ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS/AS | s/35519 | `/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list` |
|
|
| PUNTAS Y LIBEROS/AS | s/35520 | `/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list` |
|
|
| ENTRENAMIENTO DE LOS Y LAS ARMADORAS | s/35521 | `/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list` |
|
|
| EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR | s/35522 | `/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list` |
|
|
|
|
## Recursos Encontrados
|
|
|
|
### 📹 Videos (Vimeo) - 23 videos + algunos adicionales
|
|
|
|
Los videos están embebidos via iframes de Vimeo. No se descargaron directamente, solo se guardaron referencias. IDs de Vimeo encontrados:
|
|
|
|
| # | ID de Vimeo | Sección |
|
|
|---|---|---|
|
|
| 1 | `919369433` | Centrales_y_Oponentes |
|
|
| 2 | `1179197191` | Centrales_y_Oponentes |
|
|
| 3 | `919341704` | Centrales_y_Oponentes |
|
|
| 4 | `919342668` | Centrales_y_Oponentes |
|
|
| 5 | `919346562` | Centrales_y_Oponentes |
|
|
| 6 | `919347866` | Centrales_y_Oponentes |
|
|
| 7 | `919348493` | Centrales_y_Oponentes |
|
|
| 8 | `919351892` | Centrales_y_Oponentes |
|
|
| 9 | `919352848` | Centrales_y_Oponentes |
|
|
| 10 | `919353448` | Centrales_y_Oponentes |
|
|
| 11 | `919354134` | Centrales_y_Oponentes |
|
|
| 12 | `919355668` | Centrales_y_Oponentes |
|
|
| 13 | `919356423` | Centrales_y_Oponentes |
|
|
| 14 | `919357109` | Centrales_y_Oponentes |
|
|
| 15 | `919358607` | Centrales_y_Oponentes |
|
|
| 16 | `919359386` | Centrales_y_Oponentes |
|
|
| 17 | `919359855` | Centrales_y_Oponentes |
|
|
| 18 | `919360318` | Centrales_y_Oponentes |
|
|
| 19 | `919363158` | Centrales_y_Oponentes |
|
|
| 20 | `919363728` | Centrales_y_Oponentes |
|
|
| 21 | `919364522` | Centrales_y_Oponentes |
|
|
| 22 | `919365485` | Centrales_y_Oponentes |
|
|
| 23 | `919366263` | Centrales_y_Oponentes |
|
|
|
|
Adicionalmente, otras secciones también tienen videos (Planificacion 1, Prep Atletica 3, Explicacion TP 1, Puntas y Liberos 12, Entrenamiento Armadoras 1, Explicacion TP 1).
|
|
|
|
### 📄 Archivos/Documentos
|
|
|
|
Se detectaron enlaces a recursos del curso:
|
|
- **"Abrir Archivo"** (disparan descarga nativa del navegador): IDs de recurso como `46874`, `46805`, `46926`, `50320`, `52903`, `46723`, `46724`, `53012`, `53137`, `53138`, `53139`, `46719`, `50329`, `46726`, `46725`, `53173`
|
|
- **"Abrir Enlace"** (redirigen a una página web): IDs como `46541`, `50142`, `50145`, `50144`, `50139`, `50140`, `50143`, `50141`
|
|
|
|
Los "Abrir Enlace" ya están capturados como HTML en los archivos `pagina.html` de cada sección.
|
|
|
|
### 🖼️ Imágenes
|
|
- Logo del curso
|
|
- Avatar de usuario por defecto
|
|
- Logo de OEC
|
|
|
|
## Autenticación
|
|
|
|
La plataforma usa **Auth0** como proveedor de identidad con Authorization Code Flow.
|
|
|
|
| Parámetro | Valor |
|
|
|---|---|
|
|
| Auth0 Domain | `auth.onlineeducation.center` |
|
|
| Client ID | `FelVoKUCb9QqtTFMSI2cggCbcw1klBbB` |
|
|
| Callback URL | `https://voley.onlineeducation.center/auth0/callback` |
|
|
| Tenant | `onlineeducationcenter` |
|
|
| Subdomain | `voley` |
|
|
| Database Connection | `Username-Password-Authentication` |
|
|
| Response Type | `code` (Authorization Code Flow) |
|
|
| Scope | `openid profile email` |
|
|
|
|
### Flujo de autenticación
|
|
1. GET a la URL del curso → redirige al login de Auth0
|
|
2. Login via `webAuth.login()` con `realm`, `username`, `password` + captcha
|
|
3. Auth0 redirige al `callbackURL` con un `code`
|
|
4. El servidor canjea el code por tokens y establece cookies de sesión
|
|
|
|
### Notas sobre acceso programático
|
|
- **ROPG (Resource Owner Password Grant)**: No disponible (responde `access_denied`)
|
|
- **Endpoint `/co/authenticate`**: Requiere origin header específico + captcha
|
|
- **Login vía Playwright**: Funciona correctamente. Las cookies se guardan en `session.json` para reuso
|
|
- **Sesión guardada**: Se puede reutilizar en ejecuciones posteriores automáticamente
|
|
|
|
## Contenido Descargado
|
|
|
|
### Directorio: `descargar-curso/descargas/`
|
|
|
|
```
|
|
descargas/
|
|
├── secciones/
|
|
│ ├── Modulo_1_Planificacion/
|
|
│ │ ├── Planificacion/
|
|
│ │ │ ├── pagina.html (HTML completo de la página)
|
|
│ │ │ ├── contenido.md (Texto extraído como Markdown)
|
|
│ │ │ ├── recursos.json (Lista de recursos encontrados)
|
|
│ │ │ ├── videos.md (Referencias a videos Vimeo)
|
|
│ │ │ ├── archivo_*.bin/html (Archivos descargados)
|
|
│ │ │ └── screenshot.png
|
|
│ │ ├── Preparacion_Atletica/ (misma estructura)
|
|
│ │ ├── Explicacion_TP/
|
|
│ │ ├── Seguimientos_Equipos/
|
|
│ │ ├── Analisis_Equipos_1/
|
|
│ │ ├── Analisis_Equipos_2/
|
|
│ │ └── TP_Final_Unidad/
|
|
│ └── Modulo_2_Entrenamiento/
|
|
│ ├── Centrales_y_Oponentes/ (misma estructura)
|
|
│ ├── Puntas_y_Liberos/
|
|
│ ├── Entrenamiento_Armadoras/
|
|
│ └── Explicacion_TP/
|
|
├── campus/ (páginas generales del campus)
|
|
├── subpaginas/ (otras páginas navegadas)
|
|
├── imagenes/ (imágenes descargadas)
|
|
├── videos/ (referencias a videos)
|
|
├── enlaces_encontrados.json
|
|
├── recursos_encontrados.json
|
|
└── resultado_descarga.json (reporte de la ejecución)
|
|
```
|
|
|
|
## Herramientas
|
|
|
|
### Script principal
|
|
- **Archivo**: `descargar-curso/download_course.mjs`
|
|
- **Runtime**: Node.js 20.20.1 con Playwright
|
|
- **Navegador**: Chromium headless
|
|
- **Dependencias**: `npm install playwright`, `npx playwright install chromium`
|
|
|
|
### Cómo ejecutar
|
|
```bash
|
|
cd descargar-curso
|
|
node download_course.mjs
|
|
```
|
|
|
|
### Archivos del proyecto
|
|
| Ruta | Propósito |
|
|
|---|---|
|
|
| `docs/CREDs.md` | Credenciales de acceso |
|
|
| `docs/HALLAZGOS.md` | Este archivo (documentación) |
|
|
| `descargar-curso/download_course.mjs` | Script principal de descarga |
|
|
| `descargar-curso/descargas/` | Contenido descargado del curso |
|
|
| `descargar-curso/session.json` | Cookies de sesión guardadas (para reuso) |
|
|
| `descargar-curso/package.json` | Dependencias Node.js |
|
|
|
|
## Pendiente / Mejoras Posibles
|
|
|
|
### 1. Descargar los PDFs/archivos reales
|
|
Los enlaces "Abrir Archivo" disparan una descarga nativa del navegador (Content-Disposition: attachment). Playwright lo maneja con el evento `download`, pero los selectores no coinciden exactamente (el href contiene query params). Solución: buscar el `<a>` por texto "Abrir Archivo" en lugar de por href exacto.
|
|
|
|
### 2. Descargar videos de Vimeo
|
|
Los videos están en Vimeo embebidos. Para descargarlos:
|
|
```bash
|
|
# Probar descarga directa (si el video es público)
|
|
yt-dlp "https://player.vimeo.com/video/{ID}"
|
|
|
|
# Si requiere autenticación, pasar cookies
|
|
yt-dlp --cookies ../session.json "https://player.vimeo.com/video/{ID}"
|
|
```
|
|
|
|
### 3. Extraer mejor el contenido textual
|
|
- El extractor de texto actual toma todo el texto visible del panel principal
|
|
- Se podría mejorar parseando el HTML para identificar: títulos, párrafos, listas, tablas
|
|
- Convertir a Markdown estructurado con formato
|
|
|
|
### 4. Dashboard HTML local
|
|
- Generar un `index.html` que funcione offline con enlaces a todas las secciones
|
|
- Que muestre el árbol del curso y permita navegar localmente
|
|
|
|
### 5. Descargar más páginas del curso
|
|
Solo se descargaron las 11 URLs de las secciones. Hay otras páginas del campus:
|
|
- Información general del curso
|
|
- Auditorio (webinars grabados)
|
|
- Foros
|
|
- Evaluaciones
|
|
- Trabajos prácticos
|
|
- Calificaciones
|
|
- Certificaciones
|
|
|
|
### 6. Almacenamiento de sesión
|
|
Las cookies de sesión expiran eventualmente. El script guarda `session.json` automáticamente después del login. Si la sesión expira, el script detecta la redirección al login y vuelve a autenticar.
|
|
|
|
## Comandos Útiles
|
|
|
|
```bash
|
|
# Ver todos los archivos descargados
|
|
find descargas -type f | sort
|
|
|
|
# Contar recursos por tipo
|
|
echo "HTML:" $(find descargas -name "pagina.html" | wc -l)
|
|
echo "Markdown:" $(find descargas -name "contenido.md" | wc -l)
|
|
echo "Videos ref:" $(find descargas -name "videos.md" | wc -l)
|
|
echo "JSON:" $(find descargas -name "recursos.json" | wc -l)
|
|
|
|
# Ver tamaño total
|
|
du -sh descargas/
|
|
|
|
# Limpiar descargas y empezar de nuevo
|
|
rm -rf descargas/* session.json
|
|
|
|
# Descargar un video de Vimeo (requiere yt-dlp)
|
|
yt-dlp "https://player.vimeo.com/video/919369433"
|
|
```
|
|
|
|
## Observaciones Técnicas
|
|
|
|
- **Auth0**: Usa captcha en el login. Playwright lo maneja porque lo renderiza en un contenedor oculto y el captcha de Auth0 no siempre se muestra para usuarios de confianza.
|
|
- **CORS/CSRF**: Los endpoints requieren headers específicos (Origin, Referer). Playwright los maneja automáticamente.
|
|
- **Rate limiting**: No se observó límite durante la ejecución. Se recomienda mantener delays de 1-2 segundos entre requests por cortesía.
|
|
- **Vimeo**: Los videos pueden requerir autenticación (el curso es privado). Si `yt-dlp` falla sin cookies, probar con `--cookies session.json`.
|
|
- **"Abrir Archivo" vs "Abrir Enlace"**: Los "Archivo" son descargas reales (PDF, DOC, etc.), los "Enlace" son páginas web con contenido ya capturado en `pagina.html`.
|
|
```
|