🎓 Primer commit: estructura del proyecto y material de estudio del Curso de Vóley
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
|
||||
usuario : saldis_karina@hotmail.com
|
||||
contraseña: Martes13#
|
||||
@@ -0,0 +1,237 @@
|
||||
# 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`.
|
||||
```
|
||||
Reference in New Issue
Block a user