🎓 Primer commit: estructura del proyecto y material de estudio del Curso de Vóley
@@ -0,0 +1,26 @@
|
||||
# Dependencias
|
||||
node_modules/
|
||||
descargar-curso/node_modules/
|
||||
|
||||
# Archivos de sesión
|
||||
descargar-curso/session.json
|
||||
descargar-curso/.cookies_*.txt
|
||||
descargar-curso/.mapa_videos.json
|
||||
descargar-curso/.videos_descargados.txt
|
||||
descargar-curso/.lista_videos.txt
|
||||
|
||||
# Videos descargados (son grandes, mejor no subirlos)
|
||||
descargar-curso/descargas/videos_offline/
|
||||
|
||||
# Temporales
|
||||
/tmp/
|
||||
*.tmp
|
||||
*.part
|
||||
*.ytdl
|
||||
|
||||
# Logs
|
||||
descargar-curso/descarga_videos.log
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
@@ -0,0 +1,836 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* COMPLETAR OFFLINE — Versión definitiva
|
||||
* =======================================
|
||||
*
|
||||
* 1. Descarga los 42 videos de Vimeo usando las cookies de sesión
|
||||
* 2. Los convierte a formato compatible con navegador (MP4)
|
||||
* 3. Regenera LIBRO_DE_ESTUDIO.html y LIBRO_DE_ESTUDIO.md
|
||||
* con los videos incrustados como <video> local o referencias
|
||||
*
|
||||
* Modo de uso:
|
||||
* node completar_offline.mjs
|
||||
*
|
||||
* Requisitos:
|
||||
* - yt-dlp instalado (pip install yt-dlp)
|
||||
* - session.json de Playwright en la carpeta raíz
|
||||
* - Los HTML descargados (de download_course.mjs)
|
||||
*
|
||||
* Archivos de salida:
|
||||
* descargas/videos_offline/ → videos descargados (.mp4)
|
||||
* descargas/LIBRO_DE_ESTUDIO.html → libro con videos locales
|
||||
* descargas/LIBRO_DE_ESTUDIO.md → libro con referencias
|
||||
*/
|
||||
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { execSync, spawn } from "child_process";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const DOWNLOADS_DIR = path.join(__dirname, "descargas");
|
||||
const SECCIONES_DIR = path.join(DOWNLOADS_DIR, "secciones");
|
||||
const VIDEOS_DIR = path.join(DOWNLOADS_DIR, "videos_offline");
|
||||
const SESSION_JSON = path.join(__dirname, "session.json");
|
||||
const COOKIES_TXT = "/tmp/cookies_netscape_voley.txt";
|
||||
|
||||
// ── Estructura del curso ──
|
||||
const MODULOS = [
|
||||
{
|
||||
titulo: "Módulo 1 — Planificación",
|
||||
carpeta: "Modulo_1_Planificacion",
|
||||
secciones: [
|
||||
{ carpeta: "Planificacion", titulo: "Planificación" },
|
||||
{ carpeta: "Preparacion_Atletica", titulo: "Preparación Atlética" },
|
||||
{ carpeta: "Explicacion_TP", titulo: "Explicación del Trabajo Práctico" },
|
||||
{ carpeta: "Seguimientos_Equipos", titulo: "Seguimientos de Equipos" },
|
||||
{ carpeta: "Analisis_Equipos_1", titulo: "Análisis de Equipos 1" },
|
||||
{ carpeta: "Analisis_Equipos_2", titulo: "Análisis de Equipos 2" },
|
||||
{ carpeta: "TP_Final_Unidad", titulo: "TP Final de la Unidad" },
|
||||
],
|
||||
},
|
||||
{
|
||||
titulo: "Módulo 2 — Entrenamiento",
|
||||
carpeta: "Modulo_2_Entrenamiento",
|
||||
secciones: [
|
||||
{ carpeta: "Centrales_y_Oponentes", titulo: "Centrales y Opuestos/as" },
|
||||
{ carpeta: "Puntas_y_Liberos", titulo: "Puntas y Liberos/as" },
|
||||
{
|
||||
carpeta: "Entrenamiento_Armadoras",
|
||||
titulo: "Entrenamiento de Armadoras",
|
||||
},
|
||||
{ carpeta: "Explicacion_TP", titulo: "Explicación del TP" },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// FUNCIONES AUXILIARES
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
function log(msg) {
|
||||
const ts = new Date().toISOString().replace("T", " ").substring(0, 19);
|
||||
console.log(`[${ts}] ${msg}`);
|
||||
}
|
||||
|
||||
function ensureDir(dir) {
|
||||
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
|
||||
function sleep(ms) {
|
||||
return new Promise((r) => setTimeout(r, ms));
|
||||
}
|
||||
|
||||
/**
|
||||
* Convierte el session.json de Playwright a cookies en formato Netscape
|
||||
* que yt-dlp pueda usar.
|
||||
*/
|
||||
function convertirCookies() {
|
||||
if (!fs.existsSync(SESSION_JSON)) {
|
||||
log("⚠ No se encontró session.json. Ejecutá primero download_course.mjs");
|
||||
return false;
|
||||
}
|
||||
|
||||
const data = JSON.parse(fs.readFileSync(SESSION_JSON, "utf-8"));
|
||||
const cookies = data.cookies || [];
|
||||
|
||||
const lines = ["# Netscape HTTP Cookie File"];
|
||||
for (const c of cookies) {
|
||||
const domain = c.domain;
|
||||
const flag = domain.startsWith(".") ? "TRUE" : "FALSE";
|
||||
const path = c.path || "/";
|
||||
const secure = c.secure ? "TRUE" : "FALSE";
|
||||
const exp = c.expires > 0 ? String(Math.floor(c.expires)) : "1778594896";
|
||||
const name = c.name;
|
||||
const value = c.value;
|
||||
lines.push(
|
||||
`${domain}\t${flag}\t${path}\t${secure}\t${exp}\t${name}\t${value}`,
|
||||
);
|
||||
}
|
||||
|
||||
fs.writeFileSync(COOKIES_TXT, lines.join("\n") + "\n");
|
||||
log(`✓ Cookies convertidas (${cookies.length} cookies)`);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// PASO 1: EXTRAER TODOS LOS VIDEOS DEL HTML DESCARGADO
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
function extraerTodosLosVideos() {
|
||||
const videos = [];
|
||||
const vistos = new Set();
|
||||
|
||||
for (const modulo of MODULOS) {
|
||||
for (const seccion of modulo.secciones) {
|
||||
const htmlPath = path.join(
|
||||
SECCIONES_DIR,
|
||||
modulo.carpeta,
|
||||
seccion.carpeta,
|
||||
"pagina.html",
|
||||
);
|
||||
if (!fs.existsSync(htmlPath)) continue;
|
||||
|
||||
const html = fs.readFileSync(htmlPath, "utf-8");
|
||||
if (html.includes("500 Internal Server Error")) continue;
|
||||
|
||||
// Buscar todos los IDs de Vimeo en esta página
|
||||
const regex = /player\.vimeo\.com\/video\/(\d+)/g;
|
||||
let match;
|
||||
while ((match = regex.exec(html)) !== null) {
|
||||
const id = match[1];
|
||||
if (vistos.has(id)) continue;
|
||||
vistos.add(id);
|
||||
|
||||
// Extraer el título del tema asociado (buscar hacia atrás)
|
||||
const before = html.substring(
|
||||
Math.max(0, match.index - 400),
|
||||
match.index,
|
||||
);
|
||||
const tituloMatch = before.match(/<em>([^<]+)<\/em>/);
|
||||
const titulo = tituloMatch
|
||||
? tituloMatch[1]
|
||||
.trim()
|
||||
.replace(/[<>:"/\\|?*]+/g, "_")
|
||||
.substring(0, 80)
|
||||
: `video_${id}`;
|
||||
|
||||
// Extraer la página que embebe el video (para pasarla a yt-dlp)
|
||||
const paginaURL = `https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/${modulo.carpeta.includes("1") ? "19096" : "19097"}/s/${seccion.carpeta === "Planificacion" ? "34868" : seccion.carpeta === "Preparacion_Atletica" ? "34869" : seccion.carpeta === "Explicacion_TP" && modulo.carpeta.includes("1") ? "34870" : seccion.carpeta === "Seguimientos_Equipos" ? "35523" : seccion.carpeta === "Analisis_Equipos_1" ? "35524" : seccion.carpeta === "Analisis_Equipos_2" ? "35525" : seccion.carpeta === "TP_Final_Unidad" ? "35526" : seccion.carpeta === "Centrales_y_Oponentes" ? "35519" : seccion.carpeta === "Puntas_y_Liberos" ? "35520" : seccion.carpeta === "Entrenamiento_Armadoras" ? "35521" : seccion.carpeta === "Explicacion_TP" && modulo.carpeta.includes("2") ? "35522" : "35519"}/study-resources/list`;
|
||||
|
||||
videos.push({
|
||||
id,
|
||||
titulo,
|
||||
pagina: seccion.carpeta,
|
||||
modulo: modulo.carpeta,
|
||||
nombreModulo: modulo.titulo,
|
||||
nombreSeccion: seccion.titulo,
|
||||
paginaURL,
|
||||
urlVimeo: `https://player.vimeo.com/video/${id}`,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return videos;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// PASO 2: DESCARGA DE VIDEOS
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
async function descargarVideos(videos) {
|
||||
ensureDir(VIDEOS_DIR);
|
||||
|
||||
// Verificar yt-dlp
|
||||
try {
|
||||
execSync("yt-dlp --version", { stdio: "ignore" });
|
||||
} catch {
|
||||
log("✗ yt-dlp no está instalado. Ejecutá: pip install yt-dlp");
|
||||
return [];
|
||||
}
|
||||
|
||||
if (!fs.existsSync(COOKIES_TXT)) {
|
||||
if (!convertirCookies()) return [];
|
||||
}
|
||||
|
||||
const descargados = [];
|
||||
|
||||
for (let i = 0; i < videos.length; i++) {
|
||||
const v = videos[i];
|
||||
const nombreSeguro =
|
||||
`${v.nombreModulo.replace(/[^a-zA-Z0-9_]/g, "_")}_${v.nombreSeccion.replace(/[^a-zA-Z0-9_]/g, "_")}_${v.titulo.replace(/[^a-zA-Z0-9_]/g, "_")}.mp4`.substring(
|
||||
0,
|
||||
120,
|
||||
);
|
||||
const rutaSalida = path.join(VIDEOS_DIR, nombreSeguro);
|
||||
|
||||
if (fs.existsSync(rutaSalida)) {
|
||||
log(
|
||||
` [${i + 1}/${videos.length}] ↺ Ya existe: ${v.titulo.substring(0, 40)}`,
|
||||
);
|
||||
descargados.push({ ...v, archivo: nombreSeguro });
|
||||
continue;
|
||||
}
|
||||
|
||||
log(
|
||||
` [${i + 1}/${videos.length}] ▶ Descargando: ${v.titulo.substring(0, 50)}...`,
|
||||
);
|
||||
|
||||
try {
|
||||
// yt-dlp con la página embebedora como URL y cookies
|
||||
const cmd = [
|
||||
"yt-dlp",
|
||||
"--cookies",
|
||||
COOKIES_TXT,
|
||||
"-o",
|
||||
rutaSalida,
|
||||
"--merge-output-format",
|
||||
"mp4",
|
||||
"--no-playlist",
|
||||
"--progress",
|
||||
"--print",
|
||||
"after_move:OK",
|
||||
v.paginaURL,
|
||||
].join(" ");
|
||||
|
||||
const output = execSync(cmd, {
|
||||
timeout: 300000, // 5 min por video
|
||||
stdio: ["ignore", "pipe", "pipe"],
|
||||
});
|
||||
|
||||
// Verificar que se haya descargado
|
||||
if (fs.existsSync(rutaSalida)) {
|
||||
const sizeMB = (fs.statSync(rutaSalida).size / 1024 / 1024).toFixed(1);
|
||||
log(` ✓ ${sizeMB} MB — ${v.titulo.substring(0, 40)}`);
|
||||
descargados.push({ ...v, archivo: nombreSeguro });
|
||||
} else {
|
||||
log(` ⚠ Archivo no encontrado después de descarga`);
|
||||
}
|
||||
} catch (err) {
|
||||
log(` ✗ Error: ${err.message.substring(0, 100)}`);
|
||||
}
|
||||
|
||||
// Pequeña pausa entre descargas
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
return descargados;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// PASO 3: GENERAR LIBRO DE ESTUDIO CON VIDEOS
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
function extraerTemas(filePath) {
|
||||
const temas = [];
|
||||
try {
|
||||
if (!fs.existsSync(filePath)) return temas;
|
||||
const html = fs.readFileSync(filePath, "utf-8");
|
||||
if (html.includes("500 Internal Server Error")) return temas;
|
||||
|
||||
// Extraer tablas de estudio
|
||||
const tablas = extraerTablas(html);
|
||||
for (const tabla of tablas) {
|
||||
const filas = extraerFilas(tabla);
|
||||
for (const fila of filas) {
|
||||
if (!fila.includes("<td")) continue;
|
||||
const tema = procesarFila(fila);
|
||||
if (tema) temas.push(tema);
|
||||
}
|
||||
}
|
||||
} catch {}
|
||||
return temas;
|
||||
}
|
||||
|
||||
function extraerTablas(html) {
|
||||
const tablas = [];
|
||||
let pos = 0;
|
||||
while (true) {
|
||||
const start = html.indexOf(
|
||||
'<table class="table table-bordered study-resources"',
|
||||
pos,
|
||||
);
|
||||
if (start === -1) break;
|
||||
const openEnd = html.indexOf(">", start);
|
||||
if (openEnd === -1) break;
|
||||
|
||||
let depth = 1;
|
||||
let searchPos = openEnd + 1;
|
||||
while (depth > 0 && searchPos < html.length) {
|
||||
const nextOpen = html.indexOf("<table", searchPos);
|
||||
const nextClose = html.indexOf("</table>", searchPos);
|
||||
if (nextClose === -1) break;
|
||||
if (nextOpen !== -1 && nextOpen < nextClose) {
|
||||
depth++;
|
||||
searchPos = nextOpen + 6;
|
||||
} else {
|
||||
depth--;
|
||||
searchPos = nextClose + 8;
|
||||
}
|
||||
}
|
||||
tablas.push(html.substring(start, searchPos));
|
||||
pos = searchPos;
|
||||
}
|
||||
return tablas;
|
||||
}
|
||||
|
||||
function extraerFilas(tablaHTML) {
|
||||
const filas = [];
|
||||
const tbodyStart = tablaHTML.indexOf("<tbody>");
|
||||
if (tbodyStart === -1) return filas;
|
||||
const tbody = tablaHTML.substring(tbodyStart);
|
||||
|
||||
let pos = 0;
|
||||
while (true) {
|
||||
const trStart = tbody.indexOf("<tr", pos);
|
||||
if (trStart === -1) break;
|
||||
let depth = 1;
|
||||
let tableDepth = 0;
|
||||
let searchPos = trStart + 3;
|
||||
while (depth > 0 && searchPos < tbody.length) {
|
||||
const ops = [
|
||||
{ type: "trO", pos: tbody.indexOf("<tr", searchPos) },
|
||||
{ type: "trC", pos: tbody.indexOf("</tr>", searchPos) },
|
||||
{ type: "tableO", pos: tbody.indexOf("<table", searchPos) },
|
||||
{ type: "tableC", pos: tbody.indexOf("</table>", searchPos) },
|
||||
].filter((o) => o.pos !== -1);
|
||||
if (ops.length === 0) break;
|
||||
const earliest = ops.sort((a, b) => a.pos - b.pos)[0];
|
||||
switch (earliest.type) {
|
||||
case "tableO":
|
||||
tableDepth++;
|
||||
searchPos = earliest.pos + 6;
|
||||
break;
|
||||
case "tableC":
|
||||
tableDepth = Math.max(0, tableDepth - 1);
|
||||
searchPos = earliest.pos + 7;
|
||||
break;
|
||||
case "trO":
|
||||
if (tableDepth === 0) depth++;
|
||||
searchPos = earliest.pos + 3;
|
||||
break;
|
||||
case "trC":
|
||||
if (tableDepth === 0) depth--;
|
||||
searchPos = earliest.pos + 5;
|
||||
break;
|
||||
}
|
||||
}
|
||||
filas.push(tbody.substring(trStart, searchPos));
|
||||
pos = searchPos;
|
||||
}
|
||||
return filas;
|
||||
}
|
||||
|
||||
function procesarFila(filaHTML) {
|
||||
const tituloMatch = filaHTML.match(/<em>([\s\S]*?)<\/em>/i);
|
||||
const titulo = tituloMatch
|
||||
? limpiarHTML(tituloMatch[1]).trim()
|
||||
: "Sin título";
|
||||
|
||||
const vimeoMatch = filaHTML.match(/player\.vimeo\.com\/video\/(\d+)/i);
|
||||
const vimeoID = vimeoMatch ? vimeoMatch[1] : null;
|
||||
|
||||
const recursoMatch = filaHTML.match(
|
||||
/<a[^>]*href="([^"]*)"[^>]*class="btn[^"]*"[^>]*>(Abrir (?:Archivo|Enlace))<\/a>/i,
|
||||
);
|
||||
const recursoURL = recursoMatch ? recursoMatch[1] : null;
|
||||
const recursoTexto = recursoMatch ? recursoMatch[2] : null;
|
||||
|
||||
const contenidoMatch = filaHTML.match(
|
||||
/<div class="redactor-usr-input">([\s\S]*?)<\/div>/i,
|
||||
);
|
||||
let contenidoHTML = contenidoMatch ? contenidoMatch[1].trim() : "";
|
||||
|
||||
if (!contenidoHTML && !vimeoID && !recursoURL) return null;
|
||||
|
||||
const id = titulo
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9áéíóúüñ]+/gi, "-")
|
||||
.replace(/-+/g, "-")
|
||||
.replace(/^-|-$/g, "");
|
||||
|
||||
return { id, titulo, contenidoHTML, vimeoID, recursoURL, recursoTexto };
|
||||
}
|
||||
|
||||
function limpiarHTML(html) {
|
||||
return html
|
||||
.replace(/<[^>]*>/g, "")
|
||||
.replace(/ /g, " ")
|
||||
.replace(/&/g, "&")
|
||||
.replace(/</g, "<")
|
||||
.replace(/>/g, ">")
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, "'")
|
||||
.replace(/\s+/g, " ")
|
||||
.trim();
|
||||
}
|
||||
|
||||
function htmlAMarkdown(html) {
|
||||
if (!html) return "";
|
||||
let md = html;
|
||||
md = md.replace(/<h1[^>]*>([\s\S]*?)<\/h1>/gi, "# $1\n\n");
|
||||
md = md.replace(/<h2[^>]*>([\s\S]*?)<\/h2>/gi, "## $1\n\n");
|
||||
md = md.replace(/<h3[^>]*>([\s\S]*?)<\/h3>/gi, "### $1\n\n");
|
||||
md = md.replace(/<h4[^>]*>([\s\S]*?)<\/h4>/gi, "#### $1\n\n");
|
||||
md = md.replace(/<strong>([\s\S]*?)<\/strong>/gi, "**$1**");
|
||||
md = md.replace(/<b>([\s\S]*?)<\/b>/gi, "**$1**");
|
||||
md = md.replace(/<em>([\s\S]*?)<\/em>/gi, "*$1*");
|
||||
md = md.replace(/<i>([\s\S]*?)<\/i>/gi, "*$1*");
|
||||
md = md.replace(/<p[^>]*>([\s\S]*?)<\/p>/gi, "$1\n\n");
|
||||
md = md.replace(/<ul[^>]*>([\s\S]*?)<\/ul>/gi, "$1\n");
|
||||
md = md.replace(/<ol[^>]*>([\s\S]*?)<\/ol>/gi, "$1\n");
|
||||
md = md.replace(/<li[^>]*>([\s\S]*?)<\/li>/gi, "- $1\n");
|
||||
md = md.replace(/<blockquote[^>]*>([\s\S]*?)<\/blockquote>/gi, "> $1\n\n");
|
||||
md = md.replace(/<table[^>]*>([\s\S]*?)<\/table>/gi, (_, t) =>
|
||||
tablaAMarkdown(t),
|
||||
);
|
||||
md = md.replace(/<code[^>]*>([\s\S]*?)<\/code>/gi, "`$1`");
|
||||
md = md.replace(/<hr[^>]*>/gi, "\n---\n");
|
||||
// Entities
|
||||
const ents = {
|
||||
" ": " ",
|
||||
"&": "&",
|
||||
"<": "<",
|
||||
">": ">",
|
||||
""": '"',
|
||||
"'": "'",
|
||||
"á": "á",
|
||||
"é": "é",
|
||||
"í": "í",
|
||||
"ó": "ó",
|
||||
"ú": "ú",
|
||||
"ñ": "ñ",
|
||||
"Á": "Á",
|
||||
"É": "É",
|
||||
"Í": "Í",
|
||||
"Ó": "Ó",
|
||||
"Ú": "Ú",
|
||||
"Ñ": "Ñ",
|
||||
"ü": "ü",
|
||||
"Ü": "Ü",
|
||||
};
|
||||
for (const [k, v] of Object.entries(ents))
|
||||
md = md.replace(new RegExp(k, "g"), v);
|
||||
md = md.replace(/<[^>]*>/g, "");
|
||||
md = md.replace(/\n{4,}/g, "\n\n\n");
|
||||
md = md.replace(/[ \t]+\n/g, "\n");
|
||||
md = md
|
||||
.split("\n")
|
||||
.map((l) => l.trim())
|
||||
.join("\n");
|
||||
return md.trim();
|
||||
}
|
||||
|
||||
function tablaAMarkdown(tablaHTML) {
|
||||
const filas = [];
|
||||
const rowRegex = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
|
||||
let match;
|
||||
while ((match = rowRegex.exec(tablaHTML)) !== null) {
|
||||
const celdas = [];
|
||||
const cellRegex = /<t[dh][^>]*>([\s\S]*?)<\/t[dh]>/gi;
|
||||
let cm;
|
||||
while ((cm = cellRegex.exec(match[1])) !== null) {
|
||||
const celda = cm[1]
|
||||
.replace(/<br\s*\/?>/gi, " ")
|
||||
.replace(/<[^>]+>/g, "")
|
||||
.replace(/ /g, " ")
|
||||
.replace(/\s+/g, " ")
|
||||
.trim();
|
||||
celdas.push(celda);
|
||||
}
|
||||
if (celdas.length > 0) filas.push(celdas);
|
||||
}
|
||||
if (filas.length === 0) return "";
|
||||
const numCols = Math.max(...filas.map((f) => f.length));
|
||||
let md = "\n";
|
||||
while (filas[0].length < numCols) filas[0].push("");
|
||||
md += "| " + filas[0].join(" | ") + " |\n";
|
||||
md += "| " + filas[0].map(() => "---").join(" | ") + " |\n";
|
||||
for (let i = 1; i < filas.length; i++) {
|
||||
while (filas[i].length < numCols) filas[i].push("");
|
||||
md += "| " + filas[i].join(" | ") + " |\n";
|
||||
}
|
||||
md += "\n";
|
||||
return md;
|
||||
}
|
||||
|
||||
function generarContenido(videosDescargados) {
|
||||
// Mapa de video ID → archivo local
|
||||
const mapaVideos = {};
|
||||
for (const v of videosDescargados) {
|
||||
mapaVideos[v.id] = v.archivo;
|
||||
}
|
||||
|
||||
const libros = [];
|
||||
for (const modulo of MODULOS) {
|
||||
const seccionesConContenido = [];
|
||||
for (const seccion of modulo.secciones) {
|
||||
const htmlPath = path.join(
|
||||
SECCIONES_DIR,
|
||||
modulo.carpeta,
|
||||
seccion.carpeta,
|
||||
"pagina.html",
|
||||
);
|
||||
const temas = extraerTemas(htmlPath);
|
||||
if (temas.length > 0) {
|
||||
// Asignar videos descargados a los temas
|
||||
for (const tema of temas) {
|
||||
if (tema.vimeoID && mapaVideos[tema.vimeoID]) {
|
||||
tema.videoLocal = mapaVideos[tema.vimeoID];
|
||||
}
|
||||
}
|
||||
seccionesConContenido.push({ titulo: seccion.titulo, temas });
|
||||
}
|
||||
}
|
||||
if (seccionesConContenido.length > 0) {
|
||||
libros.push({ titulo: modulo.titulo, secciones: seccionesConContenido });
|
||||
}
|
||||
}
|
||||
return libros;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// GENERAR MARKDOWN
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
function generarMarkdown(libros) {
|
||||
const fecha = new Date().toLocaleDateString("es-AR", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
});
|
||||
let totalTemas = 0;
|
||||
let md = `# Curso de Entrenador Nacional de Vóley
|
||||
## Material de Estudio Completo
|
||||
|
||||
*Generado el ${fecha}*
|
||||
*Incluye contenido de texto + videos descargados offline*
|
||||
|
||||
---
|
||||
|
||||
`;
|
||||
|
||||
for (const modulo of libros) {
|
||||
md += `# ${modulo.titulo}\n\n`;
|
||||
for (const seccion of modulo.secciones) {
|
||||
md += `## ${seccion.titulo}\n\n`;
|
||||
for (let t = 0; t < seccion.temas.length; t++) {
|
||||
const tema = seccion.temas[t];
|
||||
totalTemas++;
|
||||
md += `### ${t + 1}. ${tema.titulo}\n\n`;
|
||||
|
||||
if (tema.videoLocal) {
|
||||
md += `🎬 **Video:** \`${tema.videoLocal}\` *(archivo local)*\n\n`;
|
||||
} else if (tema.vimeoID) {
|
||||
md += `📹 *Video disponible — ID: ${tema.vimeoID}*\n\n`;
|
||||
}
|
||||
|
||||
if (tema.contenidoHTML) {
|
||||
md += htmlAMarkdown(tema.contenidoHTML);
|
||||
md += "\n\n";
|
||||
}
|
||||
|
||||
if (tema.recursoURL) {
|
||||
const icono = tema.recursoTexto === "Abrir Archivo" ? "📄" : "🔗";
|
||||
md += `${icono} **${tema.recursoTexto}:** ${tema.titulo} — \`${tema.recursoURL}\`\n\n`;
|
||||
}
|
||||
|
||||
if (t < seccion.temas.length - 1) md += "---\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
md += `\n---\n*Fin del material. ${totalTemas} temas · ${Object.keys(mapaVideos).filter((k) => mapaVideos[k]).length} videos descargados.*\n`;
|
||||
return md;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// GENERAR HTML (con videos incrustados)
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
let mapaVideos = {};
|
||||
|
||||
function generarHTML(libros) {
|
||||
const fecha = new Date().toLocaleDateString("es-AR", {
|
||||
year: "numeric",
|
||||
month: "long",
|
||||
day: "numeric",
|
||||
});
|
||||
let totalModulos = libros.length;
|
||||
let totalSecciones = 0;
|
||||
let totalTemas = 0;
|
||||
for (const m of libros) {
|
||||
totalSecciones += m.secciones.length;
|
||||
for (const s of m.secciones) totalTemas += s.temas.length;
|
||||
}
|
||||
const totalVidsDesc = Object.values(mapaVideos).filter(Boolean).length;
|
||||
|
||||
const videoHTML = (tema) => {
|
||||
if (tema.videoLocal) {
|
||||
const rutaRelativa = `../videos_offline/${tema.videoLocal}`;
|
||||
return `<div class="video-wrapper">
|
||||
<video controls preload="metadata" width="100%">
|
||||
<source src="${rutaRelativa}" type="video/mp4">
|
||||
Tu navegador no soporta video HTML5.
|
||||
</video>
|
||||
<div class="video-label">🎬 ${tema.titulo}</div>
|
||||
</div>`;
|
||||
}
|
||||
if (tema.vimeoID) {
|
||||
return `<p class="video-ref">📹 <em>Video no descargado (ID: ${tema.vimeoID})</em></p>`;
|
||||
}
|
||||
return "";
|
||||
};
|
||||
|
||||
const css = `
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body { font-family: 'Segoe UI', Georgia, serif; background: #f5f3ef; color: #2c2c2c; line-height: 1.8; font-size: 17px; }
|
||||
.portada { background: linear-gradient(135deg, #0d2b3e 0%, #1a5276 50%, #2980b9 100%); color: white; padding: 5rem 2rem; text-align: center; min-height: 70vh; display: flex; flex-direction: column; justify-content: center; align-items: center; }
|
||||
.portada h1 { font-size: 2.8rem; margin-bottom: 0.5rem; font-weight: 700; }
|
||||
.portada h2 { font-size: 1.4rem; font-weight: 300; opacity: 0.9; }
|
||||
.portada .stats { margin-top: 2rem; display: flex; gap: 2rem; flex-wrap: wrap; justify-content: center; }
|
||||
.portada .stat { background: rgba(255,255,255,0.12); padding: 0.6rem 1.2rem; border-radius: 8px; font-size: 0.9rem; }
|
||||
.indice { background: white; padding: 2rem; max-width: 900px; margin: 0 auto; border-bottom: 1px solid #e0e0e0; }
|
||||
.indice h2 { color: #0d2b3e; margin-bottom: 1rem; }
|
||||
.indice ul { list-style: none; }
|
||||
.indice li { padding: 0.3rem 0; }
|
||||
.indice a { color: #1a5276; text-decoration: none; border-bottom: 1px solid #ddd; }
|
||||
.indice a:hover { border-bottom-color: #1a5276; }
|
||||
.indice .mod-tit { font-weight: 600; margin-top: 0.8rem; color: #0d2b3e; font-size: 1.05rem; }
|
||||
.contenido { max-width: 900px; margin: 0 auto; padding: 2rem; background: white; }
|
||||
.contenido h1 { color: #0d2b3e; font-size: 2rem; border-bottom: 3px solid #2980b9; padding-bottom: 0.5rem; margin: 3rem 0 1.5rem; }
|
||||
.contenido h2 { color: #1a5276; font-size: 1.5rem; margin: 2rem 0 1rem; border-left: 4px solid #2980b9; padding-left: 0.8rem; }
|
||||
.contenido h3 { color: #0d2b3e; font-size: 1.15rem; margin: 1.5rem 0 0.5rem; }
|
||||
.contenido p { margin: 0.6rem 0; text-align: justify; }
|
||||
.contenido ul, .contenido ol { margin: 0.6rem 0; padding-left: 1.5rem; }
|
||||
.contenido li { margin: 0.3rem 0; }
|
||||
.contenido strong { color: #0d2b3e; }
|
||||
.contenido hr { border: none; border-top: 1px solid #e0e0e0; margin: 1.5rem 0; }
|
||||
.contenido table { width: 100%; border-collapse: collapse; margin: 1rem 0; font-size: 0.9rem; }
|
||||
.contenido th, .contenido td { border: 1px solid #ddd; padding: 0.5rem; text-align: left; }
|
||||
.contenido th { background: #0d2b3e; color: white; }
|
||||
.contenido tr:nth-child(even) { background: #f9f9f9; }
|
||||
.contenido blockquote { border-left: 4px solid #2980b9; margin: 1rem 0; padding: 0.5rem 1rem; background: #f0f5fa; font-style: italic; color: #555; }
|
||||
.contenido .tema-num { background: #2980b9; color: white; display: inline-block; padding: 0.1rem 0.5rem; border-radius: 4px; font-size: 0.8rem; margin-right: 0.5rem; }
|
||||
.video-wrapper { margin: 1rem 0; background: #000; border-radius: 8px; overflow: hidden; }
|
||||
.video-wrapper video { display: block; max-height: 500px; }
|
||||
.video-label { background: #0d2b3e; color: white; padding: 0.4rem 0.8rem; font-size: 0.85rem; text-align: center; }
|
||||
.video-ref { color: #888; font-style: italic; font-size: 0.9rem; margin: 0.5rem 0; padding: 0.3rem 0.6rem; border-left: 3px solid #ccc; background: #fafafa; }
|
||||
.recurso-link { display: inline-block; background: #e8f4f8; border: 1px solid #b3d9e8; border-radius: 4px; padding: 0.2rem 0.6rem; font-size: 0.85rem; margin: 0.3rem 0; color: #1a5276; text-decoration: none; }
|
||||
.recurso-link:hover { background: #d0ebf5; }
|
||||
.footer { text-align: center; padding: 3rem 2rem; color: #999; font-size: 0.85rem; max-width: 900px; margin: 0 auto; }
|
||||
|
||||
@media (max-width: 600px) {
|
||||
body { font-size: 15px; }
|
||||
.portada { padding: 2rem 1rem; min-height: auto; }
|
||||
.portada h1 { font-size: 1.8rem; }
|
||||
.contenido { padding: 1rem; }
|
||||
}
|
||||
`;
|
||||
|
||||
// Índice
|
||||
let idx = '<div class="indice"><h2>📑 Índice de contenidos</h2><ul>';
|
||||
for (const modulo of libros) {
|
||||
idx += `<li class="mod-tit">${modulo.titulo}</li><ul>`;
|
||||
for (let j = 0; j < modulo.secciones.length; j++) {
|
||||
const s = modulo.secciones[j];
|
||||
const anchor = `sec-${modulo.titulo.replace(/[^a-zA-Z0-9]/g, "")}-${s.titulo.replace(/[^a-zA-Z0-9]/g, "")}`;
|
||||
idx += `<li><a href="#${anchor}">${s.titulo} (${s.temas.length} temas)</a></li>`;
|
||||
}
|
||||
idx += "</ul>";
|
||||
}
|
||||
idx += "</ul></div>";
|
||||
|
||||
// Cuerpo
|
||||
let body = "";
|
||||
for (const modulo of libros) {
|
||||
body += `<h1>${modulo.titulo}</h1>\n`;
|
||||
for (const seccion of modulo.secciones) {
|
||||
const anchor = `sec-${modulo.titulo.replace(/[^a-zA-Z0-9]/g, "")}-${seccion.titulo.replace(/[^a-zA-Z0-9]/g, "")}`;
|
||||
body += `<h2 id="${anchor}">${seccion.titulo}</h2>\n`;
|
||||
for (let t = 0; t < seccion.temas.length; t++) {
|
||||
const tema = seccion.temas[t];
|
||||
body += `<h3><span class="tema-num">${t + 1}</span> ${tema.titulo}</h3>\n`;
|
||||
body += videoHTML(tema);
|
||||
if (tema.contenidoHTML) {
|
||||
body += `<div class="estudio-contenido">${tema.contenidoHTML}</div>\n`;
|
||||
}
|
||||
if (tema.recursoURL) {
|
||||
const icono = tema.recursoTexto === "Abrir Archivo" ? "📄" : "🔗";
|
||||
const urlCompleta = tema.recursoURL.startsWith("http")
|
||||
? tema.recursoURL
|
||||
: `https://voley.onlineeducation.center${tema.recursoURL}`;
|
||||
body += `<p><a class="recurso-link" href="${urlCompleta}" target="_blank">${icono} ${tema.recursoTexto}: ${tema.titulo}</a></p>\n`;
|
||||
}
|
||||
if (t < seccion.temas.length - 1) body += "<hr>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Footer
|
||||
body += `<p style="text-align:center;color:#999;margin-top:3rem;font-size:0.85rem;">— Fin del material de estudio —</p>`;
|
||||
|
||||
return `<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Curso de Vóley — Material de Estudio Completo</title>
|
||||
<style>${css}</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="portada">
|
||||
<h1>🏐 Curso de Entrenador Nacional de Vóley</h1>
|
||||
<h2>Material de Estudio Completo</h2>
|
||||
<p>Contenido + videos descargados — 100% offline</p>
|
||||
<div class="stats">
|
||||
<div class="stat">📚 ${totalModulos} módulos</div>
|
||||
<div class="stat">📖 ${totalSecciones} secciones</div>
|
||||
<div class="stat">🎯 ${totalTemas} temas</div>
|
||||
<div class="stat">🎬 ${totalVidsDesc} videos</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
${idx}
|
||||
|
||||
<div class="contenido">
|
||||
${body}
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>Generado el ${fecha} — Online Education Center</p>
|
||||
<p>Material de estudio 100% offline</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>`;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
// MAIN
|
||||
// ══════════════════════════════════════════════════════════════
|
||||
|
||||
async function main() {
|
||||
console.log("");
|
||||
console.log("═══════════════════════════════════════════════════");
|
||||
console.log(" COMPLETAR OFFLINE — Videos + Libro de Estudio");
|
||||
console.log("═══════════════════════════════════════════════════");
|
||||
console.log("");
|
||||
|
||||
// Paso 1: Extraer videos del HTML
|
||||
log("Paso 1: Extrayendo videos del contenido descargado...");
|
||||
const todosLosVideos = extraerTodosLosVideos();
|
||||
log(` ✓ ${todosLosVideos.length} videos únicos encontrados`);
|
||||
log("");
|
||||
|
||||
// Paso 2: Descargar videos
|
||||
log("Paso 2: Descargando videos de Vimeo...");
|
||||
log(" (Puede tomar tiempo dependiendo de tu conexión)");
|
||||
log("");
|
||||
|
||||
const videosDescargados = await descargarVideos(todosLosVideos);
|
||||
log("");
|
||||
log(
|
||||
` ✓ ${videosDescargados.length}/${todosLosVideos.length} videos descargados`,
|
||||
);
|
||||
|
||||
// Construir mapa global
|
||||
globalThis.mapaVideos = {};
|
||||
for (const v of videosDescargados) {
|
||||
globalThis.mapaVideos[v.id] = v.archivo;
|
||||
}
|
||||
|
||||
// Paso 3: Generar libro de estudio
|
||||
log("");
|
||||
log("Paso 3: Generando libro de estudio con videos...");
|
||||
const libros = generarContenido(videosDescargados);
|
||||
|
||||
// Markdown
|
||||
const md = generarMarkdown(libros);
|
||||
const mdPath = path.join(DOWNLOADS_DIR, "LIBRO_DE_ESTUDIO.md");
|
||||
fs.writeFileSync(mdPath, md, "utf-8");
|
||||
log(` ✓ ${mdPath} (${(md.length / 1024).toFixed(0)} KB)`);
|
||||
|
||||
// HTML
|
||||
const html = generarHTML(libros);
|
||||
const htmlPath = path.join(DOWNLOADS_DIR, "LIBRO_DE_ESTUDIO.html");
|
||||
fs.writeFileSync(htmlPath, html, "utf-8");
|
||||
log(` ✓ ${htmlPath} (${(html.length / 1024).toFixed(0)} KB)`);
|
||||
|
||||
// Estadísticas
|
||||
let totalPalabras = 0;
|
||||
let totalTemas = 0;
|
||||
for (const m of libros) {
|
||||
for (const s of m.secciones) {
|
||||
for (const t of s.temas) {
|
||||
totalTemas++;
|
||||
if (t.contenidoHTML) {
|
||||
totalPalabras += t.contenidoHTML
|
||||
.replace(/<[^>]*>/g, "")
|
||||
.split(/\s+/).length;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log("");
|
||||
log("═══════════════════════════════════════════════════");
|
||||
log(" COMPLETADO");
|
||||
log("═══════════════════════════════════════════════════");
|
||||
log("");
|
||||
log(` 📚 ${libros.length} módulos · ${totalTemas} temas`);
|
||||
log(` 📝 ~${(totalPalabras / 1000).toFixed(1)}k palabras de contenido`);
|
||||
log(
|
||||
` 🎬 ${videosDescargados.length} videos descargados (en videos_offline/)`,
|
||||
);
|
||||
log("");
|
||||
log(" Para abrir el libro de estudio:");
|
||||
log(` file://${htmlPath}`);
|
||||
log("");
|
||||
}
|
||||
|
||||
main().catch((err) => {
|
||||
console.error("Error:", err.message);
|
||||
process.exit(1);
|
||||
});
|
||||
@@ -0,0 +1,482 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# DESCARGAR VIDEOS DEL CURSO DE VOLEY
|
||||
# ====================================
|
||||
# Descarga los 42 videos de Vimeo con reanudación automática.
|
||||
# Puede detenerse y reanudarse cuando quieras.
|
||||
#
|
||||
# Modo de uso:
|
||||
# bash descargar_videos.sh
|
||||
#
|
||||
# Opciones:
|
||||
# bash descargar_videos.sh --resume # Reanuda descargas pendientes
|
||||
# bash descargar_videos.sh --status # Ver estado de descargas
|
||||
# bash descargar_videos.sh --clean # Borrar todo y empezar de nuevo
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# ─── CONFIGURACIÓN ───────────────────────────────────────────
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
SESSION_JSON="$SCRIPT_DIR/session.json"
|
||||
COOKIES_FILE="$SCRIPT_DIR/.cookies_voley.txt"
|
||||
VIDEOS_DIR="$SCRIPT_DIR/descargas/videos_offline"
|
||||
REGISTRO="$SCRIPT_DIR/.videos_descargados.txt"
|
||||
LISTA_VIDEOS="$SCRIPT_DIR/.lista_videos.txt"
|
||||
DEST_DIR="$SCRIPT_DIR/descargas"
|
||||
LIMIT_RATE="" # Ej: "5M" para limitar a 5 MB/s, vacío = sin límite
|
||||
|
||||
# ─── COLORES ─────────────────────────────────────────────────
|
||||
VERDE='\033[0;32m'
|
||||
AMARILLO='\033[1;33m'
|
||||
ROJO='\033[0;31m'
|
||||
AZUL='\033[0;34m'
|
||||
RESET='\033[0m'
|
||||
|
||||
ok() { echo -e " ${VERDE}✓${RESET} $1"; }
|
||||
warn() { echo -e " ${AMARILLO}⚠${RESET} $1"; }
|
||||
err() { echo -e " ${ROJO}✗${RESET} $1"; }
|
||||
info() { echo -e " ${AZUL}→${RESET} $1"; }
|
||||
|
||||
# ─── HELPERS ─────────────────────────────────────────────────
|
||||
|
||||
timestamp() {
|
||||
date '+%Y-%m-%d %H:%M:%S'
|
||||
}
|
||||
|
||||
log() {
|
||||
echo "[$(timestamp)] $1"
|
||||
}
|
||||
|
||||
check_dependencies() {
|
||||
if ! command -v yt-dlp &>/dev/null; then
|
||||
err "yt-dlp no está instalado."
|
||||
echo " Instalálo con: pip install yt-dlp"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v python3 &>/dev/null; then
|
||||
err "python3 no está instalado."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── CONVERTIR COOKIES ──────────────────────────────────────
|
||||
|
||||
convertir_cookies() {
|
||||
if [ ! -f "$SESSION_JSON" ]; then
|
||||
err "No se encontró $SESSION_JSON"
|
||||
echo " Ejecutá primero: node download_course.mjs"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Convirtiendo cookies de Playwright a formato Netscape..."
|
||||
|
||||
python3 -c "
|
||||
import json
|
||||
|
||||
with open('$SESSION_JSON') as f:
|
||||
data = json.load(f)
|
||||
|
||||
cookies = data.get('cookies', [])
|
||||
lines = ['# Netscape HTTP Cookie File']
|
||||
|
||||
for c in cookies:
|
||||
domain = c.get('domain', '')
|
||||
if not domain:
|
||||
continue
|
||||
flag = 'TRUE' if domain.startswith('.') else 'FALSE'
|
||||
path = c.get('path', '/')
|
||||
secure = 'TRUE' if c.get('secure', False) else 'FALSE'
|
||||
exp = c.get('expires', 0)
|
||||
if exp <= 0:
|
||||
exp = 1778594896 # fecha lejana
|
||||
name = c.get('name', '')
|
||||
value = c.get('value', '')
|
||||
lines.append(f'{domain}\t{flag}\t{path}\t{secure}\t{int(exp)}\t{name}\t{value}')
|
||||
|
||||
with open('$COOKIES_FILE', 'w') as f:
|
||||
f.write('\n'.join(lines) + '\n')
|
||||
|
||||
print(f'{len(cookies)}')
|
||||
" 2>/dev/null
|
||||
|
||||
if [ -f "$COOKIES_FILE" ]; then
|
||||
local count=$(wc -l < "$COOKIES_FILE")
|
||||
ok "Cookies convertidas ($((count - 1)))"
|
||||
else
|
||||
err "Error al convertir cookies"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── EXTRAER LISTA DE VIDEOS ─────────────────────────────────
|
||||
|
||||
extraer_lista_videos() {
|
||||
log "Extrayendo lista de videos del HTML descargado..."
|
||||
|
||||
python3 -c "
|
||||
import os, re, json
|
||||
|
||||
base = '$DEST_DIR/secciones'
|
||||
modulos = ['Modulo_1_Planificacion', 'Modulo_2_Entrenamiento']
|
||||
|
||||
# Mapeo de carpetas a IDs de sección
|
||||
mapeo_secciones = {
|
||||
'Planificacion': ('m/19096', 's/34868'),
|
||||
'Preparacion_Atletica': ('m/19096', 's/34869'),
|
||||
'Explicacion_TP': ('m/19096', 's/34870'),
|
||||
'Seguimientos_Equipos': ('m/19096', 's/35523'),
|
||||
'Analisis_Equipos_1': ('m/19096', 's/35524'),
|
||||
'Analisis_Equipos_2': ('m/19096', 's/35525'),
|
||||
'TP_Final_Unidad': ('m/19096', 's/35526'),
|
||||
'Centrales_y_Oponentes': ('m/19097', 's/35519'),
|
||||
'Puntas_y_Liberos': ('m/19097', 's/35520'),
|
||||
'Entrenamiento_Armadoras': ('m/19097', 's/35521'),
|
||||
'Explicacion_TP': ('m/19097', 's/35522'),
|
||||
}
|
||||
|
||||
# Nombre humano de cada sección
|
||||
nombres = {
|
||||
'Planificacion': 'Planificacion',
|
||||
'Preparacion_Atletica': 'Preparacion_Atletica',
|
||||
'Explicacion_TP': 'Explicacion_TP',
|
||||
'Seguimientos_Equipos': 'Seguimientos_Equipos',
|
||||
'Analisis_Equipos_1': 'Analisis_Equipos_1',
|
||||
'Analisis_Equipos_2': 'Analisis_Equipos_2',
|
||||
'TP_Final_Unidad': 'TP_Final_Unidad',
|
||||
'Centrales_y_Oponentes': 'Centrales_y_Oponentes',
|
||||
'Puntas_y_Liberos': 'Puntas_y_Liberos',
|
||||
'Entrenamiento_Armadoras': 'Entrenamiento_Armadoras',
|
||||
}
|
||||
|
||||
videos = []
|
||||
vistos = set()
|
||||
|
||||
for mod in modulos:
|
||||
mod_path = os.path.join(base, mod)
|
||||
if not os.path.isdir(mod_path):
|
||||
continue
|
||||
for sec in os.listdir(mod_path):
|
||||
html_path = os.path.join(mod_path, sec, 'pagina.html')
|
||||
if not os.path.isfile(html_path):
|
||||
continue
|
||||
|
||||
html = open(html_path, 'r', errors='ignore').read()
|
||||
if '500 Internal Server Error' in html:
|
||||
continue
|
||||
|
||||
for m in re.finditer(r'player\.vimeo\.com/video/(\d+)', html):
|
||||
vid = m.group(1)
|
||||
if vid in vistos:
|
||||
continue
|
||||
vistos.add(vid)
|
||||
|
||||
# Buscar título del tema
|
||||
idx = m.start()
|
||||
before = html[max(0, idx - 400):idx]
|
||||
tm = re.search(r'<em>([^<]+)</em>', before)
|
||||
titulo = tm.group(1).strip() if tm else f'video_{vid}'
|
||||
# Limpiar caracteres no válidos para文件名
|
||||
titulo = re.sub(r'[<>:\"/\\\\|?*]+', '_', titulo)[:80]
|
||||
|
||||
# Construir URL de la página embebedora
|
||||
mapa = mapeo_secciones.get(sec)
|
||||
if mapa:
|
||||
mod_id, sec_id = mapa
|
||||
pagina_url = f'https://voley.onlineeducation.center/es/campus/student/training/e/14197/{mod_id}/{sec_id}/study-resources/list'
|
||||
else:
|
||||
pagina_url = ''
|
||||
|
||||
videos.append({
|
||||
'id': vid,
|
||||
'titulo': titulo,
|
||||
'seccion': nombres.get(sec, sec),
|
||||
'modulo': 'M1' if '1' in mod else 'M2',
|
||||
'url': pagina_url,
|
||||
})
|
||||
|
||||
with open('$LISTA_VIDEOS', 'w') as f:
|
||||
json.dump(videos, f, ensure_ascii=False, indent=2)
|
||||
|
||||
print(len(videos))
|
||||
" 2>/dev/null
|
||||
|
||||
local total=$(wc -l < "$LISTA_VIDEOS" 2>/dev/null || echo 0)
|
||||
if [ "$total" -gt 0 ] 2>/dev/null; then
|
||||
ok "Lista de videos generada"
|
||||
python3 -c "import json; print(f' Total: {len(json.load(open(\"$LISTA_VIDEOS\")))} videos')" 2>/dev/null
|
||||
else
|
||||
err "No se encontraron videos en el HTML descargado"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── DESCARGAR VIDEOS ───────────────────────────────────────
|
||||
|
||||
descargar_videos() {
|
||||
mkdir -p "$VIDEOS_DIR"
|
||||
touch "$REGISTRO"
|
||||
|
||||
# Leer videos ya descargados
|
||||
local descargados=()
|
||||
while IFS= read -r line; do
|
||||
descargados+=("$line")
|
||||
done < "$REGISTRO"
|
||||
|
||||
# Obtener lista completa
|
||||
local total=$(python3 -c "import json; print(len(json.load(open('$LISTA_VIDEOS'))))" 2>/dev/null || echo 0)
|
||||
|
||||
if [ "$total" -eq 0 ]; then
|
||||
err "Lista de videos vacía"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " Total: $total videos"
|
||||
echo " Ya descargados: ${#descargados[@]}"
|
||||
echo " Pendientes: $((total - ${#descargados[@]}))"
|
||||
echo ""
|
||||
|
||||
# Procesar cada video
|
||||
for i in $(seq 0 $((total - 1))); do
|
||||
local data=$(python3 -c "
|
||||
import json
|
||||
with open('$LISTA_VIDEOS') as f:
|
||||
v = json.load(f)
|
||||
v = v[$i]
|
||||
print(f'{v[\"id\"]}|{v[\"titulo\"]}|{v[\"seccion\"]}|{v[\"modulo\"]}|{v[\"url\"]}')" 2>/dev/null)
|
||||
|
||||
local id=$(echo "$data" | cut -d'|' -f1)
|
||||
local titulo=$(echo "$data" | cut -d'|' -f2)
|
||||
local seccion=$(echo "$data" | cut -d'|' -f3)
|
||||
local modulo=$(echo "$data" | cut -d'|' -f4)
|
||||
local pagina_url=$(echo "$data" | cut -d'|' -f5-)
|
||||
|
||||
# Verificar si ya se descargó
|
||||
if grep -q "^$id|" "$REGISTRO" 2>/dev/null; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Nombre del archivo de salida
|
||||
local safe_name="${modulo}_${seccion}_${titulo}"
|
||||
safe_name=$(echo "$safe_name" | sed 's/[^a-zA-Z0-9_]/_/g' | cut -c1-120)
|
||||
local output_path="$VIDEOS_DIR/${safe_name}.mp4"
|
||||
|
||||
# Si el archivo ya existe en disco pero no en el registro, agregarlo
|
||||
if [ -f "$output_path" ]; then
|
||||
echo "${id}|${safe_name}.mp4" >> "$REGISTRO"
|
||||
ok "[$((i+1))/$total] Ya existe: ${titulo:0:50}"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo " ─────────────────────────────────────────────"
|
||||
printf " [%d/%d] 🎬 %s\n" $((i+1)) "$total" "${titulo:0:70}"
|
||||
echo " ─────────────────────────────────────────────"
|
||||
echo ""
|
||||
|
||||
if [ -z "$pagina_url" ]; then
|
||||
warn "Sin URL de página embebedora, intentando con URL directa..."
|
||||
pagina_url="https://player.vimeo.com/video/${id}"
|
||||
fi
|
||||
|
||||
# Construir comando yt-dlp
|
||||
local cmd="yt-dlp"
|
||||
cmd+=" --cookies \"$COOKIES_FILE\""
|
||||
cmd+=" -o \"$output_path\""
|
||||
cmd+=" --merge-output-format mp4"
|
||||
cmd+=" --no-playlist"
|
||||
cmd+=" --no-progress"
|
||||
cmd+=" --console-title"
|
||||
cmd+=" --retries 3"
|
||||
cmd+=" --continue"
|
||||
if [ -n "$LIMIT_RATE" ]; then
|
||||
cmd+=" --limit-rate $LIMIT_RATE"
|
||||
fi
|
||||
cmd+=" \"$pagina_url\""
|
||||
|
||||
# Ejecutar descarga
|
||||
if eval "$cmd" 2>&1; then
|
||||
if [ -f "$output_path" ]; then
|
||||
local size=$(du -h "$output_path" | cut -f1)
|
||||
echo "${id}|${safe_name}.mp4" >> "$REGISTRO"
|
||||
ok "Descargado: ${titulo:0:40} ($size)"
|
||||
else
|
||||
# Buscar archivo con otro nombre
|
||||
local found=$(find "$VIDEOS_DIR" -name "*${id}*" -o -name "*${titulo:0:20}*" 2>/dev/null | head -1)
|
||||
if [ -n "$found" ]; then
|
||||
local fname=$(basename "$found")
|
||||
echo "${id}|${fname}" >> "$REGISTRO"
|
||||
local size=$(du -h "$found" | cut -f1)
|
||||
ok "Descargado (con otro nombre): ${titulo:0:40} ($size)"
|
||||
else
|
||||
warn "Puede que se haya descargado pero no se encontró el archivo esperado."
|
||||
warn "Ruta buscada: $output_path"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
err "Error descargando: ${titulo:0:50}"
|
||||
fi
|
||||
|
||||
# Pequeña pausa entre descargas para no saturar
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo ""
|
||||
local pendientes=$((total - $(wc -l < "$REGISTRO" 2>/dev/null || echo 0)))
|
||||
if [ "$pendientes" -le 0 ]; then
|
||||
echo " 🎉 ¡Todos los videos descargados!"
|
||||
else
|
||||
echo " Quedan $pendientes videos pendientes."
|
||||
echo " Para reanudar: bash $0"
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── GENERAR LIBRO CON VIDEOS ───────────────────────────────
|
||||
|
||||
generar_libro() {
|
||||
log "Generando libro de estudio con videos locales..."
|
||||
|
||||
node -e "
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// Leer registro de videos descargados
|
||||
const registro = '$REGISTRO';
|
||||
const videosMap = {};
|
||||
if (fs.existsSync(registro)) {
|
||||
const lines = fs.readFileSync(registro, 'utf-8').trim().split('\n');
|
||||
for (const line of lines) {
|
||||
const [id, archivo] = line.split('|');
|
||||
if (id && archivo) videosMap[id] = archivo;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(' Videos mapeados:', Object.keys(videosMap).length);
|
||||
|
||||
// Guardar mapa para que lo use el script principal
|
||||
const mapaPath = '$SCRIPT_DIR/.mapa_videos.json';
|
||||
fs.writeFileSync(mapaPath, JSON.stringify(videosMap, null, 2));
|
||||
" 2>/dev/null
|
||||
|
||||
# Ahora regenerar el libro usando el script existente
|
||||
if [ -f "$SCRIPT_DIR/generar_dashboard.mjs" ]; then
|
||||
node "$SCRIPT_DIR/generar_dashboard.mjs" 2>&1
|
||||
else
|
||||
warn "No se encontró generar_dashboard.mjs"
|
||||
warn "El libro se generará sin videos la próxima vez que ejecutes node generar_dashboard.mjs"
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── ESTADO ──────────────────────────────────────────────────
|
||||
|
||||
mostrar_estado() {
|
||||
echo ""
|
||||
echo " ─── ESTADO DE DESCARGA ───"
|
||||
echo ""
|
||||
|
||||
if [ ! -f "$LISTA_VIDEOS" ]; then
|
||||
echo " Lista de videos no generada."
|
||||
echo " Ejecutá primero: bash $0"
|
||||
return
|
||||
fi
|
||||
|
||||
local total=$(python3 -c "import json; print(len(json.load(open('$LISTA_VIDEOS'))))" 2>/dev/null || echo 0)
|
||||
local descargados=$(wc -l < "$REGISTRO" 2>/dev/null || echo 0)
|
||||
local pendientes=$((total - descargados))
|
||||
|
||||
echo " Total videos: $total"
|
||||
echo " Descargados: $descargados"
|
||||
echo " Pendientes: $pendientes"
|
||||
echo ""
|
||||
|
||||
if [ "$descargados" -gt 0 ] && [ -d "$VIDEOS_DIR" ]; then
|
||||
local total_size=$(du -sh "$VIDEOS_DIR" 2>/dev/null | cut -f1)
|
||||
echo " Espacio usado: $total_size"
|
||||
echo ""
|
||||
|
||||
echo " Últimos descargados:"
|
||||
tail -5 "$REGISTRO" 2>/dev/null | while IFS='|' read -r id archivo; do
|
||||
if [ -n "$archivo" ] && [ -f "$VIDEOS_DIR/$archivo" ]; then
|
||||
local size=$(du -h "$VIDEOS_DIR/$archivo" 2>/dev/null | cut -f1)
|
||||
echo " ✓ $archivo ($size)"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
# ─── LIMPIAR ─────────────────────────────────────────────────
|
||||
|
||||
limpiar() {
|
||||
echo ""
|
||||
warn "¿Borrar todos los videos descargados? (s/N): "
|
||||
read -r respuesta
|
||||
if [ "$respuesta" = "s" ] || [ "$respuesta" = "S" ]; then
|
||||
rm -rf "$VIDEOS_DIR" "$REGISTRO" "$LISTA_VIDEOS" "$COOKIES_FILE"
|
||||
ok "Eliminado. Listo para empezar de nuevo."
|
||||
else
|
||||
ok "Operación cancelada."
|
||||
fi
|
||||
}
|
||||
|
||||
# ─── MAIN ────────────────────────────────────────────────────
|
||||
|
||||
main() {
|
||||
echo ""
|
||||
echo "═══════════════════════════════════════════════════"
|
||||
echo " 🏐 DESCARGAR VIDEOS — Curso de Vóley"
|
||||
echo "═══════════════════════════════════════════════════"
|
||||
echo ""
|
||||
|
||||
check_dependencies
|
||||
|
||||
# Procesar argumentos
|
||||
case "${1:-}" in
|
||||
--status|-s)
|
||||
convertir_cookies
|
||||
extraer_lista_videos
|
||||
mostrar_estado
|
||||
exit 0
|
||||
;;
|
||||
--clean|-c)
|
||||
limpiar
|
||||
exit 0
|
||||
;;
|
||||
--resume|-r)
|
||||
true # simplemente continua
|
||||
;;
|
||||
*)
|
||||
# Primer ejecución: setup completo
|
||||
if [ ! -f "$COOKIES_FILE" ]; then
|
||||
convertir_cookies
|
||||
fi
|
||||
if [ ! -f "$LISTA_VIDEOS" ]; then
|
||||
extraer_lista_videos
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Asegurar cookies
|
||||
if [ ! -f "$COOKIES_FILE" ]; then
|
||||
convertir_cookies
|
||||
fi
|
||||
if [ ! -f "$LISTA_VIDEOS" ]; then
|
||||
extraer_lista_videos
|
||||
fi
|
||||
|
||||
descargar_videos
|
||||
|
||||
echo ""
|
||||
echo "═══════════════════════════════════════════════════"
|
||||
echo " Listo."
|
||||
echo "═══════════════════════════════════════════════════"
|
||||
echo ""
|
||||
echo " Videos en: $VIDEOS_DIR"
|
||||
echo " Para retomar: bash $0 --resume"
|
||||
echo " Para ver estado: bash $0 --status"
|
||||
echo ""
|
||||
}
|
||||
|
||||
main "$@"
|
||||
@@ -0,0 +1,586 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Curso de Vóley — Material de Estudio</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
font-family: 'Segoe UI', 'Georgia', 'Times New Roman', serif;
|
||||
background: #f5f3ef;
|
||||
color: #2c2c2c;
|
||||
line-height: 1.8;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
/* ── PORTADA ── */
|
||||
.portada {
|
||||
background: linear-gradient(135deg, #0d2b3e 0%, #1a5276 50%, #2980b9 100%);
|
||||
color: white;
|
||||
padding: 5rem 2rem;
|
||||
text-align: center;
|
||||
min-height: 70vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.portada::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
left: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: radial-gradient(circle at 30% 70%, rgba(255,255,255,0.05) 0%, transparent 50%);
|
||||
pointer-events: none;
|
||||
}
|
||||
.portada h1 { font-size: 2.6rem; margin-bottom: 0.6rem; font-weight: 700; letter-spacing: -0.5px; }
|
||||
.portada h2 { font-size: 1.3rem; font-weight: 300; opacity: 0.9; margin-bottom: 1.5rem; }
|
||||
.portada p { opacity: 0.7; font-size: 0.95rem; }
|
||||
.portada .stats {
|
||||
margin-top: 2rem;
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
.portada .stat {
|
||||
background: rgba(255,255,255,0.12);
|
||||
backdrop-filter: blur(4px);
|
||||
padding: 0.6rem 1.4rem;
|
||||
border-radius: 8px;
|
||||
font-size: 0.9rem;
|
||||
border: 1px solid rgba(255,255,255,0.08);
|
||||
}
|
||||
.portada .icono-grande {
|
||||
font-size: 4rem;
|
||||
margin-bottom: 1rem;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
/* ── ÍNDICE ── */
|
||||
.indice {
|
||||
background: white;
|
||||
padding: 2.5rem;
|
||||
max-width: 820px;
|
||||
margin: 0 auto;
|
||||
border-bottom: 1px solid #e8e4df;
|
||||
}
|
||||
.indice h2 {
|
||||
color: #0d2b3e;
|
||||
margin-bottom: 1.5rem;
|
||||
font-size: 1.3rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.indice ul { list-style: none; }
|
||||
.indice li { padding: 0.35rem 0; }
|
||||
.indice a {
|
||||
color: #1a5276;
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid transparent;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
.indice a:hover { border-bottom-color: #2980b9; }
|
||||
.indice .modulo-titulo {
|
||||
font-weight: 600;
|
||||
font-size: 1.05rem;
|
||||
margin-top: 1rem;
|
||||
padding-top: 0.8rem;
|
||||
border-top: 1px solid #eee;
|
||||
color: #0d2b3e;
|
||||
}
|
||||
.indice .modulo-titulo:first-child { border-top: none; margin-top: 0; padding-top: 0; }
|
||||
.indice .seccion-link { padding-left: 1.2rem; font-size: 0.93rem; }
|
||||
|
||||
/* ── CONTENIDO ── */
|
||||
.contenido {
|
||||
max-width: 820px;
|
||||
margin: 0 auto;
|
||||
padding: 2.5rem;
|
||||
background: white;
|
||||
}
|
||||
.contenido h1.modulo-titulo {
|
||||
color: #0d2b3e;
|
||||
font-size: 2rem;
|
||||
border-bottom: 3px solid #2980b9;
|
||||
padding-bottom: 0.5rem;
|
||||
margin: 3rem 0 1.5rem;
|
||||
}
|
||||
.contenido h2.seccion-titulo {
|
||||
color: #1a5276;
|
||||
font-size: 1.5rem;
|
||||
margin: 2.5rem 0 1rem;
|
||||
border-left: 4px solid #2980b9;
|
||||
padding-left: 0.8rem;
|
||||
}
|
||||
.contenido h3.tema-titulo {
|
||||
color: #2c3e50;
|
||||
font-size: 1.15rem;
|
||||
margin: 1.8rem 0 0.8rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
.contenido h4 {
|
||||
color: #34495e;
|
||||
font-size: 1.05rem;
|
||||
margin: 1.3rem 0 0.6rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
.contenido p { margin: 0.8rem 0; text-align: justify; }
|
||||
.contenido ul, .contenido ol { margin: 0.8rem 0; padding-left: 1.8rem; }
|
||||
.contenido li { margin: 0.4rem 0; }
|
||||
.contenido strong { color: #1a3a4a; font-weight: 600; }
|
||||
.contenido hr {
|
||||
border: none;
|
||||
border-top: 1px solid #e8e4df;
|
||||
margin: 1.8rem 0;
|
||||
}
|
||||
.contenido table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 1.2rem 0;
|
||||
font-size: 0.9rem;
|
||||
overflow-x: auto;
|
||||
display: block;
|
||||
}
|
||||
.contenido th, .contenido td {
|
||||
border: 1px solid #ddd;
|
||||
padding: 0.6rem 0.8rem;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
.contenido th {
|
||||
background: #0d2b3e;
|
||||
color: white;
|
||||
font-weight: 600;
|
||||
}
|
||||
.contenido tr:nth-child(even) { background: #f8f6f3; }
|
||||
.contenido tr:hover { background: #efece7; }
|
||||
.contenido blockquote {
|
||||
border-left: 4px solid #2980b9;
|
||||
margin: 1rem 0;
|
||||
padding: 0.8rem 1.2rem;
|
||||
background: #f0f5fa;
|
||||
color: #2c3e50;
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
|
||||
/* ── NOTAS ESPECIALES ── */
|
||||
.nota-video {
|
||||
background: #fef9e7;
|
||||
border: 1px solid #f9e79f;
|
||||
border-left: 4px solid #f1c40f;
|
||||
padding: 0.6rem 1rem;
|
||||
margin: 0.8rem 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
font-size: 0.9rem;
|
||||
color: #7d6608;
|
||||
}
|
||||
.nota-recurso {
|
||||
background: #eaf2f8;
|
||||
border: 1px solid #aed6f1;
|
||||
border-left: 4px solid #2980b9;
|
||||
padding: 0.6rem 1rem;
|
||||
margin: 0.8rem 0;
|
||||
border-radius: 0 4px 4px 0;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.nota-recurso a {
|
||||
color: #1a5276;
|
||||
font-weight: 600;
|
||||
}
|
||||
.nota-vacio {
|
||||
color: #999;
|
||||
font-style: italic;
|
||||
font-size: 0.9rem;
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
.contenido .tema-separador {
|
||||
margin: 2rem 0;
|
||||
border-top: 1px dashed #ddd;
|
||||
}
|
||||
|
||||
/* ── PIE DE PÁGINA ── */
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 3rem 2rem;
|
||||
color: #999;
|
||||
font-size: 0.85rem;
|
||||
max-width: 820px;
|
||||
margin: 0 auto;
|
||||
border-top: 1px solid #e8e4df;
|
||||
background: white;
|
||||
}
|
||||
|
||||
/* ── RESPONSIVE ── */
|
||||
@media (max-width: 600px) {
|
||||
body { font-size: 15px; }
|
||||
.portada { padding: 2rem 1rem; min-height: 50vh; }
|
||||
.portada h1 { font-size: 1.6rem; }
|
||||
.portada h2 { font-size: 1rem; }
|
||||
.contenido { padding: 1rem; }
|
||||
.indice { padding: 1.5rem; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="portada">
|
||||
<div class="icono-grande">🏐</div>
|
||||
<h1>Curso de Entrenador Nacional de Vóley</h1>
|
||||
<h2>Material de Estudio — Versión Offline</h2>
|
||||
<p>Contenido extraído del campus virtual</p>
|
||||
<div class="stats">
|
||||
<div class="stat">📚 2 módulos</div>
|
||||
<div class="stat">📂 7 secciones</div>
|
||||
<div class="stat">📖 66 temas</div>
|
||||
</div>
|
||||
<p style="margin-top: 2rem; opacity: 0.5; font-size: 0.8rem;">Generado el 2 de mayo de 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="indice"><h2>📑 Índice de contenidos</h2><ul><li class="modulo-titulo">Módulo 1 — Planificación</li><li class="seccion-link"><a href="#sec-planificacion">Planificación</a> (9 temas)</li><li class="seccion-link"><a href="#sec-preparacion-atletica">Preparación Atlética</a> (15 temas)</li><li class="seccion-link"><a href="#sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</a> (2 temas)</li><li class="modulo-titulo">Módulo 2 — Entrenamiento</li><li class="seccion-link"><a href="#sec-entrenamiento-de-centrales-y-opuestos-as">Entrenamiento de Centrales y Opuestos/as</a> (25 temas)</li><li class="seccion-link"><a href="#sec-puntas-y-liberos-as">Puntas y Liberos/as</a> (13 temas)</li><li class="seccion-link"><a href="#sec-entrenamiento-de-armadoras">Entrenamiento de Armadoras</a> (1 temas)</li><li class="seccion-link"><a href="#sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</a> (1 temas)</li></ul></div>
|
||||
|
||||
<div class="contenido">
|
||||
<h1 class="modulo-titulo">Módulo 1 — Planificación</h1>
|
||||
<h2 class="seccion-titulo" id="sec-planificacion">Planificación</h2>
|
||||
<h3 class="tema-titulo" id="tema-planificacion-0">1. PLANIFICACIÓN</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1170245111</div>
|
||||
<h4>Resumen de la Clase: Planificación y Periodización Ágil (Voleibol)</h4><p>Esta clase correspondiente al <b>Curso de Entrenador Nacional II de Vóleibol (Edición 2026)</b> aborda la planificación de la preparación física bajo un enfoque moderno de <b>periodización ágil</b>. El objetivo central es que el deportista llegue en su mejor versión a la competencia, priorizando la salud y la individualidad sobre planes rígidos.</p><hr><h4>1. Concepto de Carga e Individualidad</h4><ul><br>
|
||||
<li><b>Carga Integral:</b> No se limita solo al entrenamiento de cancha; incluye el estrés físico, psicológico y el impacto diario en cada jugador.</li><br>
|
||||
<li><b>Principio de Individualidad:</b> Es el factor determinante. Un plan exitoso debe ser flexible y ajustarse según el feedback (carga interna) de cada deportista.</li><br>
|
||||
<li><b>Monitoreo:</b> Se propone el uso de herramientas simples como formularios digitales para registrar la fatiga, el bienestar y la recuperación.</li><br>
|
||||
</ul><hr><h4>2. Control de Variables y Prevención de Lesiones</h4><ul><br>
|
||||
<li><b>El Salto como Indicador:</b> Es la variable más crítica en vóleibol. Controlar la cantidad y magnitud de saltos es vital para evitar tendinopatías y sobrecargas.</li><br>
|
||||
<li><b>Adaptación Progresiva:</b> Se debe evitar el aumento abrupto de cargas tras periodos de descanso para proteger los tejidos.</li><br>
|
||||
<li><b>Cuerpo Técnico Integrado:</b> La planificación debe coordinarse entre entrenadores, preparadores físicos y el departamento médico.</li><br>
|
||||
</ul><hr><h4>3. Propuesta del Sistema de Colores (Periodización Ágil)</h4><p>Para facilitar la visualización del trabajo semanal y diario, se utiliza un código de colores que define la magnitud y el objetivo de la carga:</p><br><br><table cellspacing="0" border="1" cellpadding="10">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Color</th>
|
||||
<th>Tipo de Sesión</th>
|
||||
<th>Objetivo Principal</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Verde</td>
|
||||
<td><b>Preventiva / Adaptación</b></td>
|
||||
<td>Recuperar, mejorar movilidad, estabilidad y técnica de base. Carga baja.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Amarillo</td>
|
||||
<td><b>Activación / Puesta a Punto</b></td>
|
||||
<td>Estimular el sistema nervioso antes de competir. Volumen bajo e intensidad alta (velocidad).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Naranja</td>
|
||||
<td><b>Carga / Construcción</b></td>
|
||||
<td>Sesiones de mejora física regular. Volumen e intensidad media-alta.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Rojo</td>
|
||||
<td><b>Choque / Consolidación</b></td>
|
||||
<td>Máximo nivel de carga. Se ubica lejos de la competencia para permitir la recuperación.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><hr><h4>4. Situaciones Especiales en la Planificación</h4><ul><br>
|
||||
<li><b>Prioridad a la Competencia:</b> Se planifica "hacia atrás", desde el día del partido hacia el inicio de la semana.</li><br>
|
||||
<li><b>Impacto de los Viajes:</b> Las horas y la comodidad del viaje son carga física. Es fundamental programar sesiones de estiramiento o descanso total según el caso.</li><br>
|
||||
<li><b>Jugadores con Diferente Rodaje:</b> Dentro de un mismo equipo, el que no jugó el fin de semana puede realizar una sesión de "choque" (roja), mientras que el titular debe realizar una de "recuperación" o "carga regular".</li><br>
|
||||
</ul><hr><p><b>Conclusión:</b> La periodización ágil no significa entrenar menos o sin rumbo, sino tener la capacidad resolutiva para adaptar el plan maestro a los vaivenes diarios del equipo y el contexto.</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-planificacion-del-voleibol-1">2. Planificación del Vóleibol</h3>
|
||||
<p>Propuesta de planificación</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219" target="_blank">Planificación del Vóleibol</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-planificacion-del-voleibol-2">3. Planificación del Vóleibol</h3>
|
||||
<p>Presentación de la 1era asignatura del curso</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139" target="_blank">Planificación del Vóleibol</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-impacto-de-partidos-consecutivos-en-la-carga-de-trabajo-el-estado-de-recuperacion-y-el-bienestar-de-los-jugadores-profesionales-de-voleibol-3">4. Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221" target="_blank">Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-balance-de-estres-recuperacion-en-jugadores-universitarios-de-voleibol-durante-una-temporada-4">5. Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222" target="_blank">Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-niveles-de-estres-recuperacion-en-deportistas-varones-de-la-provincia-de-leon-a-traves-del-cuestionario-restq-76-5">6. NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76</h3>
|
||||
<p>Artículo de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223" target="_blank">NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-incidencia-de-lesiones-en-el-voleibol-pueden-ser-una-guia-para-la-prescripcion-de-la-preparacion-fisica-6">7. Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224" target="_blank">Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-cual-podria-ser-la-frecuencia-ideal-de-entrenamientos-semanales-de-las-categorias-de-base-en-el-voleibol-7">8. ¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225" target="_blank">¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-como-desarrollar-deportistas-robustos-y-solidos-para-los-requerimientos-del-voleibol-en-el-largo-plazo-8">9. ¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226" target="_blank">¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?</a></div>
|
||||
<h2 class="seccion-titulo" id="sec-preparacion-atletica">Preparación Atlética</h2>
|
||||
<h3 class="tema-titulo" id="tema-preparacion-atletica-0">1. PREPARACIÓN ATLÉTICA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1173231315</div>
|
||||
<h4>Resumen de Clase: Preparación Atlética en el Voleibol</h4><p><strong>Profesor:</strong> Alejandro Bertorello</p><p>En este segundo encuentro del curso para Entrenadores Nacionales Nivel 2, se abordó la implementación práctica de la preparación física, enfocándose en la sesión de entrenamiento como la unidad estructural básica y el rol del entrenador/preparador en el campo.</p><hr><h4>1. Filosofía y Rol del Preparador Físico</h4><ul><br>
|
||||
<li><strong>Observación Pedagógica:</strong> El preparador debe estar presente y activo, corrigiendo técnicas y dando feedback constante. No se puede dirigir una sesión de pesas de forma pasiva.</li><br>
|
||||
<li><strong>Individualidad:</strong> Es fundamental diferenciar los planes según el tiempo de juego, historial de lesiones y fatiga acumulada del deportista.</li><br>
|
||||
<li><strong>Seguridad y Hábitos:</strong> En etapas formativas, es clave enseñar la higiene del gimnasio (orden de materiales) y la seguridad entre compañeros (cuidar al que levanta peso).</li><br>
|
||||
</ul><h4>2. Objetivos Principales</h4><ul><br>
|
||||
<li><strong>Prevención de Lesiones:</strong> El foco está en proteger las zonas críticas del voleibolista: <strong>hombros, rodillas, región lumbar y tobillos</strong>.</li><br>
|
||||
<li><strong>Entrenamiento de Fuerza:</strong> Se considera la capacidad física prioritaria. Un deportista robusto absorbe mejor las cargas de salto y competencia.</li><br>
|
||||
<li><strong>Disponibilidad:</strong> El fin último es que el jugador esté disponible para entrenar y jugar la mayor cantidad de tiempo posible.</li><br>
|
||||
</ul><h4>3. Estructura de la Sesión por Bloques</h4><p>Bertorello propone organizar la sesión en un "gradiente" para optimizar la energía y evitar la fatiga coordinativa:</p><br><br><table cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Bloque</th>
|
||||
<th>Contenido</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Movilidad</strong></td>
|
||||
<td>Preparación de columna, cadera, tobillo y zona dorsal.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Prevención</strong></td>
|
||||
<td>Ejercicios específicos de hombro (manguito rotador) y rodilla.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Potencia / Dinámicos</strong></td>
|
||||
<td>Cargadas, arranques o saltos (realizar con el sistema nervioso fresco).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Fuerza Máxima</strong></td>
|
||||
<td>Ejercicios básicos con cargas elevadas (Sentadillas, Pesos Muertos).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Estructura</strong></td>
|
||||
<td>Trabajo complementario de masa muscular y núcleo (Core).</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table><h4>4. Logística y Tiempos</h4><ul><br>
|
||||
<li><strong>Prioridad al Vóley:</strong> La preparación física no debe "robar" tiempo de cancha. Si el espacio es reducido, la prevención debe hacerse en pasillos o vestuarios antes de pisar la cancha.</li><br>
|
||||
<li><strong>Flexibilidad Horaria:</strong> El trabajo de pesas puede realizarse antes, durante (división de grupos) o después de la pelota, adaptándose a la infraestructura de cada club.</li><br>
|
||||
</ul><blockquote><br>
|
||||
"El equipo no gana solo por estar bien físicamente, gana porque juega bien al vóley. La preparación física es el aliado que permite entrenar más y mejor."<br>
|
||||
</blockquote><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-preparacion-atletica-1">2. Preparación Atlética</h3>
|
||||
<p>Presentación de la segunda asignatura</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522" target="_blank">Preparación Atlética</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modelos-de-planes-de-sesiones-de-preparacion-fisica-2">3. Modelos de planes de sesiones de preparación física</h3>
|
||||
<p>Planes de sesiones de preparación física</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648" target="_blank">Modelos de planes de sesiones de preparación física</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modelos-de-planes-3">4. Modelos de planes</h3>
|
||||
<p>Planes deportistas intermedios</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649" target="_blank">Modelos de planes</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-planes-deportistas-principiantes-4">5. Planes deportistas principiantes</h3>
|
||||
<p>Modelos de planes</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650" target="_blank">Planes deportistas principiantes</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modelo-de-sesiones-de-preparacion-fisica-en-el-voleibol-5">6. Modelo de sesiones de preparación física en el vóleibol</h3>
|
||||
<p>Modelos de sesiones de preparación física: preventiva, carga, choque y activación</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229" target="_blank">Modelo de sesiones de preparación física en el vóleibol</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modelo-de-ejercicios-preventivos-de-lesiones-en-el-voleibol-6">7. Modelo de ejercicios preventivos de lesiones en el vóleibol</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1063655414</div>
|
||||
<p>Sesión preventiva general </p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-sesion-preventiva-post-viaje-7">8. Sesión Preventiva (Post viaje)</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1063657248</div>
|
||||
<p>Sesión preventiva</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-modelo-de-sesion-de-carga-choque-8">9. Modelo de Sesión de carga - choque</h3>
|
||||
<p>Modelo de sesión para deportistas expertos y avanzados</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232" target="_blank">Modelo de Sesión de carga - choque</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-efecto-del-entrenamiento-de-fuerza-en-el-salto-de-jugadores-adolescentes-de-voleibol-una-revision-sistematica-9">10. Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233" target="_blank">Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-revision-descriptiva-de-las-lesiones-mas-frecuentes-durante-la-practica-del-voleibol-10">11. Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234" target="_blank">Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-resistencia-y-fuerza-muscular-como-factores-predominantes-en-el-remate-entre-jovenes-atletas-de-voleibol-11">12. Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol</h3>
|
||||
<p>Artículo de lectura complementaria</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235" target="_blank">Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-ejercicios-de-fuerza-para-el-tren-inferior-con-el-cinturon-y-el-plano-inclinado-12">13. Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236" target="_blank">Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-como-disenar-entradas-en-calor-sin-pelota-efectivas-en-el-voleibol-13">14. ¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237" target="_blank">¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-caracteristicas-fisicas-y-fisiologicas-de-las-jugadoras-de-voleibol-un-trabajo-de-revision-14">15. Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión</h3>
|
||||
<p>Material de lectura complementaria</p><div class="nota-recurso">🔗 <strong>Enlace:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238" target="_blank">Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión</a></div>
|
||||
<h2 class="seccion-titulo" id="sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</h2>
|
||||
<h3 class="tema-titulo" id="tema-explicacion-del-trabajo-practico-a-presentar-0">1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1173576229</div>
|
||||
<div><br>
|
||||
<h4>Consignas: Trabajo Práctico Integrador (TPI)</h4><br>
|
||||
<p><strong>Profesor:</strong> Alejandro Bertorello</p><br>
|
||||
<p>Esta clase detalla las pautas para la elaboración del trabajo final, cuyo objetivo es integrar los conocimientos de planificación y preparación atlética en una propuesta práctica aplicada a un equipo de voleibol.</p><br>
|
||||
<hr><br>
|
||||
<h4>1. Objetivo del Diseño</h4><br>
|
||||
<ul><br>
|
||||
<li><strong>Diseño de Macrociclo:</strong> Se debe completar el archivo Excel suministrado por la cátedra que contempla una estructura de 12 semanas.</li><br>
|
||||
<li><strong>Periodo de Enfoque:</strong> El trabajo se centra exclusivamente en el periodo de competencia (temporada de partidos).</li><br>
|
||||
<li><strong>Contexto del Equipo:</strong> Se planifica para un equipo ideal que entrena entre 3 y 4 veces por semana, además de la competencia.</li><br>
|
||||
</ul><br>
|
||||
<h4>2. Escenarios y Variables a Incluir</h4><br>
|
||||
<p>El macrociclo debe reflejar la realidad del deporte, alternando sesiones de entrenamiento con los siguientes hitos obligatorios:</p><br>
|
||||
<ul><br>
|
||||
<li><strong>8 partidos de fin de semana:</strong> Encuentros regulares los días sábado o domingo.</li><br>
|
||||
<li><strong>1 partido reprogramado:</strong> Un encuentro que debe ubicarse en un día de semana (ej. miércoles).</li><br>
|
||||
<li><strong>2 torneos cortos:</strong> Competencias de tres días consecutivos (sábado, domingo y lunes).</li><br>
|
||||
<li><strong>1 torneo largo:</strong> Una competencia que abarca casi una semana completa.</li><br>
|
||||
<li><strong>1 fin de semana libre:</strong> Espacio destinado al descanso o ajuste de cargas.</li><br>
|
||||
</ul><br>
|
||||
<h4>3. Metodología de Carga en el Archivo</h4><br>
|
||||
<ul><br>
|
||||
<li><strong>Planificación Inversa:</strong> Se recomienda empezar marcando las fechas de competencia y, desde allí, planificar "hacia atrás" los días de carga, choque, activación y descarga.</li><br>
|
||||
<li><strong>Tipos de Sesión:</strong> Solo se debe indicar el nombre de la sesión (ej. "Plan de Choque" o "Activación") según el código de colores visto en clase, no el detalle de cada ejercicio.</li><br>
|
||||
<li><strong>Uso de Colores:</strong> El archivo Excel genera automáticamente los colores al ingresar el tipo de sesión o partido, facilitando la lectura visual de la carga.</li><br>
|
||||
</ul><br>
|
||||
<h4>4. Importancia de las Observaciones</h4><br>
|
||||
<ul><br>
|
||||
<li><strong>Contextualización:</strong> El apartado de observaciones al final del archivo es fundamental para la nota final.</li><br>
|
||||
<li><strong>Justificación:</strong> Se deben explicar decisiones basadas en el contexto, como el manejo de fatiga tras un partido largo, viajes de muchas horas o limitaciones de infraestructura (ej. gimnasio cerrado).</li><br>
|
||||
</ul><br>
|
||||
<h4>5. Evaluación y Entrega</h4><br>
|
||||
<ul><br>
|
||||
<li><strong>Fecha Límite:</strong> La entrega final es el 30 de abril a las 23:59 hs.</li><br>
|
||||
<li><strong>Criterios:</strong> Se valorará la coherencia entre las semanas, la dosificación de las cargas y la capacidad de adaptar el plan a los imprevistos planteados.</li><br>
|
||||
<li><strong>Recuperación:</strong> En caso de no aprobar (nota mínima 6), el alumno dispone de una semana para corregir y reenviar el trabajo.</li><br>
|
||||
</ul><br><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-consignas-del-trabajo-practico-1">2. Consignas del Trabajo práctico</h3>
|
||||
<p>Hola a todos!</p><ul><li>Este es el archivo con las <strong>consignas del trabajo práctico integrador de las 2 asignaturas: planificación de la preparación física y preparación atlética en el vóleibol</strong></li><li>Para poder realizar el trabajo deben descargar desde <strong>Evaluaciones</strong> el archivo en formato Excel <strong>"Trabajo práctico preparación física entrenador nacional 2"</strong></li></ul><div><b><strong>Los saludo y quedo a disposición ante cualquier tipo de consultas!</strong><br></b><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686" target="_blank">Consignas del Trabajo práctico</a></div>
|
||||
<h1 class="modulo-titulo">Módulo 2 — Entrenamiento</h1>
|
||||
<h2 class="seccion-titulo" id="sec-entrenamiento-de-centrales-y-opuestos-as">Entrenamiento de Centrales y Opuestos/as</h2>
|
||||
<h3 class="tema-titulo" id="tema-el-opuesto-0">1. EL OPUESTO</h3>
|
||||
<p>CARACTERISTICAS Y DESARROLLO DEL OPUESTO<br>
|
||||
</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960" target="_blank">EL OPUESTO</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-desarrollo-de-los-centrales-1">2. DESARROLLO DE LOS CENTRALES</h3>
|
||||
<p>EL DESARROLLO DE LAS CENTRALES EN ATAQUE Y BLOQUEO</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961" target="_blank">DESARROLLO DE LOS CENTRALES</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-prioridad-en-el-bloqueo-2">3. PRIORIDAD EN EL BLOQUEO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919369433</div>
|
||||
<p>PRIORIDAD EN EL BLOQUEO<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-entrenamiento-de-los-centrales-y-opuestos-3">4. ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1179197191</div>
|
||||
<p>clase en vivo</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-ataque-b-4">5. ATAQUE B</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919341704</div>
|
||||
<p>ATAQUE B</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-b-con-recepcion-admiracion-5">6. B CON RECEPCION ADMIRACION</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919342668</div>
|
||||
<p>B CON RECEPCION ADMIRACION<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-la-b-mantiene-la-distancia-6">7. LA B MANTIENE LA DISTANCIA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919346562</div>
|
||||
<p>LA B MANTIENE LA DISTANCIA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-recepcion-perfecta-7">8. HATU RECEPCION PERFECTA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919347866</div>
|
||||
<p>HATU RECEPCION PERFECTA<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-con-pelota-separada-8">9. HATU CON PELOTA SEPARADA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919348493</div>
|
||||
<p>HATU CON PELOTA SEPARADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-marcada-9">10. HATU MARCADA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919351892</div>
|
||||
<p>HATU MARCADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatumarcada-bien-atacada-10">11. HATUMARCADA BIEN ATACADA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919352848</div>
|
||||
<p>HATU MARCADA BIEN ATACADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hatu-bien-hecha-11">12. HATU BIEN HECHA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919353448</div>
|
||||
<p>HATU BIEN HECHA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hana-positiva-12">13. HANA POSITIVA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919354134</div>
|
||||
<p>HANA POSITIVA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hanati-con-recepcion-separada-13">14. HANATI CON RECEPCION SEPARADA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919355668</div>
|
||||
<p>HANATI CON RECEPCION SEPARADA<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hana-recepcion-a-2-14">15. HANA RECEPCION A 2</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919356423</div>
|
||||
<p>HANA RECEPCION A 2</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-beti-a-un-pie-atras-15">16. BETI A UN PIE ATRAS</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919357109</div>
|
||||
<p>BETI A UN PIE ATRAS</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-beti-en-juego-16">17. BETI EN JUEGO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919358607</div>
|
||||
<p>BETI EN JUEGO<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-central-al-medio-con-recepcion-a-2-17">18. CENTRAL AL MEDIO CON RECEPCION A 2</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919359386</div>
|
||||
<p>CENTRAL AL MEDIO CON RECEPCION A 2</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hanati-volada-con-recepcion-a-4-18">19. HANATI VOLADA CON RECEPCION A 4</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919359855</div>
|
||||
<p>HANATI VOLADA CON RECEPCION A 4</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-hana-con-recepcion-a-2-separada-19">20. HANA CON RECEPCION A 2 SEPARADA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919360318</div>
|
||||
<p>HANA CON RECEPCION A 2 SEPARADA</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-apoyo-0-20">21. APOYO 0</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919363158</div>
|
||||
<p>APOYO 0</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-central-ataca-de-segunda-entrenamiento-del-tiempo-21">22. CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919363728</div>
|
||||
<p>CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-skipped-step-22">23. SKIPPED STEP</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919364522</div>
|
||||
<p>PASO SALTADO PARA CAER DEL BLOQUEO Y SALIR A ATACAR</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-global-tecnico-con-el-central-23">24. GLOBAL TECNICO CON EL CENTRAL</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919365485</div>
|
||||
<p>EJERCICIO GLOBAL TECNICO CON EL CENTRAL<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-visualizacion-del-central-en-bloqueo-24">25. VISUALIZACION DEL CENTRAL EN BLOQUEO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 919366263</div>
|
||||
<p>VISUALIZACION DEL CENTRAL EN BLOQUEO</p><h2 class="seccion-titulo" id="sec-puntas-y-liberos-as">Puntas y Liberos/as</h2>
|
||||
<h3 class="tema-titulo" id="tema-puntas-y-liberos-as-0">1. PUNTAS Y LÍBEROS/AS</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1179888270</div>
|
||||
<p>clase en vivo</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-split-step-1">2. SPLIT STEP</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921876274</div>
|
||||
<p>SPLIT STEP</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-los-puntas-receptores-y-el-libero-2">3. LOS PUNTAS RECEPTORES Y EL LIBERO</h3>
|
||||
<p>PUNTAS RECEPTORES Y LIBEROS</p><div class="nota-recurso">📄 <strong>Archivo:</strong> <a href="/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177" target="_blank">LOS PUNTAS RECEPTORES Y EL LIBERO</a></div>
|
||||
<div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-carrera-de-ataque-desde-6-a-4-3">4. CARRERA DE ATAQUE DESDE 6 A 4</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921873304</div>
|
||||
<p>CARRERA DE ATAQUE DE 6 A 4</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-contrataque-despues-de-caer-de-bloqueo-4">5. CONTRATAQUE DESPUES DE CAER DE BLOQUEO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921873724</div>
|
||||
<p>CONTRATAQUE DESPUES DE CAER DE BLOQUEO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-contrataque-por-4-despues-de-caer-de-bloqueo-5">6. CONTRATAQUE POR 4 DESPUES DE CAER DE BLOQUEO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921873953</div>
|
||||
<p>ATAQUE DESPUES DE BLOQUEAR</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-evaluacion-posicional-6">7. EVALUACION POSICIONAL</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921874753</div>
|
||||
<p>EVALUACION POSICIONAL</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-global-tecnico-de-la-pipe-7">8. GLOBAL TECNICO DE LA PIPE</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875020</div>
|
||||
<p>GLOBAL TECNICO DE LA PIPE</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-recepcion-de-massimino-con-saque-de-la-maquina-8">9. RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875302</div>
|
||||
<p>RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-recepcion-sobre-la-linea-saliendo-de-adentro-9">10. RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875519</div>
|
||||
<p>RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-recepcion-y-ataque-por-4-saliendo-de-adentro-10">11. RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921875778</div>
|
||||
<p>RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-tipo-de-combinaciones-que-juegan-los-puntas-11">12. TIPO DE COMBINACIONES QUE JUEGAN LOS PUNTAS</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921879520</div>
|
||||
<p>COMBINACIONES DE LOS PUNTAS<br>
|
||||
</p><div class="tema-separador"></div>
|
||||
<h3 class="tema-titulo" id="tema-ataque-de-la-pipe-por-distancia-o-tiempo-12">13. ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 921879925</div>
|
||||
<p>ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO</p><h2 class="seccion-titulo" id="sec-entrenamiento-de-armadoras">Entrenamiento de Armadoras</h2>
|
||||
<h3 class="tema-titulo" id="tema-entrenamiento-de-los-y-las-armadoras-0">1. ENTRENAMIENTO DE LOS Y LAS ARMADORAS</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1181188693</div>
|
||||
<p>clase en vivo</p><h2 class="seccion-titulo" id="sec-explicacion-del-trabajo-practico">Explicación del Trabajo Práctico</h2>
|
||||
<h3 class="tema-titulo" id="tema-explicacion-del-trabajo-practico-a-presentar-0">1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR</h3>
|
||||
<div class="nota-video">📹 <strong>Video disponible</strong> — ID: 1181892359</div>
|
||||
<p>clase en vivo</p>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>Online Education Center — Material de estudio offline</p>
|
||||
<p style="margin-top: 0.3rem; font-size: 0.8rem;">Generado el 2 de mayo de 2026</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,724 @@
|
||||
# Curso de Entrenador Nacional de Vóley
|
||||
## Material de Estudio
|
||||
|
||||
*Generado el 2 de mayo de 2026*
|
||||
*Contenido extraído del curso online — Versión offline para estudio*
|
||||
|
||||
---
|
||||
|
||||
# Módulo 1 — Planificación
|
||||
|
||||
## Planificación
|
||||
|
||||
### 1. PLANIFICACIÓN
|
||||
|
||||
📹 *Video disponible — ID: 1170245111*
|
||||
|
||||
## Resumen de la Clase: Planificación y Periodización Ágil (Voleibol)
|
||||
|
||||
Esta clase correspondiente al **Curso de Entrenador Nacional II de Vóleibol (Edición 2026)** aborda la planificación de la preparación física bajo un enfoque moderno de **periodización ágil**. El objetivo central es que el deportista llegue en su mejor versión a la competencia, priorizando la salud y la individualidad sobre planes rígidos.
|
||||
|
||||
|
||||
---
|
||||
### 1. Concepto de Carga e Individualidad
|
||||
|
||||
|
||||
- **Carga Integral:** No se limita solo al entrenamiento de cancha; incluye el estrés físico, psicológico y el impacto diario en cada jugador.
|
||||
|
||||
- **Principio de Individualidad:** Es el factor determinante. Un plan exitoso debe ser flexible y ajustarse según el feedback (carga interna) de cada deportista.
|
||||
|
||||
- **Monitoreo:** Se propone el uso de herramientas simples como formularios digitales para registrar la fatiga, el bienestar y la recuperación.
|
||||
|
||||
|
||||
---
|
||||
### 2. Control de Variables y Prevención de Lesiones
|
||||
|
||||
|
||||
- **El Salto como Indicador:** Es la variable más crítica en vóleibol. Controlar la cantidad y magnitud de saltos es vital para evitar tendinopatías y sobrecargas.
|
||||
|
||||
- **Adaptación Progresiva:** Se debe evitar el aumento abrupto de cargas tras periodos de descanso para proteger los tejidos.
|
||||
|
||||
- **Cuerpo Técnico Integrado:** La planificación debe coordinarse entre entrenadores, preparadores físicos y el departamento médico.
|
||||
|
||||
|
||||
---
|
||||
### 3. Propuesta del Sistema de Colores (Periodización Ágil)
|
||||
|
||||
Para facilitar la visualización del trabajo semanal y diario, se utiliza un código de colores que define la magnitud y el objetivo de la carga:
|
||||
|
||||
|
||||
| Color | Tipo de Sesión | Objetivo Principal |
|
||||
| --- | --- | --- |
|
||||
| Verde | **Preventiva / Adaptación** | Recuperar, mejorar movilidad, estabilidad y técnica de base. Carga baja. |
|
||||
| Amarillo | **Activación / Puesta a Punto** | Estimular el sistema nervioso antes de competir. Volumen bajo e intensidad alta (velocidad). |
|
||||
| Naranja | **Carga / Construcción** | Sesiones de mejora física regular. Volumen e intensidad media-alta. |
|
||||
| Rojo | **Choque / Consolidación** | Máximo nivel de carga. Se ubica lejos de la competencia para permitir la recuperación. |
|
||||
|
||||
|
||||
---
|
||||
### 4. Situaciones Especiales en la Planificación
|
||||
|
||||
|
||||
- **Prioridad a la Competencia:** Se planifica "hacia atrás", desde el día del partido hacia el inicio de la semana.
|
||||
|
||||
- **Impacto de los Viajes:** Las horas y la comodidad del viaje son carga física. Es fundamental programar sesiones de estiramiento o descanso total según el caso.
|
||||
|
||||
- **Jugadores con Diferente Rodaje:** Dentro de un mismo equipo, el que no jugó el fin de semana puede realizar una sesión de "choque" (roja), mientras que el titular debe realizar una de "recuperación" o "carga regular".
|
||||
|
||||
|
||||
---
|
||||
**Conclusión:** La periodización ágil no significa entrenar menos o sin rumbo, sino tener la capacidad resolutiva para adaptar el plan maestro a los vaivenes diarios del equipo y el contexto.
|
||||
|
||||
---
|
||||
|
||||
### 2. Planificación del Vóleibol
|
||||
|
||||
Propuesta de planificación
|
||||
|
||||
📄 **Abrir Archivo:** [Planificación del Vóleibol](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219)
|
||||
|
||||
---
|
||||
|
||||
### 3. Planificación del Vóleibol
|
||||
|
||||
Presentación de la 1era asignatura del curso
|
||||
|
||||
📄 **Abrir Archivo:** [Planificación del Vóleibol](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139)
|
||||
|
||||
---
|
||||
|
||||
### 4. Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [Impacto de Partidos Consecutivos en la Carga de Trabajo, el Estado de Recuperación y el Bienestar de los Jugadores Profesionales de Voleibol](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221)
|
||||
|
||||
---
|
||||
|
||||
### 5. Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
📄 **Abrir Archivo:** [Balance de estrés-recuperación en jugadores universitarios de voleibol durante una temporada](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222)
|
||||
|
||||
---
|
||||
|
||||
### 6. NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76
|
||||
|
||||
Artículo de lectura complementaria
|
||||
|
||||
📄 **Abrir Archivo:** [NIVELES DE ESTRÉS-RECUPERACIÓN EN DEPORTISTAS VARONES DE LA PROVINCIA DE LEÓN A TRAVÉS DEL CUESTIONARIO RESTQ-76](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223)
|
||||
|
||||
---
|
||||
|
||||
### 7. Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [Incidencia de Lesiones en el Voleibol ¿Pueden ser una Guía para la Prescripción de la Preparación Física?](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224)
|
||||
|
||||
---
|
||||
|
||||
### 8. ¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [¿Cuál Podría Ser la Frecuencia Ideal de Entrenamientos Semanales de las Categorías de Base en el Voleibol?](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225)
|
||||
|
||||
---
|
||||
|
||||
### 9. ¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [¿Cómo Desarrollar Deportistas Robustos y Sólidos para los Requerimientos del Voleibol en el Largo Plazo?](/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226)
|
||||
|
||||
## Preparación Atlética
|
||||
|
||||
### 1. PREPARACIÓN ATLÉTICA
|
||||
|
||||
📹 *Video disponible — ID: 1173231315*
|
||||
|
||||
## Resumen de Clase: Preparación Atlética en el Voleibol
|
||||
|
||||
**Profesor:** Alejandro Bertorello
|
||||
|
||||
En este segundo encuentro del curso para Entrenadores Nacionales Nivel 2, se abordó la implementación práctica de la preparación física, enfocándose en la sesión de entrenamiento como la unidad estructural básica y el rol del entrenador/preparador en el campo.
|
||||
|
||||
|
||||
---
|
||||
### 1. Filosofía y Rol del Preparador Físico
|
||||
|
||||
|
||||
- **Observación Pedagógica:** El preparador debe estar presente y activo, corrigiendo técnicas y dando feedback constante. No se puede dirigir una sesión de pesas de forma pasiva.
|
||||
|
||||
- **Individualidad:** Es fundamental diferenciar los planes según el tiempo de juego, historial de lesiones y fatiga acumulada del deportista.
|
||||
|
||||
- **Seguridad y Hábitos:** En etapas formativas, es clave enseñar la higiene del gimnasio (orden de materiales) y la seguridad entre compañeros (cuidar al que levanta peso).
|
||||
|
||||
|
||||
### 2. Objetivos Principales
|
||||
|
||||
|
||||
- **Prevención de Lesiones:** El foco está en proteger las zonas críticas del voleibolista: **hombros, rodillas, región lumbar y tobillos**.
|
||||
|
||||
- **Entrenamiento de Fuerza:** Se considera la capacidad física prioritaria. Un deportista robusto absorbe mejor las cargas de salto y competencia.
|
||||
|
||||
- **Disponibilidad:** El fin último es que el jugador esté disponible para entrenar y jugar la mayor cantidad de tiempo posible.
|
||||
|
||||
|
||||
### 3. Estructura de la Sesión por Bloques
|
||||
|
||||
Bertorello propone organizar la sesión en un "gradiente" para optimizar la energía y evitar la fatiga coordinativa:
|
||||
|
||||
|
||||
| Bloque | Contenido |
|
||||
| --- | --- |
|
||||
| **Movilidad** | Preparación de columna, cadera, tobillo y zona dorsal. |
|
||||
| **Prevención** | Ejercicios específicos de hombro (manguito rotador) y rodilla. |
|
||||
| **Potencia / Dinámicos** | Cargadas, arranques o saltos (realizar con el sistema nervioso fresco). |
|
||||
| **Fuerza Máxima** | Ejercicios básicos con cargas elevadas (Sentadillas, Pesos Muertos). |
|
||||
| **Estructura** | Trabajo complementario de masa muscular y núcleo (Core). |
|
||||
|
||||
### 4. Logística y Tiempos
|
||||
|
||||
|
||||
- **Prioridad al Vóley:** La preparación física no debe "robar" tiempo de cancha. Si el espacio es reducido, la prevención debe hacerse en pasillos o vestuarios antes de pisar la cancha.
|
||||
|
||||
- **Flexibilidad Horaria:** El trabajo de pesas puede realizarse antes, durante (división de grupos) o después de la pelota, adaptándose a la infraestructura de cada club.
|
||||
|
||||
|
||||
>
|
||||
"El equipo no gana solo por estar bien físicamente, gana porque juega bien al vóley. La preparación física es el aliado que permite entrenar más y mejor."
|
||||
|
||||
---
|
||||
|
||||
### 2. Preparación Atlética
|
||||
|
||||
Presentación de la segunda asignatura
|
||||
|
||||
📄 **Abrir Archivo:** [Preparación Atlética](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522)
|
||||
|
||||
---
|
||||
|
||||
### 3. Modelos de planes de sesiones de preparación física
|
||||
|
||||
Planes de sesiones de preparación física
|
||||
|
||||
📄 **Abrir Archivo:** [Modelos de planes de sesiones de preparación física](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648)
|
||||
|
||||
---
|
||||
|
||||
### 4. Modelos de planes
|
||||
|
||||
Planes deportistas intermedios
|
||||
|
||||
📄 **Abrir Archivo:** [Modelos de planes](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649)
|
||||
|
||||
---
|
||||
|
||||
### 5. Planes deportistas principiantes
|
||||
|
||||
Modelos de planes
|
||||
|
||||
📄 **Abrir Archivo:** [Planes deportistas principiantes](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650)
|
||||
|
||||
---
|
||||
|
||||
### 6. Modelo de sesiones de preparación física en el vóleibol
|
||||
|
||||
Modelos de sesiones de preparación física: preventiva, carga, choque y activación
|
||||
|
||||
📄 **Abrir Archivo:** [Modelo de sesiones de preparación física en el vóleibol](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229)
|
||||
|
||||
---
|
||||
|
||||
### 7. Modelo de ejercicios preventivos de lesiones en el vóleibol
|
||||
|
||||
📹 *Video disponible — ID: 1063655414*
|
||||
|
||||
Sesión preventiva general
|
||||
|
||||
---
|
||||
|
||||
### 8. Sesión Preventiva (Post viaje)
|
||||
|
||||
📹 *Video disponible — ID: 1063657248*
|
||||
|
||||
Sesión preventiva
|
||||
|
||||
---
|
||||
|
||||
### 9. Modelo de Sesión de carga - choque
|
||||
|
||||
Modelo de sesión para deportistas expertos y avanzados
|
||||
|
||||
📄 **Abrir Archivo:** [Modelo de Sesión de carga - choque](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232)
|
||||
|
||||
---
|
||||
|
||||
### 10. Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
📄 **Abrir Archivo:** [Efecto del entrenamiento de fuerza en el salto de jugadores adolescentes de voleibol: una revisión sistemática](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233)
|
||||
|
||||
---
|
||||
|
||||
### 11. Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [Revisión Descriptiva de las Lesiones más Frecuentes Durante la Práctica del Voleibol](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234)
|
||||
|
||||
---
|
||||
|
||||
### 12. Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol
|
||||
|
||||
Artículo de lectura complementaria
|
||||
|
||||
📄 **Abrir Archivo:** [Resistencia y Fuerza Muscular como Factores Predominantes en el Remate entre Jóvenes Atletas de Voleibol](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235)
|
||||
|
||||
---
|
||||
|
||||
### 13. Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [Ejercicios de Fuerza para el Tren Inferior con el Cinturón y el Plano Inclinado](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236)
|
||||
|
||||
---
|
||||
|
||||
### 14. ¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [¿Cómo Diseñar Entradas en Calor Sin Pelota Efectivas en el Voleibol?](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237)
|
||||
|
||||
---
|
||||
|
||||
### 15. Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión
|
||||
|
||||
Material de lectura complementaria
|
||||
|
||||
🔗 **Abrir Enlace:** [Características Físicas y Fisiológicas de las Jugadoras de Voleibol. Un Trabajo de Revisión](/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238)
|
||||
|
||||
## Explicación del Trabajo Práctico
|
||||
|
||||
### 1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR
|
||||
|
||||
📹 *Video disponible — ID: 1173576229*
|
||||
|
||||
## Consignas: Trabajo Práctico Integrador (TPI)
|
||||
|
||||
|
||||
**Profesor:** Alejandro Bertorello
|
||||
|
||||
|
||||
Esta clase detalla las pautas para la elaboración del trabajo final, cuyo objetivo es integrar los conocimientos de planificación y preparación atlética en una propuesta práctica aplicada a un equipo de voleibol.
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 1. Objetivo del Diseño
|
||||
|
||||
|
||||
|
||||
- **Diseño de Macrociclo:** Se debe completar el archivo Excel suministrado por la cátedra que contempla una estructura de 12 semanas.
|
||||
|
||||
- **Periodo de Enfoque:** El trabajo se centra exclusivamente en el periodo de competencia (temporada de partidos).
|
||||
|
||||
- **Contexto del Equipo:** Se planifica para un equipo ideal que entrena entre 3 y 4 veces por semana, además de la competencia.
|
||||
|
||||
|
||||
|
||||
### 2. Escenarios y Variables a Incluir
|
||||
|
||||
|
||||
El macrociclo debe reflejar la realidad del deporte, alternando sesiones de entrenamiento con los siguientes hitos obligatorios:
|
||||
|
||||
|
||||
|
||||
- **8 partidos de fin de semana:** Encuentros regulares los días sábado o domingo.
|
||||
|
||||
- **1 partido reprogramado:** Un encuentro que debe ubicarse en un día de semana (ej. miércoles).
|
||||
|
||||
- **2 torneos cortos:** Competencias de tres días consecutivos (sábado, domingo y lunes).
|
||||
|
||||
- **1 torneo largo:** Una competencia que abarca casi una semana completa.
|
||||
|
||||
- **1 fin de semana libre:** Espacio destinado al descanso o ajuste de cargas.
|
||||
|
||||
|
||||
|
||||
### 3. Metodología de Carga en el Archivo
|
||||
|
||||
|
||||
|
||||
- **Planificación Inversa:** Se recomienda empezar marcando las fechas de competencia y, desde allí, planificar "hacia atrás" los días de carga, choque, activación y descarga.
|
||||
|
||||
- **Tipos de Sesión:** Solo se debe indicar el nombre de la sesión (ej. "Plan de Choque" o "Activación") según el código de colores visto en clase, no el detalle de cada ejercicio.
|
||||
|
||||
- **Uso de Colores:** El archivo Excel genera automáticamente los colores al ingresar el tipo de sesión o partido, facilitando la lectura visual de la carga.
|
||||
|
||||
|
||||
|
||||
### 4. Importancia de las Observaciones
|
||||
|
||||
|
||||
|
||||
- **Contextualización:** El apartado de observaciones al final del archivo es fundamental para la nota final.
|
||||
|
||||
- **Justificación:** Se deben explicar decisiones basadas en el contexto, como el manejo de fatiga tras un partido largo, viajes de muchas horas o limitaciones de infraestructura (ej. gimnasio cerrado).
|
||||
|
||||
|
||||
|
||||
### 5. Evaluación y Entrega
|
||||
|
||||
|
||||
|
||||
- **Fecha Límite:** La entrega final es el 30 de abril a las 23:59 hs.
|
||||
|
||||
- **Criterios:** Se valorará la coherencia entre las semanas, la dosificación de las cargas y la capacidad de adaptar el plan a los imprevistos planteados.
|
||||
|
||||
- **Recuperación:** En caso de no aprobar (nota mínima 6), el alumno dispone de una semana para corregir y reenviar el trabajo.
|
||||
|
||||
---
|
||||
|
||||
### 2. Consignas del Trabajo práctico
|
||||
|
||||
Hola a todos!
|
||||
|
||||
- Este es el archivo con las **consignas del trabajo práctico integrador de las 2 asignaturas: planificación de la preparación física y preparación atlética en el vóleibol**
|
||||
- Para poder realizar el trabajo deben descargar desde **Evaluaciones** el archivo en formato Excel **"Trabajo práctico preparación física entrenador nacional 2"**
|
||||
|
||||
****Los saludo y quedo a disposición ante cualquier tipo de consultas!****
|
||||
|
||||
📄 **Abrir Archivo:** [Consignas del Trabajo práctico](/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686)
|
||||
|
||||
# Módulo 2 — Entrenamiento
|
||||
|
||||
## Entrenamiento de Centrales y Opuestos/as
|
||||
|
||||
### 1. EL OPUESTO
|
||||
|
||||
CARACTERISTICAS Y DESARROLLO DEL OPUESTO
|
||||
|
||||
📄 **Abrir Archivo:** [EL OPUESTO](/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960)
|
||||
|
||||
---
|
||||
|
||||
### 2. DESARROLLO DE LOS CENTRALES
|
||||
|
||||
EL DESARROLLO DE LAS CENTRALES EN ATAQUE Y BLOQUEO
|
||||
|
||||
📄 **Abrir Archivo:** [DESARROLLO DE LOS CENTRALES](/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961)
|
||||
|
||||
---
|
||||
|
||||
### 3. PRIORIDAD EN EL BLOQUEO
|
||||
|
||||
📹 *Video disponible — ID: 919369433*
|
||||
|
||||
PRIORIDAD EN EL BLOQUEO
|
||||
|
||||
---
|
||||
|
||||
### 4. ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS
|
||||
|
||||
📹 *Video disponible — ID: 1179197191*
|
||||
|
||||
clase en vivo
|
||||
|
||||
---
|
||||
|
||||
### 5. ATAQUE B
|
||||
|
||||
📹 *Video disponible — ID: 919341704*
|
||||
|
||||
ATAQUE B
|
||||
|
||||
---
|
||||
|
||||
### 6. B CON RECEPCION ADMIRACION
|
||||
|
||||
📹 *Video disponible — ID: 919342668*
|
||||
|
||||
B CON RECEPCION ADMIRACION
|
||||
|
||||
---
|
||||
|
||||
### 7. LA B MANTIENE LA DISTANCIA
|
||||
|
||||
📹 *Video disponible — ID: 919346562*
|
||||
|
||||
LA B MANTIENE LA DISTANCIA
|
||||
|
||||
---
|
||||
|
||||
### 8. HATU RECEPCION PERFECTA
|
||||
|
||||
📹 *Video disponible — ID: 919347866*
|
||||
|
||||
HATU RECEPCION PERFECTA
|
||||
|
||||
---
|
||||
|
||||
### 9. HATU CON PELOTA SEPARADA
|
||||
|
||||
📹 *Video disponible — ID: 919348493*
|
||||
|
||||
HATU CON PELOTA SEPARADA
|
||||
|
||||
---
|
||||
|
||||
### 10. HATU MARCADA
|
||||
|
||||
📹 *Video disponible — ID: 919351892*
|
||||
|
||||
HATU MARCADA
|
||||
|
||||
---
|
||||
|
||||
### 11. HATUMARCADA BIEN ATACADA
|
||||
|
||||
📹 *Video disponible — ID: 919352848*
|
||||
|
||||
HATU MARCADA BIEN ATACADA
|
||||
|
||||
---
|
||||
|
||||
### 12. HATU BIEN HECHA
|
||||
|
||||
📹 *Video disponible — ID: 919353448*
|
||||
|
||||
HATU BIEN HECHA
|
||||
|
||||
---
|
||||
|
||||
### 13. HANA POSITIVA
|
||||
|
||||
📹 *Video disponible — ID: 919354134*
|
||||
|
||||
HANA POSITIVA
|
||||
|
||||
---
|
||||
|
||||
### 14. HANATI CON RECEPCION SEPARADA
|
||||
|
||||
📹 *Video disponible — ID: 919355668*
|
||||
|
||||
HANATI CON RECEPCION SEPARADA
|
||||
|
||||
---
|
||||
|
||||
### 15. HANA RECEPCION A 2
|
||||
|
||||
📹 *Video disponible — ID: 919356423*
|
||||
|
||||
HANA RECEPCION A 2
|
||||
|
||||
---
|
||||
|
||||
### 16. BETI A UN PIE ATRAS
|
||||
|
||||
📹 *Video disponible — ID: 919357109*
|
||||
|
||||
BETI A UN PIE ATRAS
|
||||
|
||||
---
|
||||
|
||||
### 17. BETI EN JUEGO
|
||||
|
||||
📹 *Video disponible — ID: 919358607*
|
||||
|
||||
BETI EN JUEGO
|
||||
|
||||
---
|
||||
|
||||
### 18. CENTRAL AL MEDIO CON RECEPCION A 2
|
||||
|
||||
📹 *Video disponible — ID: 919359386*
|
||||
|
||||
CENTRAL AL MEDIO CON RECEPCION A 2
|
||||
|
||||
---
|
||||
|
||||
### 19. HANATI VOLADA CON RECEPCION A 4
|
||||
|
||||
📹 *Video disponible — ID: 919359855*
|
||||
|
||||
HANATI VOLADA CON RECEPCION A 4
|
||||
|
||||
---
|
||||
|
||||
### 20. HANA CON RECEPCION A 2 SEPARADA
|
||||
|
||||
📹 *Video disponible — ID: 919360318*
|
||||
|
||||
HANA CON RECEPCION A 2 SEPARADA
|
||||
|
||||
---
|
||||
|
||||
### 21. APOYO 0
|
||||
|
||||
📹 *Video disponible — ID: 919363158*
|
||||
|
||||
APOYO 0
|
||||
|
||||
---
|
||||
|
||||
### 22. CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO
|
||||
|
||||
📹 *Video disponible — ID: 919363728*
|
||||
|
||||
CENTRAL ATACA DE SEGUNDA ENTRENAMIENTO DEL TIEMPO
|
||||
|
||||
---
|
||||
|
||||
### 23. SKIPPED STEP
|
||||
|
||||
📹 *Video disponible — ID: 919364522*
|
||||
|
||||
PASO SALTADO PARA CAER DEL BLOQUEO Y SALIR A ATACAR
|
||||
|
||||
---
|
||||
|
||||
### 24. GLOBAL TECNICO CON EL CENTRAL
|
||||
|
||||
📹 *Video disponible — ID: 919365485*
|
||||
|
||||
EJERCICIO GLOBAL TECNICO CON EL CENTRAL
|
||||
|
||||
---
|
||||
|
||||
### 25. VISUALIZACION DEL CENTRAL EN BLOQUEO
|
||||
|
||||
📹 *Video disponible — ID: 919366263*
|
||||
|
||||
VISUALIZACION DEL CENTRAL EN BLOQUEO
|
||||
|
||||
## Puntas y Liberos/as
|
||||
|
||||
### 1. PUNTAS Y LÍBEROS/AS
|
||||
|
||||
📹 *Video disponible — ID: 1179888270*
|
||||
|
||||
clase en vivo
|
||||
|
||||
---
|
||||
|
||||
### 2. SPLIT STEP
|
||||
|
||||
📹 *Video disponible — ID: 921876274*
|
||||
|
||||
SPLIT STEP
|
||||
|
||||
---
|
||||
|
||||
### 3. LOS PUNTAS RECEPTORES Y EL LIBERO
|
||||
|
||||
PUNTAS RECEPTORES Y LIBEROS
|
||||
|
||||
📄 **Abrir Archivo:** [LOS PUNTAS RECEPTORES Y EL LIBERO](/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177)
|
||||
|
||||
---
|
||||
|
||||
### 4. CARRERA DE ATAQUE DESDE 6 A 4
|
||||
|
||||
📹 *Video disponible — ID: 921873304*
|
||||
|
||||
CARRERA DE ATAQUE DE 6 A 4
|
||||
|
||||
---
|
||||
|
||||
### 5. CONTRATAQUE DESPUES DE CAER DE BLOQUEO
|
||||
|
||||
📹 *Video disponible — ID: 921873724*
|
||||
|
||||
CONTRATAQUE DESPUES DE CAER DE BLOQUEO
|
||||
|
||||
---
|
||||
|
||||
### 6. CONTRATAQUE POR 4 DESPUES DE CAER DE BLOQUEO
|
||||
|
||||
📹 *Video disponible — ID: 921873953*
|
||||
|
||||
ATAQUE DESPUES DE BLOQUEAR
|
||||
|
||||
---
|
||||
|
||||
### 7. EVALUACION POSICIONAL
|
||||
|
||||
📹 *Video disponible — ID: 921874753*
|
||||
|
||||
EVALUACION POSICIONAL
|
||||
|
||||
---
|
||||
|
||||
### 8. GLOBAL TECNICO DE LA PIPE
|
||||
|
||||
📹 *Video disponible — ID: 921875020*
|
||||
|
||||
GLOBAL TECNICO DE LA PIPE
|
||||
|
||||
---
|
||||
|
||||
### 9. RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA
|
||||
|
||||
📹 *Video disponible — ID: 921875302*
|
||||
|
||||
RECEPCION DE MASSIMINO CON SAQUE DE LA MAQUINA
|
||||
|
||||
---
|
||||
|
||||
### 10. RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO
|
||||
|
||||
📹 *Video disponible — ID: 921875519*
|
||||
|
||||
RECEPCION SOBRE LA LINEA SALIENDO DE ADENTRO
|
||||
|
||||
---
|
||||
|
||||
### 11. RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO
|
||||
|
||||
📹 *Video disponible — ID: 921875778*
|
||||
|
||||
RECEPCION Y ATAQUE POR 4 SALIENDO DE ADENTRO
|
||||
|
||||
---
|
||||
|
||||
### 12. TIPO DE COMBINACIONES QUE JUEGAN LOS PUNTAS
|
||||
|
||||
📹 *Video disponible — ID: 921879520*
|
||||
|
||||
COMBINACIONES DE LOS PUNTAS
|
||||
|
||||
---
|
||||
|
||||
### 13. ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO
|
||||
|
||||
📹 *Video disponible — ID: 921879925*
|
||||
|
||||
ATAQUE DE LA PIPE POR DISTANCIA O TIEMPO
|
||||
|
||||
## Entrenamiento de Armadoras
|
||||
|
||||
### 1. ENTRENAMIENTO DE LOS Y LAS ARMADORAS
|
||||
|
||||
📹 *Video disponible — ID: 1181188693*
|
||||
|
||||
clase en vivo
|
||||
|
||||
## Explicación del Trabajo Práctico
|
||||
|
||||
### 1. EXPLICACIÓN DEL TRABAJO PRÁCTICO A PRESENTAR
|
||||
|
||||
📹 *Video disponible — ID: 1181892359*
|
||||
|
||||
clase en vivo
|
||||
|
||||
|
||||
---
|
||||
*Fin del material de estudio. 66 temas extraídos.*
|
||||
@@ -0,0 +1,227 @@
|
||||
[
|
||||
{
|
||||
"text": "Políticas de cookies",
|
||||
"href": "https://kb.onlineeducation.center/es/cookies/",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Políticas de privacidad",
|
||||
"href": "https://kb.onlineeducation.center/es/privacy/",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Términos de uso",
|
||||
"href": "https://kb.onlineeducation.center/es/terms/",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Aceptar",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#agree",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "",
|
||||
"href": "https://voley.onlineeducation.center/es/campus",
|
||||
"title": "Voley"
|
||||
},
|
||||
{
|
||||
"text": "Elva Karina Saldis",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Su cuenta",
|
||||
"href": "https://account.onlineeducation.center/es/",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Configuración regional",
|
||||
"href": "https://account.onlineeducation.center/es/config?bth=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Datos para certificados",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/e/14197/user/account?r=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Mesa de ayuda",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/help-desk/tickets",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Cerrar sesión",
|
||||
"href": "https://voley.onlineeducation.center/es/logout",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "English",
|
||||
"href": "https://voley.onlineeducation.center/en/campus/student/training/e/14197/m/19097/s/35519/study-resources/list?hl=en&locale_switcher=1",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Inicio",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Información",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/info",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Auditorio",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/auditorium/sessions",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Material de estudio",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/study-resources",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Foros",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/forum",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Evaluaciones",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Trabajos prácticos",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/practice-work",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Administración",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Calificaciones",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/course-results",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Certificaciones",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/certificate/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Su opinión",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/review/make",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Mesa de ayuda",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/help-desk/tickets",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Ir a la encuesta",
|
||||
"href": "https://onlineeducation.center/es/encuesta/modulo/curso-entrenador-nacional-dos-edicion-2022-t-261ca228f64845?email=saldis_karina%40hotmail.com&studentname=Elva%20Karina%20Saldis&editionnumber=5&modulenumber=1",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Opinar",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/review/make",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Módulo 1",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#collapse1",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "PLANIFICACION",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "PREPARACION ATLETICA",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "SEGUIMIENTOS DE EQUIPOS",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL 2",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35525/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "TRABAJO PRACTICO FINAL DE LA UNIDAD",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Módulo 2",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list#collapse2",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS/AS",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "PUNTAS Y LIBEROS/AS",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "ENTRENAMIENTO DE LOS Y LAS ARMADORAS",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Abrir Archivo",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Abrir Archivo",
|
||||
"href": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Términos de uso",
|
||||
"href": "https://kb.onlineeducation.center/es/terms/",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Política de privacidad",
|
||||
"href": "https://kb.onlineeducation.center/es/privacy/",
|
||||
"title": ""
|
||||
},
|
||||
{
|
||||
"text": "Powered by",
|
||||
"href": "https://onlineeducation.center/",
|
||||
"title": "powered by Online Education Center"
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
@@ -0,0 +1,789 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Curso de Vóley — Dashboard Offline</title>
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
||||
background: #f4f6f8;
|
||||
color: #1a1a2e;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.header {
|
||||
background: linear-gradient(135deg, #004d6c 0%, #00a9b8 100%);
|
||||
color: white;
|
||||
padding: 2rem 2rem 1.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
.header h1 { font-size: 1.8rem; margin-bottom: 0.3rem; }
|
||||
.header p { opacity: 0.9; font-size: 0.95rem; }
|
||||
.header .stats { display: flex; justify-content: center; gap: 2rem; margin-top: 1rem; flex-wrap: wrap; }
|
||||
.header .stat { background: rgba(255,255,255,0.15); padding: 0.5rem 1rem; border-radius: 8px; font-size: 0.85rem; }
|
||||
.container { max-width: 1100px; margin: 0 auto; padding: 1.5rem; }
|
||||
|
||||
.modulo-card {
|
||||
background: white;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 1.5rem;
|
||||
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
|
||||
overflow: hidden;
|
||||
}
|
||||
.modulo-header {
|
||||
background: #004d6c;
|
||||
color: white;
|
||||
padding: 1rem 1.5rem;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.modulo-header:hover { background: #005f82; }
|
||||
.modulo-header h2 { font-size: 1.2rem; font-weight: 600; }
|
||||
.modulo-header .toggle { font-size: 1.2rem; transition: transform 0.3s; }
|
||||
.modulo-header .toggle.open { transform: rotate(180deg); }
|
||||
.modulo-body { padding: 0; }
|
||||
.modulo-body.collapsed { display: none; }
|
||||
|
||||
.seccion-card {
|
||||
border-bottom: 1px solid #eee;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.seccion-card:last-child { border-bottom: none; }
|
||||
.seccion-header {
|
||||
padding: 0.8rem 1.5rem;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background: #fafafa;
|
||||
}
|
||||
.seccion-header:hover { background: #f0f4f8; }
|
||||
.seccion-header h3 { font-size: 1rem; color: #004d6c; }
|
||||
.seccion-header .badge-count {
|
||||
background: #00a9b8;
|
||||
color: white;
|
||||
border-radius: 12px;
|
||||
padding: 0.15rem 0.6rem;
|
||||
font-size: 0.75rem;
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
.seccion-content { padding: 1rem 1.5rem; display: none; }
|
||||
.seccion-content.open { display: block; }
|
||||
.seccion-content h4 { color: #004d6c; margin: 1rem 0 0.5rem; font-size: 0.95rem; }
|
||||
|
||||
.tab-group { display: flex; gap: 0.5rem; margin-bottom: 1rem; flex-wrap: wrap; }
|
||||
.tab-btn {
|
||||
padding: 0.4rem 1rem;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 6px;
|
||||
background: white;
|
||||
cursor: pointer;
|
||||
font-size: 0.85rem;
|
||||
color: #555;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
.tab-btn:hover { border-color: #00a9b8; color: #004d6c; }
|
||||
.tab-btn.active { background: #00a9b8; color: white; border-color: #00a9b8; }
|
||||
.tab-panel { display: none; }
|
||||
.tab-panel.active { display: block; }
|
||||
|
||||
.video-list { list-style: none; }
|
||||
.video-list li {
|
||||
padding: 0.4rem 0;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.video-list li:last-child { border-bottom: none; }
|
||||
.video-list .vimeo-id { color: #00a9b8; font-family: monospace; }
|
||||
|
||||
.file-list { list-style: none; }
|
||||
.file-list li {
|
||||
padding: 0.3rem 0;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.file-list a {
|
||||
color: #004d6c;
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dashed #ccc;
|
||||
}
|
||||
.file-list a:hover { border-bottom-color: #004d6c; }
|
||||
|
||||
.preview-text {
|
||||
background: #f9f9f9;
|
||||
padding: 0.8rem;
|
||||
border-radius: 8px;
|
||||
font-size: 0.85rem;
|
||||
line-height: 1.5;
|
||||
max-height: 300px;
|
||||
overflow-y: auto;
|
||||
white-space: pre-wrap;
|
||||
font-family: inherit;
|
||||
}
|
||||
.preview-text h1 { font-size: 1.1rem; margin: 0.5rem 0; }
|
||||
.preview-text h2 { font-size: 1rem; margin: 0.5rem 0; }
|
||||
.preview-text p { margin: 0.3rem 0; }
|
||||
|
||||
.vimeo-link {
|
||||
display: inline-block;
|
||||
background: #00a9b8;
|
||||
color: white;
|
||||
padding: 0.2rem 0.6rem;
|
||||
border-radius: 4px;
|
||||
font-size: 0.75rem;
|
||||
text-decoration: none;
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
.vimeo-link:hover { background: #008c99; }
|
||||
|
||||
.screenshot-img {
|
||||
max-width: 100%;
|
||||
border-radius: 8px;
|
||||
border: 1px solid #ddd;
|
||||
margin-top: 0.5rem;
|
||||
cursor: pointer;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
.screenshot-img:hover { opacity: 0.9; }
|
||||
|
||||
.empty-state { color: #999; font-style: italic; font-size: 0.85rem; padding: 0.5rem 0; }
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
color: #999;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.header h1 { font-size: 1.3rem; }
|
||||
.header .stats { gap: 0.8rem; }
|
||||
.header .stat { font-size: 0.75rem; padding: 0.3rem 0.6rem; }
|
||||
.container { padding: 0.8rem; }
|
||||
.modulo-header { padding: 0.8rem 1rem; }
|
||||
.seccion-header { padding: 0.6rem 1rem; }
|
||||
.seccion-content { padding: 0.8rem 1rem; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>🏐 Curso de Entrenador Nacional de Vóley</h1>
|
||||
<p>Contenido descargado — Navegación offline</p>
|
||||
<div class="stats">
|
||||
<div class="stat">📚 2 módulos</div>
|
||||
<div class="stat">📖 11 secciones</div>
|
||||
<div class="stat">🎬 42 videos</div>
|
||||
<div class="stat">📄 32 archivos</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
|
||||
<div class="modulo-card">
|
||||
<div class="modulo-header" onclick="toggleModulo('mod-0')">
|
||||
<h2>Módulo 1 — Planificación</h2>
|
||||
<span class="toggle open" id="toggle-mod-0">▲</span>
|
||||
</div>
|
||||
<div class="modulo-body" id="mod-0">
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Planificacion')">
|
||||
<h3>Planificación <span class="badge-count">13</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Planificacion">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Planificacion">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Planificacion">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_1_Planificacion-Planificacion">🎬 Videos (1)</button>
|
||||
<button class="tab-btn" data-tab="archivos-sec-Modulo_1_Planificacion-Planificacion">📄 Archivos (12)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Planificacion">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Planificacion"><div class="preview-text"><h1>Planificacion</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_1_Planificacion-Planificacion"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">1170245111</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1170245111" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1170245111"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="archivos-sec-Modulo_1_Planificacion-Planificacion"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226</code></li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_46541_Abrir_Enlace.bin">archivo_46541_Abrir_Enlace.bin</a> (333.9 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_50142_Abrir_Enlace.bin">archivo_50142_Abrir_Enlace.bin</a> (311.7 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_50144_Abrir_Enlace.bin">archivo_50144_Abrir_Enlace.bin</a> (312.9 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Planificacion/archivo_50145_Abrir_Enlace.bin">archivo_50145_Abrir_Enlace.bin</a> (323.2 KB)</li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Planificacion">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/Planificacion/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/Planificacion/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Preparacion_Atletica')">
|
||||
<h3>Preparación Atlética <span class="badge-count">19</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Preparacion_Atletica">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Preparacion_Atletica">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Preparacion_Atletica">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_1_Planificacion-Preparacion_Atletica">🎬 Videos (3)</button>
|
||||
<button class="tab-btn" data-tab="archivos-sec-Modulo_1_Planificacion-Preparacion_Atletica">📄 Archivos (16)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Preparacion_Atletica">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Preparacion_Atletica"><div class="preview-text"><h1>Preparacion Atletica</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_1_Planificacion-Preparacion_Atletica"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">1173231315</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1173231315" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1173231315"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">1063655414</span>
|
||||
Video 2
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1063655414" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1063655414"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">1063657248</span>
|
||||
Video 3
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1063657248" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1063657248"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="archivos-sec-Modulo_1_Planificacion-Preparacion_Atletica"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237</code></li><li>🔗 Abrir Enlace — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238</code></li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50139_Abrir_Enlace.bin">archivo_50139_Abrir_Enlace.bin</a> (337.8 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50140_Abrir_Enlace.bin">archivo_50140_Abrir_Enlace.bin</a> (332.1 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50141_Abrir_Enlace.bin">archivo_50141_Abrir_Enlace.bin</a> (363.5 KB)</li><li>📎 <a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/archivo_50143_Abrir_Enlace.bin">archivo_50143_Abrir_Enlace.bin</a> (322.9 KB)</li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Preparacion_Atletica">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/Preparacion_Atletica/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/Preparacion_Atletica/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Explicacion_TP')">
|
||||
<h3>Explicación del TP <span class="badge-count">2</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Explicacion_TP">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Explicacion_TP">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Explicacion_TP">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_1_Planificacion-Explicacion_TP">🎬 Videos (1)</button>
|
||||
<button class="tab-btn" data-tab="archivos-sec-Modulo_1_Planificacion-Explicacion_TP">📄 Archivos (1)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Explicacion_TP">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Explicacion_TP"><div class="preview-text"><h1>Explicacion TP</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_1_Planificacion-Explicacion_TP"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">1173576229</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1173576229" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1173576229"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="archivos-sec-Modulo_1_Planificacion-Explicacion_TP"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686</code></li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Explicacion_TP">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/Explicacion_TP/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/Explicacion_TP/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Seguimientos_Equipos')">
|
||||
<h3>Seguimientos de Equipos </h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Seguimientos_Equipos">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Seguimientos_Equipos">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Seguimientos_Equipos">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Seguimientos_Equipos">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Seguimientos_Equipos"><div class="preview-text"><h1>Seguimientos Equipos</h1>
|
||||
<br>
|
||||
<p>Oops! An Error Occurred</p>
|
||||
<p>The server returned a "500 Internal Server Error".</p>
|
||||
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Seguimientos_Equipos">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/Seguimientos_Equipos/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/Seguimientos_Equipos/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Analisis_Equipos_1')">
|
||||
<h3>Análisis de Equipos 1 </h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Analisis_Equipos_1">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Analisis_Equipos_1">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_1">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Analisis_Equipos_1">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_1"><div class="preview-text"><h1>Analisis Equipos 1</h1>
|
||||
<br>
|
||||
<p>Oops! An Error Occurred</p>
|
||||
<p>The server returned a "500 Internal Server Error".</p>
|
||||
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Analisis_Equipos_1">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/Analisis_Equipos_1/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/Analisis_Equipos_1/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-Analisis_Equipos_2')">
|
||||
<h3>Análisis de Equipos 2 </h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-Analisis_Equipos_2">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-Analisis_Equipos_2">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_2">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-Analisis_Equipos_2">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-Analisis_Equipos_2"><div class="preview-text"><h1>Analisis Equipos 2</h1>
|
||||
<br>
|
||||
<p>Oops! An Error Occurred</p>
|
||||
<p>The server returned a "500 Internal Server Error".</p>
|
||||
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-Analisis_Equipos_2">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/Analisis_Equipos_2/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/Analisis_Equipos_2/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_1_Planificacion-TP_Final_Unidad')">
|
||||
<h3>TP Final de la Unidad </h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_1_Planificacion-TP_Final_Unidad">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_1_Planificacion-TP_Final_Unidad">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_1_Planificacion-TP_Final_Unidad">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_1_Planificacion-TP_Final_Unidad">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_1_Planificacion-TP_Final_Unidad"><div class="preview-text"><h1>TP Final Unidad</h1>
|
||||
<br>
|
||||
<p>Oops! An Error Occurred</p>
|
||||
<p>The server returned a "500 Internal Server Error".</p>
|
||||
<p>Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_1_Planificacion-TP_Final_Unidad">
|
||||
<p><a href="secciones/Modulo_1_Planificacion/TP_Final_Unidad/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_1_Planificacion/TP_Final_Unidad/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="modulo-card">
|
||||
<div class="modulo-header" onclick="toggleModulo('mod-1')">
|
||||
<h2>Módulo 2 — Entrenamiento</h2>
|
||||
<span class="toggle open" id="toggle-mod-1">▲</span>
|
||||
</div>
|
||||
<div class="modulo-body" id="mod-1">
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes')">
|
||||
<h3>Centrales y Opuestos/as <span class="badge-count">25</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">🎬 Videos (23)</button>
|
||||
<button class="tab-btn" data-tab="archivos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">📄 Archivos (2)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"><div class="preview-text"><h1>Centrales y Oponentes</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">919369433</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919369433" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919369433"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">1179197191</span>
|
||||
Video 2
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1179197191" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1179197191"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919341704</span>
|
||||
Video 3
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919341704" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919341704"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919342668</span>
|
||||
Video 4
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919342668" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919342668"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919346562</span>
|
||||
Video 5
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919346562" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919346562"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919347866</span>
|
||||
Video 6
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919347866" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919347866"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919348493</span>
|
||||
Video 7
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919348493" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919348493"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919351892</span>
|
||||
Video 8
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919351892" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919351892"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919352848</span>
|
||||
Video 9
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919352848" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919352848"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919353448</span>
|
||||
Video 10
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919353448" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919353448"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919354134</span>
|
||||
Video 11
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919354134" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919354134"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919355668</span>
|
||||
Video 12
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919355668" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919355668"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919356423</span>
|
||||
Video 13
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919356423" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919356423"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919357109</span>
|
||||
Video 14
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919357109" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919357109"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919358607</span>
|
||||
Video 15
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919358607" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919358607"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919359386</span>
|
||||
Video 16
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919359386" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919359386"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919359855</span>
|
||||
Video 17
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919359855" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919359855"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919360318</span>
|
||||
Video 18
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919360318" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919360318"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919363158</span>
|
||||
Video 19
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919363158" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919363158"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919363728</span>
|
||||
Video 20
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919363728" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919363728"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919364522</span>
|
||||
Video 21
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919364522" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919364522"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919365485</span>
|
||||
Video 22
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919365485" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919365485"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">919366263</span>
|
||||
Video 23
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/919366263" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/919366263"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="archivos-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960</code></li><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961</code></li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Centrales_y_Oponentes">
|
||||
<p><a href="secciones/Modulo_2_Entrenamiento/Centrales_y_Oponentes/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_2_Entrenamiento/Centrales_y_Oponentes/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Puntas_y_Liberos')">
|
||||
<h3>Puntas y Liberos/as <span class="badge-count">13</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">🎬 Videos (12)</button>
|
||||
<button class="tab-btn" data-tab="archivos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">📄 Archivos (1)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"><div class="preview-text"><h1>Puntas y Liberos</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">1179888270</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1179888270" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1179888270"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921876274</span>
|
||||
Video 2
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921876274" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921876274"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921873304</span>
|
||||
Video 3
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921873304" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921873304"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921873724</span>
|
||||
Video 4
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921873724" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921873724"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921873953</span>
|
||||
Video 5
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921873953" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921873953"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921874753</span>
|
||||
Video 6
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921874753" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921874753"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921875020</span>
|
||||
Video 7
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921875020" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875020"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921875302</span>
|
||||
Video 8
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921875302" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875302"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921875519</span>
|
||||
Video 9
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921875519" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875519"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921875778</span>
|
||||
Video 10
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921875778" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921875778"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921879520</span>
|
||||
Video 11
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921879520" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921879520"</small>
|
||||
</li><li>
|
||||
<span class="vimeo-id">921879925</span>
|
||||
Video 12
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/921879925" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/921879925"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="archivos-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos"><ul class="file-list"><li>🔗 Abrir Archivo — <code>https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177</code></li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Puntas_y_Liberos">
|
||||
<p><a href="secciones/Modulo_2_Entrenamiento/Puntas_y_Liberos/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_2_Entrenamiento/Puntas_y_Liberos/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras')">
|
||||
<h3>Entrenamiento de Armadoras <span class="badge-count">1</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">🎬 Videos (1)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras"><div class="preview-text"><h1>Entrenamiento Armadoras</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">1181188693</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1181188693" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1181188693"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Entrenamiento_Armadoras">
|
||||
<p><a href="secciones/Modulo_2_Entrenamiento/Entrenamiento_Armadoras/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_2_Entrenamiento/Entrenamiento_Armadoras/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="seccion-card">
|
||||
<div class="seccion-header" onclick="toggleSeccion('sec-Modulo_2_Entrenamiento-Explicacion_TP')">
|
||||
<h3>Explicación del TP <span class="badge-count">1</span></h3>
|
||||
<span class="toggle" id="toggle-sec-Modulo_2_Entrenamiento-Explicacion_TP">▼</span>
|
||||
</div>
|
||||
<div class="seccion-content" id="content-sec-Modulo_2_Entrenamiento-Explicacion_TP">
|
||||
<div class="tab-group">
|
||||
<button class="tab-btn active" data-tab="texto-sec-Modulo_2_Entrenamiento-Explicacion_TP">📝 Texto</button>
|
||||
<button class="tab-btn" data-tab="videos-sec-Modulo_2_Entrenamiento-Explicacion_TP">🎬 Videos (1)</button>
|
||||
<button class="tab-btn" data-tab="html-sec-Modulo_2_Entrenamiento-Explicacion_TP">🌐 HTML</button>
|
||||
</div>
|
||||
<div class="tab-panel active" id="texto-sec-Modulo_2_Entrenamiento-Explicacion_TP"><div class="preview-text"><h1>Explicacion TP</h1>
|
||||
<br>
|
||||
<blockquote>Extraído el 2026-05-02</blockquote>
|
||||
<br>
|
||||
<p>PLANIFICACION</p>
|
||||
<p>PREPARACION ATLETICA</p>
|
||||
<p>EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR</p>
|
||||
<p>SEGUIMIENTOS DE EQUIPOS</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL</p>
|
||||
<p>ANALISIS DE EQUIPOS DE VOLEIBOL 2</p>
|
||||
<p>TRABAJO PRACTICO FINAL DE LA UNIDAD</p>
|
||||
<br></div></div>
|
||||
<div class="tab-panel" id="videos-sec-Modulo_2_Entrenamiento-Explicacion_TP"><ul class="video-list"><li>
|
||||
<span class="vimeo-id">1181892359</span>
|
||||
Video 1
|
||||
<a class="vimeo-link" href="https://player.vimeo.com/video/1181892359" target="_blank">▶ Ver online</a>
|
||||
<br><small style="color:#999">yt-dlp "https://player.vimeo.com/video/1181892359"</small>
|
||||
</li></ul></div>
|
||||
<div class="tab-panel" id="html-sec-Modulo_2_Entrenamiento-Explicacion_TP">
|
||||
<p><a href="secciones/Modulo_2_Entrenamiento/Explicacion_TP/pagina.html" target="_blank" style="color:#004d6c;">Abrir página completa →</a></p>
|
||||
<iframe src="secciones/Modulo_2_Entrenamiento/Explicacion_TP/pagina.html" style="width:100%;height:400px;border:1px solid #ddd;border-radius:8px;"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
Generado el 2/5/2026 — Online Education Center · offline dashboard
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function toggleModulo(id) {
|
||||
const body = document.getElementById(id);
|
||||
const toggle = document.getElementById("toggle-" + id);
|
||||
const isOpen = body.classList.toggle("collapsed");
|
||||
toggle.classList.toggle("open");
|
||||
toggle.textContent = isOpen ? "▼" : "▲";
|
||||
}
|
||||
|
||||
function toggleSeccion(id) {
|
||||
const content = document.getElementById("content-" + id);
|
||||
const toggle = document.getElementById("toggle-" + id);
|
||||
const isOpen = content.classList.toggle("open");
|
||||
toggle.textContent = isOpen ? "▲" : "▼";
|
||||
}
|
||||
|
||||
// Tabs
|
||||
document.addEventListener("click", function(e) {
|
||||
const btn = e.target.closest(".tab-btn");
|
||||
if (!btn) return;
|
||||
|
||||
const tabGroup = btn.closest(".tab-group");
|
||||
tabGroup.querySelectorAll(".tab-btn").forEach(b => b.classList.remove("active"));
|
||||
btn.classList.add("active");
|
||||
|
||||
const tabId = btn.dataset.tab;
|
||||
const parent = btn.closest(".seccion-content");
|
||||
parent.querySelectorAll(".tab-panel").forEach(p => p.classList.remove("active"));
|
||||
document.getElementById(tabId)?.classList.add("active");
|
||||
});
|
||||
|
||||
// Abrir el primer módulo por defecto
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
const firstMod = document.querySelector(".modulo-body");
|
||||
if (firstMod) firstMod.classList.remove("collapsed");
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,217 @@
|
||||
[
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://account.onlineeducation.center/es/config?bth=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"text": "Configuración regional"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/e/14197/user/account?r=https%3A//voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"text": "Datos para certificados"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/en/campus/student/training/e/14197/m/19097/s/35519/study-resources/list?hl=en&locale_switcher=1",
|
||||
"text": "English"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/study-resources",
|
||||
"text": "Material de estudio"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list",
|
||||
"text": "PLANIFICACION"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list",
|
||||
"text": "PREPARACION ATLETICA"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list",
|
||||
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list",
|
||||
"text": "SEGUIMIENTOS DE EQUIPOS"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list",
|
||||
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35525/study-resources/list",
|
||||
"text": "ANALISIS DE EQUIPOS DE VOLEIBOL 2"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list",
|
||||
"text": "TRABAJO PRACTICO FINAL DE LA UNIDAD"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
"text": "ENTRENAMIENTO DE LOS CENTRALES Y OPUESTOS/AS"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list",
|
||||
"text": "PUNTAS Y LIBEROS/AS"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list",
|
||||
"text": "ENTRENAMIENTO DE LOS Y LAS ARMADORAS"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list",
|
||||
"text": "EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960",
|
||||
"text": "Abrir Archivo"
|
||||
},
|
||||
{
|
||||
"type": "pdf-link",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961",
|
||||
"text": "Abrir Archivo"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919369433?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919369433?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/1179197191?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/1179197191?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919341704?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919341704?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919342668?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919342668?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919346562?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919346562?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919347866?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919347866?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919348493?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919348493?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919351892?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919351892?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919352848?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919352848?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919353448?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919353448?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919354134?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919354134?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919355668?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919355668?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919356423?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919356423?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919357109?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919357109?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919358607?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919358607?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919359386?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919359386?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919359855?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919359855?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919360318?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919360318?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919363158?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919363158?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919363728?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919363728?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919364522?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919364522?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919365485?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919365485?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "iframe",
|
||||
"url": "https://player.vimeo.com/video/919366263?nocache=1777730642",
|
||||
"title": "https://player.vimeo.com/video/919366263?nocache=1777730642"
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"url": "https://voley.onlineeducation.center/img/user-default.jpg",
|
||||
"alt": ""
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"url": "https://voley.onlineeducation.center/img/oec-logo-grey.png",
|
||||
"alt": "Online Education Center"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,68 @@
|
||||
[
|
||||
{
|
||||
"seccion": "Planificacion",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 10
|
||||
},
|
||||
{
|
||||
"seccion": "Preparacion_Atletica",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 16
|
||||
},
|
||||
{
|
||||
"seccion": "Explicacion_TP",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 3
|
||||
},
|
||||
{
|
||||
"seccion": "Seguimientos_Equipos",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 0
|
||||
},
|
||||
{
|
||||
"seccion": "Analisis_Equipos_1",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 0
|
||||
},
|
||||
{
|
||||
"seccion": "Analisis_Equipos_2",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 0
|
||||
},
|
||||
{
|
||||
"seccion": "TP_Final_Unidad",
|
||||
"modulo": "Modulo_1_Planificacion",
|
||||
"ok": true,
|
||||
"recursos": 0
|
||||
},
|
||||
{
|
||||
"seccion": "Centrales_y_Oponentes",
|
||||
"modulo": "Modulo_2_Entrenamiento",
|
||||
"ok": true,
|
||||
"recursos": 26
|
||||
},
|
||||
{
|
||||
"seccion": "Puntas_y_Liberos",
|
||||
"modulo": "Modulo_2_Entrenamiento",
|
||||
"ok": true,
|
||||
"recursos": 14
|
||||
},
|
||||
{
|
||||
"seccion": "Entrenamiento_Armadoras",
|
||||
"modulo": "Modulo_2_Entrenamiento",
|
||||
"ok": true,
|
||||
"recursos": 2
|
||||
},
|
||||
{
|
||||
"seccion": "Explicacion_TP",
|
||||
"modulo": "Modulo_2_Entrenamiento",
|
||||
"ok": true,
|
||||
"recursos": 2
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 467 KiB |
|
After Width: | Height: | Size: 601 KiB |
|
After Width: | Height: | Size: 593 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 578 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 289 KiB |
@@ -0,0 +1,5 @@
|
||||
# Analisis Equipos 1
|
||||
|
||||
Oops! An Error Occurred
|
||||
The server returned a "500 Internal Server Error".
|
||||
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html><html><head>
|
||||
<meta charset="UTF-8">
|
||||
<title>An Error Occurred: Internal Server Error</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Oops! An Error Occurred</h1>
|
||||
<h2>The server returned a "500 Internal Server Error".</h2>
|
||||
|
||||
<div>
|
||||
Something is broken. Please let us know what you were doing when this error occurred.
|
||||
We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
</div>
|
||||
|
||||
|
||||
</body></html>
|
||||
@@ -0,0 +1,5 @@
|
||||
# Analisis Equipos 2
|
||||
|
||||
Oops! An Error Occurred
|
||||
The server returned a "500 Internal Server Error".
|
||||
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html><html><head>
|
||||
<meta charset="UTF-8">
|
||||
<title>An Error Occurred: Internal Server Error</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Oops! An Error Occurred</h1>
|
||||
<h2>The server returned a "500 Internal Server Error".</h2>
|
||||
|
||||
<div>
|
||||
Something is broken. Please let us know what you were doing when this error occurred.
|
||||
We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
</div>
|
||||
|
||||
|
||||
</body></html>
|
||||
@@ -0,0 +1,11 @@
|
||||
# Explicacion TP
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/53173/show?me=142686",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "53173"
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1173576229?nocache=1777731170",
|
||||
"id": "1173576229",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
# Videos - Explicacion TP
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 1173576229
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1173576229?nocache=1777731170
|
||||
- **ID**: 1173576229
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1173576229"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Planificacion
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,62 @@
|
||||
[
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50320/show?me=140219",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "50320"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/52903/show?me=142139",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "52903"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46541/show?me=140221",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "46541"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46723/show?me=140222",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46723"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/46724/show?me=140223",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46724"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50142/show?me=140224",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50142"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50145/show?me=140225",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50145"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/50144/show?me=140226",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50144"
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1170245111?nocache=1777731162",
|
||||
"id": "1170245111",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
# Videos - Planificacion
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 1170245111
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1170245111?nocache=1777731162
|
||||
- **ID**: 1170245111
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1170245111"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Preparacion Atletica
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,100 @@
|
||||
[
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53012/show?me=142522",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "53012"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53137/show?me=142648",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "53137"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53138/show?me=142649",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "53138"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/53139/show?me=142650",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "53139"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46719/show?me=140229",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46719"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50329/show?me=140232",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "50329"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46726/show?me=140233",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46726"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50139/show?me=140234",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50139"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/46725/show?me=140235",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46725"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50140/show?me=140236",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50140"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50143/show?me=140237",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50143"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/50141/show?me=140238",
|
||||
"texto": "Abrir Enlace",
|
||||
"id": "50141"
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1173231315?nocache=1777731166",
|
||||
"id": "1173231315",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1063655414?nocache=1777731166",
|
||||
"id": "1063655414",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1063657248?nocache=1777731166",
|
||||
"id": "1063657248",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
# Videos - Preparacion Atletica
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 1173231315
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1173231315?nocache=1777731166
|
||||
- **ID**: 1173231315
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1173231315"
|
||||
|
||||
## Video Vimeo ID: 1063655414
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1063655414?nocache=1777731166
|
||||
- **ID**: 1063655414
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1063655414"
|
||||
|
||||
## Video Vimeo ID: 1063657248
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1063657248?nocache=1777731166
|
||||
- **ID**: 1063657248
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1063657248"
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
# Seguimientos Equipos
|
||||
|
||||
Oops! An Error Occurred
|
||||
The server returned a "500 Internal Server Error".
|
||||
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html><html><head>
|
||||
<meta charset="UTF-8">
|
||||
<title>An Error Occurred: Internal Server Error</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Oops! An Error Occurred</h1>
|
||||
<h2>The server returned a "500 Internal Server Error".</h2>
|
||||
|
||||
<div>
|
||||
Something is broken. Please let us know what you were doing when this error occurred.
|
||||
We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
</div>
|
||||
|
||||
|
||||
</body></html>
|
||||
@@ -0,0 +1,5 @@
|
||||
# TP Final Unidad
|
||||
|
||||
Oops! An Error Occurred
|
||||
The server returned a "500 Internal Server Error".
|
||||
Something is broken. Please let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
@@ -0,0 +1,15 @@
|
||||
<!DOCTYPE html><html><head>
|
||||
<meta charset="UTF-8">
|
||||
<title>An Error Occurred: Internal Server Error</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Oops! An Error Occurred</h1>
|
||||
<h2>The server returned a "500 Internal Server Error".</h2>
|
||||
|
||||
<div>
|
||||
Something is broken. Please let us know what you were doing when this error occurred.
|
||||
We will fix it as soon as possible. Sorry for any inconvenience caused.
|
||||
</div>
|
||||
|
||||
|
||||
</body></html>
|
||||
@@ -0,0 +1,11 @@
|
||||
# Centrales y Oponentes
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,180 @@
|
||||
[
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46874/show?me=142960",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46874"
|
||||
},
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/46805/show?me=142961",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46805"
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919369433?nocache=1777731186",
|
||||
"id": "919369433",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1179197191?nocache=1777731186",
|
||||
"id": "1179197191",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919341704?nocache=1777731186",
|
||||
"id": "919341704",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919342668?nocache=1777731186",
|
||||
"id": "919342668",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919346562?nocache=1777731186",
|
||||
"id": "919346562",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919347866?nocache=1777731186",
|
||||
"id": "919347866",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919348493?nocache=1777731186",
|
||||
"id": "919348493",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919351892?nocache=1777731186",
|
||||
"id": "919351892",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919352848?nocache=1777731186",
|
||||
"id": "919352848",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919353448?nocache=1777731186",
|
||||
"id": "919353448",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919354134?nocache=1777731186",
|
||||
"id": "919354134",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919355668?nocache=1777731186",
|
||||
"id": "919355668",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919356423?nocache=1777731186",
|
||||
"id": "919356423",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919357109?nocache=1777731186",
|
||||
"id": "919357109",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919358607?nocache=1777731186",
|
||||
"id": "919358607",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919359386?nocache=1777731186",
|
||||
"id": "919359386",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919359855?nocache=1777731186",
|
||||
"id": "919359855",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919360318?nocache=1777731186",
|
||||
"id": "919360318",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919363158?nocache=1777731186",
|
||||
"id": "919363158",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919363728?nocache=1777731186",
|
||||
"id": "919363728",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919364522?nocache=1777731186",
|
||||
"id": "919364522",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919365485?nocache=1777731186",
|
||||
"id": "919365485",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/919366263?nocache=1777731186",
|
||||
"id": "919366263",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,188 @@
|
||||
# Videos - Centrales y Oponentes
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 919369433
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919369433?nocache=1777731186
|
||||
- **ID**: 919369433
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919369433"
|
||||
|
||||
## Video Vimeo ID: 1179197191
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1179197191?nocache=1777731186
|
||||
- **ID**: 1179197191
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1179197191"
|
||||
|
||||
## Video Vimeo ID: 919341704
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919341704?nocache=1777731186
|
||||
- **ID**: 919341704
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919341704"
|
||||
|
||||
## Video Vimeo ID: 919342668
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919342668?nocache=1777731186
|
||||
- **ID**: 919342668
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919342668"
|
||||
|
||||
## Video Vimeo ID: 919346562
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919346562?nocache=1777731186
|
||||
- **ID**: 919346562
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919346562"
|
||||
|
||||
## Video Vimeo ID: 919347866
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919347866?nocache=1777731186
|
||||
- **ID**: 919347866
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919347866"
|
||||
|
||||
## Video Vimeo ID: 919348493
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919348493?nocache=1777731186
|
||||
- **ID**: 919348493
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919348493"
|
||||
|
||||
## Video Vimeo ID: 919351892
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919351892?nocache=1777731186
|
||||
- **ID**: 919351892
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919351892"
|
||||
|
||||
## Video Vimeo ID: 919352848
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919352848?nocache=1777731186
|
||||
- **ID**: 919352848
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919352848"
|
||||
|
||||
## Video Vimeo ID: 919353448
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919353448?nocache=1777731186
|
||||
- **ID**: 919353448
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919353448"
|
||||
|
||||
## Video Vimeo ID: 919354134
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919354134?nocache=1777731186
|
||||
- **ID**: 919354134
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919354134"
|
||||
|
||||
## Video Vimeo ID: 919355668
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919355668?nocache=1777731186
|
||||
- **ID**: 919355668
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919355668"
|
||||
|
||||
## Video Vimeo ID: 919356423
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919356423?nocache=1777731186
|
||||
- **ID**: 919356423
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919356423"
|
||||
|
||||
## Video Vimeo ID: 919357109
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919357109?nocache=1777731186
|
||||
- **ID**: 919357109
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919357109"
|
||||
|
||||
## Video Vimeo ID: 919358607
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919358607?nocache=1777731186
|
||||
- **ID**: 919358607
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919358607"
|
||||
|
||||
## Video Vimeo ID: 919359386
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919359386?nocache=1777731186
|
||||
- **ID**: 919359386
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919359386"
|
||||
|
||||
## Video Vimeo ID: 919359855
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919359855?nocache=1777731186
|
||||
- **ID**: 919359855
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919359855"
|
||||
|
||||
## Video Vimeo ID: 919360318
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919360318?nocache=1777731186
|
||||
- **ID**: 919360318
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919360318"
|
||||
|
||||
## Video Vimeo ID: 919363158
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919363158?nocache=1777731186
|
||||
- **ID**: 919363158
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919363158"
|
||||
|
||||
## Video Vimeo ID: 919363728
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919363728?nocache=1777731186
|
||||
- **ID**: 919363728
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919363728"
|
||||
|
||||
## Video Vimeo ID: 919364522
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919364522?nocache=1777731186
|
||||
- **ID**: 919364522
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919364522"
|
||||
|
||||
## Video Vimeo ID: 919365485
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919365485?nocache=1777731186
|
||||
- **ID**: 919365485
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919365485"
|
||||
|
||||
## Video Vimeo ID: 919366263
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/919366263?nocache=1777731186
|
||||
- **ID**: 919366263
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/919366263"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Entrenamiento Armadoras
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1181188693?nocache=1777731197",
|
||||
"id": "1181188693",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
# Videos - Entrenamiento Armadoras
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 1181188693
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1181188693?nocache=1777731197
|
||||
- **ID**: 1181188693
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1181188693"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Explicacion TP
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1181892359?nocache=1777731201",
|
||||
"id": "1181892359",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,12 @@
|
||||
# Videos - Explicacion TP
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 1181892359
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1181892359?nocache=1777731201
|
||||
- **ID**: 1181892359
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1181892359"
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# Puntas y Liberos
|
||||
|
||||
> Extraído el 2026-05-02
|
||||
|
||||
PLANIFICACION
|
||||
PREPARACION ATLETICA
|
||||
EXPLICACION DEL TRABAJO PRACTICO A PRESENTAR
|
||||
SEGUIMIENTOS DE EQUIPOS
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL
|
||||
ANALISIS DE EQUIPOS DE VOLEIBOL 2
|
||||
TRABAJO PRACTICO FINAL DE LA UNIDAD
|
||||
@@ -0,0 +1,97 @@
|
||||
[
|
||||
{
|
||||
"tipo": "archivo-curso",
|
||||
"url": "https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/46926/show?me=143177",
|
||||
"texto": "Abrir Archivo",
|
||||
"id": "46926"
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/1179888270?nocache=1777731192",
|
||||
"id": "1179888270",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921876274?nocache=1777731192",
|
||||
"id": "921876274",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921873304?nocache=1777731192",
|
||||
"id": "921873304",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921873724?nocache=1777731192",
|
||||
"id": "921873724",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921873953?nocache=1777731192",
|
||||
"id": "921873953",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921874753?nocache=1777731192",
|
||||
"id": "921874753",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921875020?nocache=1777731192",
|
||||
"id": "921875020",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921875302?nocache=1777731192",
|
||||
"id": "921875302",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921875519?nocache=1777731192",
|
||||
"id": "921875519",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921875778?nocache=1777731192",
|
||||
"id": "921875778",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921879520?nocache=1777731192",
|
||||
"id": "921879520",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "video-embed",
|
||||
"plataforma": "Vimeo",
|
||||
"url": "https://player.vimeo.com/video/921879925?nocache=1777731192",
|
||||
"id": "921879925",
|
||||
"titulo": ""
|
||||
},
|
||||
{
|
||||
"tipo": "imagen",
|
||||
"url": "https://voley.onlineeducation.center/uploads/institucion/d15ddc66bd4cd881200ee3c3abacd7396367ddaa.png",
|
||||
"alt": "Voley"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,100 @@
|
||||
# Videos - Puntas y Liberos
|
||||
|
||||
> Sección: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list
|
||||
|
||||
## Video Vimeo ID: 1179888270
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/1179888270?nocache=1777731192
|
||||
- **ID**: 1179888270
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/1179888270"
|
||||
|
||||
## Video Vimeo ID: 921876274
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921876274?nocache=1777731192
|
||||
- **ID**: 921876274
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921876274"
|
||||
|
||||
## Video Vimeo ID: 921873304
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921873304?nocache=1777731192
|
||||
- **ID**: 921873304
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921873304"
|
||||
|
||||
## Video Vimeo ID: 921873724
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921873724?nocache=1777731192
|
||||
- **ID**: 921873724
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921873724"
|
||||
|
||||
## Video Vimeo ID: 921873953
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921873953?nocache=1777731192
|
||||
- **ID**: 921873953
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921873953"
|
||||
|
||||
## Video Vimeo ID: 921874753
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921874753?nocache=1777731192
|
||||
- **ID**: 921874753
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921874753"
|
||||
|
||||
## Video Vimeo ID: 921875020
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921875020?nocache=1777731192
|
||||
- **ID**: 921875020
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921875020"
|
||||
|
||||
## Video Vimeo ID: 921875302
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921875302?nocache=1777731192
|
||||
- **ID**: 921875302
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921875302"
|
||||
|
||||
## Video Vimeo ID: 921875519
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921875519?nocache=1777731192
|
||||
- **ID**: 921875519
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921875519"
|
||||
|
||||
## Video Vimeo ID: 921875778
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921875778?nocache=1777731192
|
||||
- **ID**: 921875778
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921875778"
|
||||
|
||||
## Video Vimeo ID: 921879520
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921879520?nocache=1777731192
|
||||
- **ID**: 921879520
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921879520"
|
||||
|
||||
## Video Vimeo ID: 921879925
|
||||
|
||||
- **Plataforma**: Vimeo
|
||||
- **URL**: https://player.vimeo.com/video/921879925?nocache=1777731192
|
||||
- **ID**: 921879925
|
||||
|
||||
Para descargar: yt-dlp "https://player.vimeo.com/video/921879925"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/919366263?nocache=1777730695
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1170245111?nocache=1777730716
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34868/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1063657248?nocache=1777730720
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34869/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/919366263?nocache=1777730650
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1173576229?nocache=1777730724
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/34870/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1175436659?nocache=1777730727
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35523/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/876705933?nocache=1777730732
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35524/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1176900332?nocache=1777730740
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19096/s/35526/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/919366263?nocache=1777730743
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/921879925?nocache=1777730751
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35520/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1181188693?nocache=1777730755
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35521/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/1181892359?nocache=1777730759
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35522/study-resources/list
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/919366263?nocache=1777730666
|
||||
Página origen: https://voley.onlineeducation.center/en/campus/student/training/e/14197/m/19097/s/35519/study-resources/list?hl=en&locale_switcher=1
|
||||
@@ -0,0 +1,3 @@
|
||||
Título:
|
||||
URL: https://player.vimeo.com/video/919366263?nocache=1777730682
|
||||
Página origen: https://voley.onlineeducation.center/es/campus/student/training/e/14197/study-resources
|
||||
@@ -0,0 +1,673 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script para descargar el contenido del curso de Voley desde
|
||||
* Online Education Center usando Playwright.
|
||||
*
|
||||
* Versión mejorada: navega directamente a cada sección del curso,
|
||||
* extrae contenido textual, PDFs, y referencias a videos.
|
||||
*
|
||||
* Modo de uso:
|
||||
* node download_course.mjs
|
||||
*
|
||||
* Requisitos:
|
||||
* - npm install playwright
|
||||
* - npx playwright install chromium
|
||||
*
|
||||
* Para reanudar una descarga interrumpida:
|
||||
* Simplemente se vuelve a ejecutar, saltea archivos ya existentes.
|
||||
*/
|
||||
|
||||
import { chromium } from "playwright";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const DOWNLOADS_DIR = path.join(__dirname, "descargas");
|
||||
const CREDENTIALS = {
|
||||
username: "saldis_karina@hotmail.com",
|
||||
password: "Martes13#",
|
||||
};
|
||||
|
||||
// Lista de todas las secciones del curso (Módulo 1 y Módulo 2)
|
||||
const SECCIONES = [
|
||||
// Módulo 1 (m/19096)
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "Planificacion",
|
||||
id: "s/34868",
|
||||
seccion: 34868,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "Preparacion_Atletica",
|
||||
id: "s/34869",
|
||||
seccion: 34869,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "Explicacion_TP",
|
||||
id: "s/34870",
|
||||
seccion: 34870,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "Seguimientos_Equipos",
|
||||
id: "s/35523",
|
||||
seccion: 35523,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "Analisis_Equipos_1",
|
||||
id: "s/35524",
|
||||
seccion: 35524,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "Analisis_Equipos_2",
|
||||
id: "s/35525",
|
||||
seccion: 35525,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_1_Planificacion",
|
||||
nombre: "TP_Final_Unidad",
|
||||
id: "s/35526",
|
||||
seccion: 35526,
|
||||
},
|
||||
// Módulo 2 (m/19097)
|
||||
{
|
||||
modulo: "Modulo_2_Entrenamiento",
|
||||
nombre: "Centrales_y_Oponentes",
|
||||
id: "s/35519",
|
||||
seccion: 35519,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_2_Entrenamiento",
|
||||
nombre: "Puntas_y_Liberos",
|
||||
id: "s/35520",
|
||||
seccion: 35520,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_2_Entrenamiento",
|
||||
nombre: "Entrenamiento_Armadoras",
|
||||
id: "s/35521",
|
||||
seccion: 35521,
|
||||
},
|
||||
{
|
||||
modulo: "Modulo_2_Entrenamiento",
|
||||
nombre: "Explicacion_TP",
|
||||
id: "s/35522",
|
||||
seccion: 35522,
|
||||
},
|
||||
];
|
||||
|
||||
// IDs de los módulos (necesarios para construir las URLs)
|
||||
const MODULO_1 = "m/19096";
|
||||
const MODULO_2 = "m/19097";
|
||||
|
||||
const CAMPUS_BASE =
|
||||
"https://voley.onlineeducation.center/es/campus/student/training/e/14197";
|
||||
|
||||
// ============================================================
|
||||
// UTILIDADES
|
||||
// ============================================================
|
||||
|
||||
function ensureDir(dir) {
|
||||
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
||||
}
|
||||
|
||||
function log(msg) {
|
||||
const ts = new Date().toISOString().replace("T", " ").substring(0, 19);
|
||||
console.log(`[${ts}] ${msg}`);
|
||||
}
|
||||
|
||||
function sleep(ms) {
|
||||
return new Promise((r) => setTimeout(r, ms));
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// DESCARGA DE ARCHIVOS
|
||||
// ============================================================
|
||||
|
||||
/**
|
||||
* Descarga un archivo desde una URL usando el evento download de Playwright.
|
||||
* La URL corresponde a un enlace <a href=".../study-resources/{id}/show?me={me_id}">Abrir Archivo</a>
|
||||
* que inicia una descarga nativa del navegador.
|
||||
*
|
||||
* En lugar de navegar con page.goto() (que carga la respuesta como página),
|
||||
* buscamos el enlace por su href y hacemos click para disparar el evento download.
|
||||
*/
|
||||
async function downloadFile(page, url, filepath) {
|
||||
if (fs.existsSync(filepath)) {
|
||||
log(` ↺ Ya existe: ${path.basename(filepath)}`);
|
||||
return filepath;
|
||||
}
|
||||
|
||||
try {
|
||||
// Buscar el enlace en la página por su URL exacta
|
||||
const link = page.locator(`a[href="${url}"]`);
|
||||
const linkCount = await link.count();
|
||||
|
||||
if (linkCount === 0) {
|
||||
throw new Error(`No se encontró el enlace: ${url}`);
|
||||
}
|
||||
|
||||
// Configurar la espera del evento download antes de hacer click
|
||||
const [download] = await Promise.all([
|
||||
page.waitForEvent("download", { timeout: 30000 }),
|
||||
link.first().click(),
|
||||
]);
|
||||
|
||||
// Guardar el archivo descargado
|
||||
await download.saveAs(filepath);
|
||||
const suggestedName = download.suggestedFilename();
|
||||
const sizeKB = (fs.statSync(filepath).size / 1024).toFixed(1);
|
||||
log(
|
||||
` ✓ Descargado: ${path.basename(filepath)} (${sizeKB} KB) — original: ${suggestedName || "desconocido"}`,
|
||||
);
|
||||
return filepath;
|
||||
} catch (err) {
|
||||
log(` ✗ Error descarga: ${err.message}`);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Toma screenshot de la página actual.
|
||||
*/
|
||||
async function screenshot(page, name) {
|
||||
const dir = path.join(DOWNLOADS_DIR, "screenshots");
|
||||
ensureDir(dir);
|
||||
const filepath = path.join(dir, name);
|
||||
await page.screenshot({ path: filepath, fullPage: true });
|
||||
return filepath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extrae el contenido textual de la página como Markdown simple.
|
||||
*/
|
||||
async function extractTextAsMarkdown(page, titulo) {
|
||||
const text = await page.evaluate(() => {
|
||||
// Intentar extraer el contenido principal
|
||||
const main = document.querySelector(
|
||||
"main, .main-content, .content, #content, .panel-body, .tab-content",
|
||||
);
|
||||
if (!main) return "";
|
||||
|
||||
// Clonar para no modificar el DOM real
|
||||
const clone = main.cloneNode(true);
|
||||
|
||||
// Remover elementos no deseados
|
||||
clone
|
||||
.querySelectorAll(
|
||||
"script, style, nav, footer, header, .btn, .dropdown-menu",
|
||||
)
|
||||
.forEach((el) => el.remove());
|
||||
|
||||
// Obtener el texto
|
||||
return clone.innerText.trim();
|
||||
});
|
||||
|
||||
if (!text) return "";
|
||||
|
||||
const lines = text.split("\n").filter((l) => l.trim());
|
||||
const md = [
|
||||
`# ${titulo}`,
|
||||
"",
|
||||
`> Extraído el ${new Date().toISOString().split("T")[0]}`,
|
||||
"",
|
||||
...lines.map((l) => l.trim()),
|
||||
"",
|
||||
].join("\n");
|
||||
return md;
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// PROCESAR UNA SECCIÓN DEL CURSO
|
||||
// ============================================================
|
||||
|
||||
async function procesarSeccion(page, seccion) {
|
||||
// Determinar qué módulo le corresponde
|
||||
const moduloPath = seccion.seccion >= 35519 ? MODULO_2 : MODULO_1;
|
||||
|
||||
// URL de la página de recursos de esta sección
|
||||
const seccionUrl = `${CAMPUS_BASE}/${moduloPath}/${seccion.id}/study-resources/list`;
|
||||
|
||||
const subdir = path.join("secciones", seccion.modulo, seccion.nombre);
|
||||
const dirLocal = path.join(DOWNLOADS_DIR, subdir);
|
||||
ensureDir(dirLocal);
|
||||
|
||||
log(` ── ${seccion.modulo}/${seccion.nombre}`);
|
||||
|
||||
try {
|
||||
await page.goto(seccionUrl, { waitUntil: "networkidle", timeout: 30000 });
|
||||
await sleep(2000);
|
||||
|
||||
// ---- 1. Guardar HTML completo ----
|
||||
const htmlContent = await page.content();
|
||||
fs.writeFileSync(path.join(dirLocal, "pagina.html"), htmlContent);
|
||||
|
||||
// ---- 2. Extraer texto como Markdown ----
|
||||
const md = await extractTextAsMarkdown(
|
||||
page,
|
||||
seccion.nombre.replace(/_/g, " "),
|
||||
);
|
||||
if (md) {
|
||||
fs.writeFileSync(path.join(dirLocal, "contenido.md"), md);
|
||||
} else {
|
||||
// Si no se encontró contenido principal, guardar todo el texto visible
|
||||
const fullText = await page.evaluate(() =>
|
||||
document.body.innerText.trim(),
|
||||
);
|
||||
if (fullText) {
|
||||
fs.writeFileSync(
|
||||
path.join(dirLocal, "contenido.md"),
|
||||
`# ${seccion.nombre.replace(/_/g, " ")}\n\n${fullText}\n`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// ---- 3. Buscar recursos en la página ----
|
||||
const recursos = await page.evaluate((seccionUrlLocal) => {
|
||||
const items = [];
|
||||
|
||||
// Buscar enlaces a recursos/archivos del curso
|
||||
document.querySelectorAll("a[href]").forEach((el) => {
|
||||
const href = el.href;
|
||||
// Enlaces a archivos del curso (study-resources/{id}/show)
|
||||
if (href.includes("/study-resources/") && href.includes("/show")) {
|
||||
items.push({
|
||||
tipo: "archivo-curso",
|
||||
url: href,
|
||||
texto: el.textContent.trim(),
|
||||
id: href.match(/study-resources\/(\d+)\/show/)?.[1] || "",
|
||||
});
|
||||
}
|
||||
// PDFs directos
|
||||
else if (
|
||||
href.match(/\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar)(\?|$)/i)
|
||||
) {
|
||||
items.push({
|
||||
tipo: "documento",
|
||||
url: href,
|
||||
texto: el.textContent.trim(),
|
||||
});
|
||||
}
|
||||
// Enlaces de descarga
|
||||
else if (
|
||||
href.includes("/download/") ||
|
||||
href.includes("download=") ||
|
||||
el.hasAttribute("download")
|
||||
) {
|
||||
items.push({
|
||||
tipo: "descarga",
|
||||
url: href,
|
||||
texto: el.textContent.trim(),
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Buscar iframes (videos Vimeo/YouTube embebidos)
|
||||
document.querySelectorAll("iframe[src]").forEach((el) => {
|
||||
const src = el.src;
|
||||
if (
|
||||
src.includes("vimeo.com") ||
|
||||
src.includes("youtube.com") ||
|
||||
src.includes("youtu.be")
|
||||
) {
|
||||
const vimeoMatch = src.match(/vimeo\.com\/video\/(\d+)/);
|
||||
const youtubeMatch = src.match(
|
||||
/(?:youtube\.com\/embed\/|youtu\.be\/)([a-zA-Z0-9_-]+)/,
|
||||
);
|
||||
items.push({
|
||||
tipo: "video-embed",
|
||||
plataforma: src.includes("vimeo") ? "Vimeo" : "YouTube",
|
||||
url: src,
|
||||
id: vimeoMatch?.[1] || youtubeMatch?.[1] || "",
|
||||
titulo: el.title || "",
|
||||
});
|
||||
}
|
||||
// Otros iframes (posiblemente contenido útil)
|
||||
else {
|
||||
items.push({
|
||||
tipo: "iframe",
|
||||
url: src,
|
||||
titulo: el.title || "",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Buscar videos directos
|
||||
document
|
||||
.querySelectorAll("video[src], video source[src]")
|
||||
.forEach((el) => {
|
||||
items.push({
|
||||
tipo: "video-directo",
|
||||
url: el.src || el.getAttribute("src") || "",
|
||||
});
|
||||
});
|
||||
|
||||
// Buscar imágenes relevantes (saltar iconos pequeños)
|
||||
document.querySelectorAll("img[src]").forEach((el) => {
|
||||
const src = el.src;
|
||||
if (
|
||||
src &&
|
||||
!src.includes("data:") &&
|
||||
!src.includes("user-default") &&
|
||||
!src.includes("logo")
|
||||
) {
|
||||
items.push({
|
||||
tipo: "imagen",
|
||||
url: src,
|
||||
alt: el.alt || "",
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Buscar contenido en etiquetas <embed> o <object>
|
||||
document.querySelectorAll("embed[src], object[data]").forEach((el) => {
|
||||
const src = el.src || el.getAttribute("data") || "";
|
||||
if (src) {
|
||||
items.push({
|
||||
tipo: "embed",
|
||||
url: src,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return items;
|
||||
});
|
||||
|
||||
// ---- 4. Guardar JSON de recursos encontrados ----
|
||||
if (recursos.length > 0) {
|
||||
fs.writeFileSync(
|
||||
path.join(dirLocal, "recursos.json"),
|
||||
JSON.stringify(recursos, null, 2),
|
||||
);
|
||||
}
|
||||
|
||||
log(
|
||||
` Recursos: ${recursos.length} (${recursos.filter((r) => r.tipo === "archivo-curso").length} archivos, ${recursos.filter((r) => r.tipo === "video-embed").length} videos)`,
|
||||
);
|
||||
|
||||
// ---- 5. Descargar archivos del curso (PDFs, docs, etc.) ----
|
||||
// Distinguir entre "Abrir Archivo" (descarga real de archivo) y
|
||||
// "Abrir Enlace" (página HTML que ya capturamos como pagina.html).
|
||||
const archivosCurso = recursos.filter((r) => r.tipo === "archivo-curso");
|
||||
for (let i = 0; i < archivosCurso.length; i++) {
|
||||
const archivo = archivosCurso[i];
|
||||
const texto = archivo.texto.toLowerCase();
|
||||
|
||||
// Saltar "Abrir Enlace": ya se capturó como HTML en pagina.html
|
||||
if (texto.includes("abrir enlace")) {
|
||||
log(
|
||||
` ↺ Saltando "${archivo.texto}" (${archivo.id}): ya capturado como HTML`,
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Solo procesar "Abrir Archivo" (descarga real)
|
||||
if (!texto.includes("abrir archivo")) {
|
||||
log(
|
||||
` ↺ Saltando "${archivo.texto}" (${archivo.id}): tipo de recurso no manejado`,
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
const ext = ".bin"; // placeholder, lo detectaremos del contenido
|
||||
const filename = `archivo_${archivo.id}_${archivo.texto.replace(/[^a-zA-Z0-9_-]/g, "_").substring(0, 30) || "documento"}${ext}`;
|
||||
const filepath = path.join(dirLocal, filename);
|
||||
|
||||
log(
|
||||
` Descargando archivo ${i + 1}/${archivosCurso.length}: "${archivo.texto}" (${archivo.id})...`,
|
||||
);
|
||||
const result = await downloadFile(page, archivo.url, filepath);
|
||||
|
||||
// Clasificar el archivo por su contenido (magic bytes) y renombrar
|
||||
if (result) {
|
||||
const stat = fs.statSync(result);
|
||||
if (stat.size > 0) {
|
||||
const buffer = fs.readFileSync(result);
|
||||
let newPath = null;
|
||||
|
||||
if (
|
||||
buffer[0] === 0x25 &&
|
||||
buffer[1] === 0x50 &&
|
||||
buffer[2] === 0x44 &&
|
||||
buffer[3] === 0x46
|
||||
) {
|
||||
// Es PDF
|
||||
newPath = result.replace(/\.bin$/, ".pdf");
|
||||
fs.renameSync(result, newPath);
|
||||
log(` ✓ Identificado como PDF: ${path.basename(newPath)}`);
|
||||
} else if (buffer[0] === 0x50 && buffer[1] === 0x4b) {
|
||||
// Es ZIP (posiblemente .docx, .xlsx, .pptx)
|
||||
newPath = result.replace(/\.bin$/, ".zip");
|
||||
fs.renameSync(result, newPath);
|
||||
log(
|
||||
` ⚠ Identificado como ZIP (Office doc?): ${path.basename(newPath)}`,
|
||||
);
|
||||
} else if (
|
||||
buffer[0] === 0x3c || // '<' posible HTML
|
||||
(buffer[0] === 0xef && buffer[1] === 0xbb && buffer[2] === 0xbf) || // BOM UTF-8
|
||||
buffer.toString("utf8", 0, 100).includes("<!DOCTYPE") ||
|
||||
buffer.toString("utf8", 0, 100).includes("<html")
|
||||
) {
|
||||
// Es HTML (enlace que se abrió como página en lugar de descarga)
|
||||
newPath = result.replace(/\.bin$/, ".html");
|
||||
fs.renameSync(result, newPath);
|
||||
log(
|
||||
` ⚠ Era HTML (posible "Abrir Enlace"): ${path.basename(newPath)}`,
|
||||
);
|
||||
} else {
|
||||
// Formato desconocido, mantener .bin
|
||||
log(` ⚠ Formato desconocido: ${path.basename(result)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---- 6. Guardar referencias a videos ----
|
||||
const videos = recursos.filter((r) => r.tipo === "video-embed");
|
||||
if (videos.length > 0) {
|
||||
let videoMd = `# Videos - ${seccion.nombre.replace(/_/g, " ")}\n\n`;
|
||||
videoMd += `> Sección: ${seccionUrl}\n\n`;
|
||||
for (const v of videos) {
|
||||
videoMd += `## ${v.titulo || `Video ${v.plataforma} ID: ${v.id}`}\n\n`;
|
||||
videoMd += `- **Plataforma**: ${v.plataforma}\n`;
|
||||
videoMd += `- **URL**: ${v.url}\n`;
|
||||
videoMd += `- **ID**: ${v.id}\n\n`;
|
||||
if (v.plataforma === "Vimeo") {
|
||||
videoMd += `Para descargar: yt-dlp "https://player.vimeo.com/video/${v.id}"\n\n`;
|
||||
}
|
||||
}
|
||||
fs.writeFileSync(path.join(dirLocal, "videos.md"), videoMd);
|
||||
}
|
||||
|
||||
// ---- 7. Tomar screenshot de referencia ----
|
||||
await screenshot(page, `${seccion.modulo}_${seccion.nombre}.png`);
|
||||
|
||||
log(` ✓ Completado: ${seccion.nombre}`);
|
||||
|
||||
return { ok: true, recursos: recursos.length };
|
||||
} catch (err) {
|
||||
log(` ✗ Error en sección ${seccion.nombre}: ${err.message}`);
|
||||
try {
|
||||
await screenshot(page, `ERROR_${seccion.modulo}_${seccion.nombre}.png`);
|
||||
} catch (_) {}
|
||||
return { ok: false, error: err.message };
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// FUNCIÓN PRINCIPAL
|
||||
// ============================================================
|
||||
|
||||
async function main() {
|
||||
log("═══════════════════════════════════════════════════════");
|
||||
log(" DESCARGA DEL CURSO DE VOLEY - Online Education Center");
|
||||
log("═══════════════════════════════════════════════════════");
|
||||
log("");
|
||||
|
||||
// 1. Login
|
||||
log("Paso 1: Login en la plataforma...");
|
||||
const browser = await chromium.launch({
|
||||
headless: true,
|
||||
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
||||
});
|
||||
|
||||
const context = await browser.newContext({
|
||||
viewport: { width: 1280, height: 900 },
|
||||
locale: "es-AR",
|
||||
});
|
||||
|
||||
const page = await context.newPage();
|
||||
|
||||
const sessionFile = path.join(__dirname, "session.json");
|
||||
let loggedIn = false;
|
||||
let activeContext = context;
|
||||
let activePage = page;
|
||||
|
||||
try {
|
||||
if (fs.existsSync(sessionFile)) {
|
||||
log(" Cargando sesión guardada...");
|
||||
try {
|
||||
const sessionContext = await browser.newContext({
|
||||
storageState: sessionFile,
|
||||
});
|
||||
const sessionPage = await sessionContext.newPage();
|
||||
await sessionPage.goto(CAMPUS_BASE, {
|
||||
waitUntil: "networkidle",
|
||||
timeout: 20000,
|
||||
});
|
||||
const url = sessionPage.url();
|
||||
if (url.includes("/campus/")) {
|
||||
loggedIn = true;
|
||||
log(" ✓ Sesión recuperada exitosamente");
|
||||
// Cerrar page/context original, usar los nuevos
|
||||
await activePage.close();
|
||||
await activeContext.close();
|
||||
activePage = sessionPage;
|
||||
activeContext = sessionContext;
|
||||
} else {
|
||||
await sessionPage.close();
|
||||
await sessionContext.close();
|
||||
}
|
||||
} catch (err) {
|
||||
log(` ⚠ No se pudo reusar sesión: ${err.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
if (!loggedIn) {
|
||||
log(" Abriendo página de login...");
|
||||
await page.goto(
|
||||
"https://voley.onlineeducation.center/es/campus/student/training/e/14197/m/19097/s/35519/study-resources/list",
|
||||
{ waitUntil: "networkidle", timeout: 30000 },
|
||||
);
|
||||
|
||||
await page.waitForSelector("#login-email", { timeout: 15000 });
|
||||
await page.fill("#login-email", CREDENTIALS.username);
|
||||
await page.fill("#login-password", CREDENTIALS.password);
|
||||
await page.click("#btn-login");
|
||||
|
||||
await page.waitForURL("**/campus/**", { timeout: 30000 });
|
||||
log(" ✓ Login exitoso");
|
||||
|
||||
// Guardar sesión para futuras ejecuciones
|
||||
await activeContext.storageState({ path: sessionFile });
|
||||
log(" ✓ Sesión guardada en session.json");
|
||||
}
|
||||
|
||||
// 2. Navegar cada sección del curso
|
||||
log("");
|
||||
log("Paso 2: Descargando contenido de cada sección...");
|
||||
log(`Total de secciones: ${SECCIONES.length}`);
|
||||
log("");
|
||||
|
||||
const resultados = [];
|
||||
for (let i = 0; i < SECCIONES.length; i++) {
|
||||
log(`[${i + 1}/${SECCIONES.length}] Procesando sección...`);
|
||||
const resultado = await procesarSeccion(activePage, SECCIONES[i]);
|
||||
resultados.push({
|
||||
seccion: SECCIONES[i].nombre,
|
||||
modulo: SECCIONES[i].modulo,
|
||||
...resultado,
|
||||
});
|
||||
log("");
|
||||
}
|
||||
|
||||
// 3. Resumen final
|
||||
log("═══════════════════════════════════════════════════════");
|
||||
log(" RESUMEN DE DESCARGA");
|
||||
log("═══════════════════════════════════════════════════════");
|
||||
log("");
|
||||
log(
|
||||
` Secciones procesadas: ${resultados.filter((r) => r.ok).length}/${resultados.length}`,
|
||||
);
|
||||
log(` Secciones con error: ${resultados.filter((r) => !r.ok).length}`);
|
||||
log("");
|
||||
|
||||
for (const r of resultados) {
|
||||
const icono = r.ok ? "✓" : "✗";
|
||||
const detalles = r.ok ? ` (${r.recursos} recursos)` : ` (${r.error})`;
|
||||
log(` ${icono} ${r.modulo}/${r.seccion}${detalles}`);
|
||||
}
|
||||
|
||||
log("");
|
||||
log(" Directorio de descarga:");
|
||||
log(` ${DOWNLOADS_DIR}`);
|
||||
log("");
|
||||
log(" Estructura creada:");
|
||||
log(" secciones/");
|
||||
log(" Modulo_1_Planificacion/");
|
||||
for (const sec of SECCIONES.filter(
|
||||
(s) => s.modulo === "Modulo_1_Planificacion",
|
||||
)) {
|
||||
log(
|
||||
` ${sec.nombre}/ → pagina.html, contenido.md, recursos.json, videos.md, screenshots`,
|
||||
);
|
||||
}
|
||||
log(" Modulo_2_Entrenamiento/");
|
||||
for (const sec of SECCIONES.filter(
|
||||
(s) => s.modulo === "Modulo_2_Entrenamiento",
|
||||
)) {
|
||||
log(
|
||||
` ${sec.nombre}/ → pagina.html, contenido.md, recursos.json, videos.md, screenshots`,
|
||||
);
|
||||
}
|
||||
log("");
|
||||
log(" Para descargar videos de Vimeo:");
|
||||
log(
|
||||
' yt-dlp --cookies session.json "https://player.vimeo.com/video/{ID}"',
|
||||
);
|
||||
log("");
|
||||
|
||||
// Guardar resultados
|
||||
const reportePath = path.join(DOWNLOADS_DIR, "resultado_descarga.json");
|
||||
fs.writeFileSync(reportePath, JSON.stringify(resultados, null, 2));
|
||||
log(` Reporte guardado: resultado_descarga.json`);
|
||||
|
||||
log("");
|
||||
log("═══════════════════════════════════════════════════════");
|
||||
} catch (err) {
|
||||
log(`\n✗ ERROR GENERAL: ${err.message}`);
|
||||
if (err.stack) log(err.stack);
|
||||
try {
|
||||
await screenshot(activePage, "ERROR_general.png");
|
||||
log(" Screenshot guardado");
|
||||
} catch (_) {}
|
||||
} finally {
|
||||
if (activeContext && activeContext !== context) {
|
||||
await activePage.close().catch(() => {});
|
||||
await activeContext.close().catch(() => {});
|
||||
} else {
|
||||
await page.close().catch(() => {});
|
||||
await context.close().catch(() => {});
|
||||
}
|
||||
await browser.close();
|
||||
log("Navegador cerrado.");
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"name": "descargar-curso",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "descargar-curso",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"playwright": "^1.59.1"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright": {
|
||||
"version": "1.59.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz",
|
||||
"integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"playwright-core": "1.59.1"
|
||||
},
|
||||
"bin": {
|
||||
"playwright": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "2.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/playwright-core": {
|
||||
"version": "1.59.1",
|
||||
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz",
|
||||
"integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"playwright-core": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||