// URL de los enlaces AceStream const aceStreamUrl = 'https://ia600309.us.archive.org/8/items/abcd_20240416/Arena4view.txt'; // URL del archivo JSON con las traducciones const translationsUrl = 'translations.json'; // Variable para almacenar el diccionario de traducciones let translations = {}; // Variable para almacenar todos los eventos let eventos = []; // Función para cargar el diccionario de traducciones desde el archivo JSON async function loadTranslations() { try { const response = await fetch(translationsUrl); if (!response.ok) { throw new Error('Error al cargar el diccionario de traducciones'); } translations = await response.json(); } catch (error) { console.error('Error:', error); } } // Función para obtener los enlaces AceStream async function getAceStreamLinks() { try { const response = await fetch(aceStreamUrl); if (!response.ok) { throw new Error('Error al obtener los enlaces AceStream'); } const text = await response.text(); const lines = text.split('\n'); // Crear un objeto de mapeo: { "av1": "acestream://...", "av2": "acestream://...", ... } const aceStreamMap = {}; lines.forEach(line => { const [key, value] = line.split('#'); if (key && value) { aceStreamMap[key.trim()] = value.trim(); } }); return aceStreamMap; } catch (error) { console.error('Error:', error); return {}; } } // Función para formatear la fecha (eliminar el año) function formatDate(dateString) { return dateString.split('/').slice(0, 2).join('/'); // Elimina el año } // Función para formatear la hora (eliminar "CET") function formatTime(timeString) { return timeString.replace(' CET', ''); // Elimina "CET" } // Función para traducir las cabeceras y el contenido de la tabla (excepto el contenido de COMPETITION y EVENT) function translateTable(table) { const rows = table.querySelectorAll('tr'); // Traducir las cabeceras de todas las columnas const headerRow = rows[0]; if (headerRow) { const headerCells = headerRow.querySelectorAll('td'); headerCells.forEach((cell) => { const text = cell.textContent.trim(); if (text) { const translatedText = translations[text] || text; cell.textContent = translatedText; } }); } // Traducir el contenido de las columnas (excepto COMPETITION y EVENT) rows.forEach((row, rowIndex) => { if (rowIndex === 0) return; // Saltar la fila de cabecera const cells = row.querySelectorAll('td'); cells.forEach((cell, cellIndex) => { // Formatear la fecha (columna DÍA) if (cellIndex === 0) { cell.textContent = formatDate(cell.textContent.trim()); } // Formatear la hora (columna HORA) if (cellIndex === 1) { cell.textContent = formatTime(cell.textContent.trim()); } // Omitir la traducción en las columnas COMPETITION (índice 3) y EVENT (índice 4) if (cellIndex === 3 || cellIndex === 4) return; const text = cell.textContent.trim(); if (text) { // Buscar y reemplazar las palabras en inglés con sus traducciones const translatedText = Object.keys(translations).reduce((acc, key) => { return acc.replace(new RegExp(key, 'gi'), translations[key]); }, text); cell.textContent = translatedText; } }); }); } // Función para mostrar los eventos de fútbol (incluyendo fútbol femenino) function mostrarEventosFutbol(aceStreamMap) { const eventosDiv = document.getElementById('eventos'); eventosDiv.innerHTML = ''; // Limpiar contenido previo // Agrupar los eventos por competición const groupedEvents = eventos.reduce((acc, evento) => { const [dia, hora, deporte, competicion, eventoNombre, live] = evento; // Solo agregar eventos de fútbol y fútbol femenino del día en curso if ((deporte.toLowerCase() === 'fútbol' || deporte.toLowerCase() === 'fútbol (w)') && dia === obtenerFechaHoy()) { if (!acc[competicion]) { acc[competicion] = []; // Crear un array para la competición si no existe } acc[competicion].push(evento); } return acc; }, {}); // Si no hay eventos después del filtrado (esto se puede borrar si no lo queremos) if (Object.keys(groupedEvents).length === 0) { const noEventsHTML = `