From e7a32830d326bd20c18722c7ce01a7ce0927bac4 Mon Sep 17 00:00:00 2001 From: Federico Krenn Date: Mon, 30 Oct 2023 16:24:16 -0300 Subject: [PATCH] Se unifica lenguaje --- server.js | 7 +++---- src/calcularParcial.js | 16 ++++++++++++++++ src/calcularTotal.js | 25 +++++++++++++++++++++++++ src/calculatePartial.js | 16 ---------------- src/calculateTotal.js | 26 -------------------------- src/extraerDatosConCheerio.js | 19 +++++++++++++++++++ src/format.js | 25 ------------------------- src/formatear.js | 25 +++++++++++++++++++++++++ src/getData.js | 18 ------------------ src/main.js | 16 ++++++++-------- src/obtenerDatos.js | 19 +++++++++++++++++++ src/useCheerio.js | 19 ------------------- views/index.ejs | 4 ++-- 13 files changed, 117 insertions(+), 118 deletions(-) create mode 100644 src/calcularParcial.js create mode 100644 src/calcularTotal.js delete mode 100644 src/calculatePartial.js delete mode 100644 src/calculateTotal.js create mode 100644 src/extraerDatosConCheerio.js delete mode 100644 src/format.js create mode 100644 src/formatear.js delete mode 100644 src/getData.js create mode 100644 src/obtenerDatos.js delete mode 100644 src/useCheerio.js diff --git a/server.js b/server.js index 2976712..ee7ca22 100644 --- a/server.js +++ b/server.js @@ -9,14 +9,13 @@ app.use(express.urlencoded({ extended: true })) app.use(express.static('public')) /* ---------- EJS ------------- */ - -// Configuracion de EJS app.set('views', './views') app.set('view engine', 'ejs') +/* ---------- Rutas ------------- */ app.get('/', async (req, res) => { - const result = await main() - res.render('index', { tabla: result }) + const datos = await main() + res.render('index', { tabla: datos }) }) app.listen(PORT, () => { diff --git a/src/calcularParcial.js b/src/calcularParcial.js new file mode 100644 index 0000000..d16fa19 --- /dev/null +++ b/src/calcularParcial.js @@ -0,0 +1,16 @@ +const PARTIDOS_TOTALES = 14 + +export default function calcularParcial (arrayEquipos) { + return arrayEquipos.map(infoEquipo => { + const { nombre, puntosTotales, partidosJugados } = infoEquipo + + const porcentajeActual = parseFloat((puntosTotales / (partidosJugados * 3)).toFixed(2)) + const puntosEstimados = parseInt((PARTIDOS_TOTALES - partidosJugados) * 3 * porcentajeActual) + + return { + nombre, + porcentajeActual, + puntosEstimados + } + }) +} diff --git a/src/calcularTotal.js b/src/calcularTotal.js new file mode 100644 index 0000000..d43cc41 --- /dev/null +++ b/src/calcularTotal.js @@ -0,0 +1,25 @@ +import calcularParcial from './calcularParcial.js' + +export default function calcularTotal (tablaGeneral, zonaA, zonaB) { + const unificado = [...calcularParcial(zonaA), ...calcularParcial(zonaB)] + + const datos = tablaGeneral.map(equipo => { + const equipoEncontrado = unificado.find(eq => eq.nombre === equipo.nombre) + const puntosFinalesEstimados = equipo.puntosTotales + equipoEncontrado.puntosEstimados + + return { + ...equipo, + porcentajeActual: equipoEncontrado.porcentajeActual, + puntosFinalesEstimados + } + }) + + return datos + .sort((a, b) => b.puntosFinalesEstimados - a.puntosFinalesEstimados) + .map((equipoInfo, index) => { + return { + posicion: index + 1, + ...equipoInfo + } + }) +} diff --git a/src/calculatePartial.js b/src/calculatePartial.js deleted file mode 100644 index 0689e30..0000000 --- a/src/calculatePartial.js +++ /dev/null @@ -1,16 +0,0 @@ -const PARTIDOS_TOTALES = 14 - -export default function calculatePartial (teamsArr) { - return teamsArr.map(teamInfo => { - const { equipo, puntosTotales, partidosJugados } = teamInfo - - const porcentajeActual = parseFloat(((puntosTotales * 100) / (partidosJugados * 3) / 100).toFixed(2)) - const puntosEstimados = parseInt((PARTIDOS_TOTALES - partidosJugados) * 3 * porcentajeActual) - - return { - equipo, - porcentajeActual, - puntosEstimados - } - }) -} diff --git a/src/calculateTotal.js b/src/calculateTotal.js deleted file mode 100644 index da18759..0000000 --- a/src/calculateTotal.js +++ /dev/null @@ -1,26 +0,0 @@ -import calculatePartial from './calculatePartial.js' - -export default function calculateTotal (tablaGeneral, zonaA, zonaB) { - const unificado = [...calculatePartial(zonaA), ...calculatePartial(zonaB)] - .sort((a, b) => b.puntosEstimados - a.puntosEstimados) - - const data = tablaGeneral.map(team => { - const equipoEncontrado = unificado.find(eq => eq.equipo === team.equipo) - const puntosFinalesEstimados = team.puntosTotales + equipoEncontrado.puntosEstimados - - return { - ...team, - porcentajeActual: equipoEncontrado.porcentajeActual, - puntosFinalesEstimados - } - }) - - return data - .sort((a, b) => b.puntosFinalesEstimados - a.puntosFinalesEstimados) - .map((team, index) => { - return { - posicion: index + 1, - ...team - } - }) -} diff --git a/src/extraerDatosConCheerio.js b/src/extraerDatosConCheerio.js new file mode 100644 index 0000000..a3b6c2b --- /dev/null +++ b/src/extraerDatosConCheerio.js @@ -0,0 +1,19 @@ +import { extract } from '@extractus/article-extractor' +import * as cheerio from 'cheerio' + +export default async function extraerDatosConCheerio (URL) { + const { content } = await extract(URL) + + const $ = cheerio.load(content) + + const tablaAnual = $("p:contains('Tabla Anual 2023 (Copas+Descenso)')") + const zonaA = $("p:contains('ZONA A')") + const zonaB = $("p:contains('ZONA B')") + + return { + $, + tablaAnual, + zonaA, + zonaB + } +} diff --git a/src/format.js b/src/format.js deleted file mode 100644 index b08c870..0000000 --- a/src/format.js +++ /dev/null @@ -1,25 +0,0 @@ -export default function formmatData (tableData, generalData) { - const table = [] - - if (tableData.length > 0) { - tableData.find('tbody tr').each((_, row) => { - const columns = generalData(row).find('td') - - const equipo = columns.eq(1).text().trim() - const puntosTotales = parseInt(columns.eq(2).text(), 10) - const partidosJugados = parseInt(columns.eq(3).text(), 10) - - const teamData = { - equipo, - puntosTotales, - partidosJugados - } - - table.push(teamData) - }) - - return table - } else { - return [] - } -} diff --git a/src/formatear.js b/src/formatear.js new file mode 100644 index 0000000..a44b1ce --- /dev/null +++ b/src/formatear.js @@ -0,0 +1,25 @@ +export default function formatearInfo (tablaDatos, datosGenerales) { + const buffer = [] + + if (tablaDatos.length > 0) { + tablaDatos.find('tbody tr').each((_, row) => { + const columnas = datosGenerales(row).find('td') + + const nombre = columnas.eq(1).text().trim() + const puntosTotales = parseInt(columnas.eq(2).text(), 10) + const partidosJugados = parseInt(columnas.eq(3).text(), 10) + + const datosEquipo = { + nombre, + puntosTotales, + partidosJugados + } + + buffer.push(datosEquipo) + }) + + return buffer + } else { + return [] + } +} diff --git a/src/getData.js b/src/getData.js deleted file mode 100644 index 892d898..0000000 --- a/src/getData.js +++ /dev/null @@ -1,18 +0,0 @@ -import formmatData from './format.js' - -export default function getTableData (tableData, generalData) { - let result - if (tableData.length > 0) { - const table = tableData.next('table') - - if (table.length > 0) { - result = formmatData(table, generalData) - } else { - console.log('No se encontró la tabla hermana.') - } - } else { - console.log('No se encontró el párrafo específico.') - } - - return result -} diff --git a/src/main.js b/src/main.js index c89311e..7ceba54 100644 --- a/src/main.js +++ b/src/main.js @@ -1,15 +1,15 @@ -import getTableData from './getData.js' -import calculateTotal from './calculateTotal.js' -import useCheerio from './useCheerio.js' +import obtenerDatos from './obtenerDatos.js' +import calcularTotal from './calcularTotal.js' +import extraerDatosConCheerio from './extraerDatosConCheerio.js' const URL = 'https://www.promiedos.com.ar/copadeliga' export default async function main () { - const { $, yearTable, groupATable, groupBTable } = await useCheerio(URL) + const { $, tablaAnual, zonaA, zonaB } = await extraerDatosConCheerio(URL) - const tablaAnual = getTableData(yearTable, $) - const zonaA = getTableData(groupATable, $) - const zonaB = getTableData(groupBTable, $) + const datosTablaAnual = obtenerDatos(tablaAnual, $) + const datosZonaA = obtenerDatos(zonaA, $) + const datosZonaB = obtenerDatos(zonaB, $) - return calculateTotal(tablaAnual, zonaA, zonaB) + return calcularTotal(datosTablaAnual, datosZonaA, datosZonaB) } diff --git a/src/obtenerDatos.js b/src/obtenerDatos.js new file mode 100644 index 0000000..17258ae --- /dev/null +++ b/src/obtenerDatos.js @@ -0,0 +1,19 @@ +import formatearInfo from './formatear.js' + +export default function obtenerDatos (tablaDatos, datosGenerales) { + let datosFormateados + + if (tablaDatos.length > 0) { + const tabla = tablaDatos.next('table') + + if (tabla.length > 0) { + datosFormateados = formatearInfo(tabla, datosGenerales) + } else { + console.log('No se encontró la tabla hermana.') + } + } else { + console.log('No se encontró el párrafo específico.') + } + + return datosFormateados +} diff --git a/src/useCheerio.js b/src/useCheerio.js deleted file mode 100644 index c4e6eea..0000000 --- a/src/useCheerio.js +++ /dev/null @@ -1,19 +0,0 @@ -import { extract } from '@extractus/article-extractor' -import * as cheerio from 'cheerio' - -export default async function useCheerio (URL) { - const { content } = await extract(URL) - - const $ = cheerio.load(content) - - const yearTable = $("p:contains('Tabla Anual 2023 (Copas+Descenso)')") - const groupATable = $("p:contains('ZONA A')") - const groupBTable = $("p:contains('ZONA B')") - - return { - $, - yearTable, - groupATable, - groupBTable - } -} diff --git a/views/index.ejs b/views/index.ejs index f99c6fc..781a022 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -71,10 +71,10 @@ <% tabla.forEach(equipo => { %> <%= equipo.posicion %> - <%= equipo.equipo %> + <%= equipo.nombre %> <%= equipo.porcentajeActual * 100 %>% <%= equipo.puntosFinalesEstimados %>