{"id":1262,"date":"2025-12-17T20:08:01","date_gmt":"2025-12-17T17:08:01","guid":{"rendered":"http:\/\/api-sport.pro\/?p=1262"},"modified":"2025-12-17T20:08:01","modified_gmt":"2025-12-17T17:08:01","slug":"como-crear-un-widget-de-tabla-de-campeonato-con-actualizacion-automatica-2","status":"publish","type":"post","link":"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-tabla-de-campeonato-con-actualizacion-automatica-2\/","title":{"rendered":"\u00bfC\u00f3mo crear un widget de tabla de campeonatos con actualizaci\u00f3n autom\u00e1tica?"},"content":{"rendered":"<div class=\"table-of-contents\">\n<div class=\"table-of-contents-title\">Contenidos<\/div>\n<ul class=\"table-of-contents-ul\">\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-1\">\u00bfCu\u00e1l es la API para eventos deportivos y c\u00f3mo ayuda a crear un widget de tabla de campeonatos?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-2\">\u00bfQu\u00e9 APIs de ligas deportivas elegir y d\u00f3nde obtener datos para la tabla de campeonatos?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-3\">\u00bfC\u00f3mo obtener la tabla de campeonatos a trav\u00e9s de la API: ejemplos de solicitudes y par\u00e1metros?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-4\">\u00bfC\u00f3mo crear un widget de tabla de campeonatos con actualizaci\u00f3n autom\u00e1tica en el sitio web usando JavaScript?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-5\">\u00bfC\u00f3mo conectar el widget de tabla de campeonatos a trav\u00e9s de la API en WordPress y otros CMS?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-6\">\u00bfC\u00f3mo configurar la cach\u00e9 y la frecuencia de actualizaci\u00f3n para la tabla de campeonatos a trav\u00e9s de la API?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-7\">Limitaciones y l\u00edmites de la API de estad\u00edsticas deportivas al crear un widget de tabla de campeonatos.<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-1\">\u00bfCu\u00e1l es la API para eventos deportivos y c\u00f3mo ayuda a crear un widget de tabla de campeonatos?<\/h2>\n<p>La API de eventos deportivos es una interfaz de programaci\u00f3n que permite obtener datos estructurados sobre partidos, torneos, equipos, puntajes y cuotas en tiempo real de la manera m\u00e1s cercana posible. En lugar de actualizar manualmente los resultados o analizar sitios web, solicitas datos JSON listos y construyes autom\u00e1ticamente cualquier interfaz basada en ello: desde un bloque simple con una tabla de torneos hasta un complejo panel anal\u00edtico.<\/p>\n<p>En la plataforma <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> los deportes populares se combinan en una sola API: f\u00fatbol, hockey, baloncesto, tenis, tenis de mesa, deportes electr\u00f3nicos y otras disciplinas que se est\u00e1n a\u00f1adiendo constantemente. Para cada deporte, hay puntos finales con partidos, torneos y temporadas disponibles. Esto permite formar una tabla de campeonatos para cualquier liga: campeonato local, torneo internacional o torneo amateur, si est\u00e1 representado en la base de datos.<\/p>\n<p>Gracias a que las respuestas de los partidos contienen no solo el puntaje sino tambi\u00e9n campos adicionales (por ejemplo, <code>estado<\/code>, <code>minutoDelPartidoActual<\/code>, estad\u00edsticas extendidas y cuotas <code>oddsBase<\/code>), puedes construir un widget de tabla de campeonatos con actualizaci\u00f3n autom\u00e1tica y m\u00e9tricas adicionales: forma del equipo, indicador en vivo, resaltando partidos en juego. En pr\u00f3ximas actualizaciones, el servicio planea agregar herramientas de WebSocket e IA, que permitir\u00e1n actualizar la tabla en modo de notificaci\u00f3n push sin solicitudes peri\u00f3dicas y resaltar autom\u00e1ticamente eventos clave (rachas ganadoras, encuentros importantes cara a cara) directamente en la interfaz de tu widget.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-2\">\u00bfQu\u00e9 APIs de ligas deportivas elegir y d\u00f3nde obtener datos para la tabla de campeonatos?<\/h2>\n<p>El primer paso para crear un widget de tabla de campeonatos es seleccionar el deporte y el torneo deseado. La API proporciona un punto final universal <code>\/v2\/deporte<\/code>, que devuelve una lista de todas las disciplinas disponibles. Para cada disciplina, especifica <code>slug<\/code> (por ejemplo, <code>f\u00fatbol<\/code>, <code>hockey sobre hielo<\/code>, <code>baloncesto<\/code>), que luego se utiliza en la ruta de todas las solicitudes. Esto permite un manejo uniforme de diferentes deportes sin cambiar la arquitectura de tu c\u00f3digo.<\/p>\n<p>Despu\u00e9s de seleccionar el deporte deseado, recibes una lista de pa\u00edses y regiones a trav\u00e9s del punto final <code>\/v2\/{sportSlug}\/categor\u00edas<\/code>. La respuesta incluye categor\u00edas con sus identificadores y el campo <code>torneosPredeterminados<\/code> \u2014 torneos recomendados por idiomas de interfaz. Este es un punto de partida conveniente: puedes tomar inmediatamente ligas populares (por ejemplo, campeonatos nacionales y grandes torneos internacionales) y mostrarlas al usuario como opciones en la configuraci\u00f3n del widget.<\/p>\n<p>Para pasar de una categor\u00eda a un campeonato espec\u00edfico, utiliza el m\u00e9todo <code>\/v2\/{sportSlug}\/categor\u00edas\/{categoryId}<\/code>. Devuelve una lista de torneos y temporadas disponibles. Conociendo el ID del torneo y el ID de la temporada, puedes solicitar m\u00e1s partidos y, en base a ellos, calcular la tabla del torneo. Un ejemplo de solicitud para obtener categor\u00edas de f\u00fatbol:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\" data-no-translation=\"\">\ncurl -X GET 'https:\/\/api.api-sport.ru\/v2\/football\/categories' \\\n  -H 'Authorization: YOUR_API_KEY'\n<\/pre>\n<p>Basado en estos datos, puedes darle al usuario una opci\u00f3n: de qu\u00e9 torneo construir la tabla del campeonato, qu\u00e9 temporadas est\u00e1n disponibles y tambi\u00e9n proporcionar soporte para m\u00faltiples ligas en un solo widget (por ejemplo, cambio de pesta\u00f1as: campeonato nacional, copa del pa\u00eds, torneo internacional).<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-3\">\u00bfC\u00f3mo obtener la tabla de campeonatos a trav\u00e9s de la API: ejemplos de solicitudes y par\u00e1metros?<\/h2>\n<p>La documentaci\u00f3n proporcionada se centra en partidos, torneos y temporadas. Una forma t\u00edpica y flexible de formar la tabla del campeonato es solicitar una lista de partidos para el torneo y la temporada seleccionados, y luego calcular puntos y diferencia de goles de tu lado. Para esto, necesitas los IDs del torneo y de la temporada, que se pueden obtener a trav\u00e9s de los endpoints. <code>\/v2\/{sportSlug}\/torneo\/{tournamentId}<\/code> \u0438 <code>\/v2\/{sportSlug}\/torneo\/{tournamentId}\/temporadas<\/code>.<\/p>\n<p>A continuaci\u00f3n, solicitas una lista de partidos del torneo filtrados por temporada. Para un campeonato de f\u00fatbol, esto puede verse as\u00ed:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\" data-no-translation=\"\">\ncurl -X GET \\\n  'https:\/\/api.api-sport.ru\/v2\/football\/matches?tournament_id=7&amp;season_id=72514&amp;status=finished' \\\n  -H 'Authorization: YOUR_API_KEY'\n<\/pre>\n<p>En la respuesta, recibes un array <code>partidos<\/code>, donde para cada partido hay equipos <code>equipoLocal<\/code> \u0438 <code>equipoVisitante<\/code>, as\u00ed como el marcador en el objeto <code>puntajeLocal<\/code> \u0438 <code>puntajeVisitante<\/code>. Basado en estos datos, no es dif\u00edcil calcular victorias, empates, derrotas, puntos ganados, diferencia de goles y formar la tabla. A continuaci\u00f3n se muestra un ejemplo simplificado en JavaScript que agrega resultados en la estructura de clasificaciones:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nfunction buildStandings(matches) {\n  const table = new Map();\n  for (const match of matches) {\n    const home = match.homeTeam.name;\n    const away = match.awayTeam.name;\n    const hs = match.homeScore.current;\n    const as = match.awayScore.current;\n    if (!table.has(home)) table.set(home, { team: home, played: 0, win: 0, draw: 0, lose: 0, gf: 0, ga: 0, pts: 0 });\n    if (!table.has(away)) table.set(away, { team: away, played: 0, win: 0, draw: 0, lose: 0, gf: 0, ga: 0, pts: 0 });\n    const h = table.get(home);\n    const a = table.get(away);\n    h.played++; a.played++;\n    h.gf += hs; h.ga += as;\n    a.gf += as; a.ga += hs;\n    if (hs &gt; as) { h.win++; a.lose++; h.pts += 3; }\n    else if (hs &amp;lt; as) { a.win++; h.lose++; a.pts += 3; }\n    else { h.draw++; a.draw++; h.pts++; a.pts++; }\n  }\n  return Array.from(table.values()).sort((x, y) =&gt; y.pts - x.pts || (y.gf - y.ga) - (x.gf - x.ga));\n}\n<\/pre>\n<p>La clave de API para hacer tales solicitudes se emite en <a href=\"https:\/\/app.api-sport.ru\">tu cuenta personal en api-sport.ru<\/a>. Para soluciones de producci\u00f3n, se recomienda llamar a la API desde tu servidor, donde la clave se almacena en un entorno seguro, y el frontend accede a tu endpoint proxy. De esta manera, puedes gestionar de forma flexible la frecuencia de solicitudes y el almacenamiento en cach\u00e9 sin exponer la clave en el navegador.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-4\">\u00bfC\u00f3mo crear un widget de tabla de campeonatos con actualizaci\u00f3n autom\u00e1tica en el sitio web usando JavaScript?<\/h2>\n<p>El widget de tabla de campeonato que se actualiza autom\u00e1ticamente se construye sobre un esquema simple: solicitar peri\u00f3dicamente tu endpoint de servidor (que a su vez llama a la API de eventos deportivos), recalcular la tabla y actualizar el DOM. Este enfoque escala bien, y con la transici\u00f3n a WebSocket, que est\u00e1 planeada en el lado de la API, podr\u00e1s reemplazar la consulta por notificaciones push y actualizar la tabla sin solicitudes innecesarias.<\/p>\n<p>El marcado HTML m\u00ednimo para el widget puede verse as\u00ed: un contenedor con un encabezado y un vac\u00edo <code>&lt;tbody&gt;<\/code>, donde JavaScript insertar\u00e1 filas con equipos, puntos y diferencia de goles. A continuaci\u00f3n, implementar\u00e1s la funci\u00f3n de carga y renderizado de datos. A continuaci\u00f3n se muestra un ejemplo de una implementaci\u00f3n simple en JavaScript puro, donde el frontend llama a tu backend en la direcci\u00f3n <code>\/api\/standings<\/code>:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\" data-no-translation=\"\">\n&amp;lt;div id='standings-widget'&gt;\n  &amp;lt;h3&gt;\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430&amp;lt;\/h3&gt;\n  &amp;lt;table&gt;\n    &amp;lt;thead&gt;\n      &amp;lt;tr&gt;\n        &amp;lt;th&gt;#&amp;lt;\/th&gt;\n        &amp;lt;th&gt;\u041a\u043e\u043c\u0430\u043d\u0434\u0430&amp;lt;\/th&gt;\n        &amp;lt;th&gt;\u0418&amp;lt;\/th&gt;\n        &amp;lt;th&gt;\u041e&amp;lt;\/th&gt;\n        &amp;lt;th&gt;\u041c\u044f\u0447\u0438&amp;lt;\/th&gt;\n      &amp;lt;\/tr&gt;\n    &amp;lt;\/thead&gt;\n    &amp;lt;tbody id='standings-body'&gt;&amp;lt;\/tbody&gt;\n  &amp;lt;\/table&gt;\n&amp;lt;\/div&gt;\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nasync function loadStandings() {\n  const res = await fetch('\/api\/standings'); \/\/ \u0432\u0430\u0448 \u0431\u044d\u043a\u0435\u043d\u0434 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a https:\/\/api.api-sport.ru\n  const data = await res.json(); \/\/ \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n  const tbody = document.getElementById('standings-body');\n  tbody.innerHTML = '';\n  data.forEach((row, index) =&gt; {\n    const tr = document.createElement('tr');\n    tr.innerHTML = `\n      &amp;lt;td&gt;${index + 1}&amp;lt;\/td&gt;\n      &amp;lt;td&gt;${row.team}&amp;lt;\/td&gt;\n      &amp;lt;td&gt;${row.played}&amp;lt;\/td&gt;\n      &amp;lt;td&gt;${row.pts}&amp;lt;\/td&gt;\n      &amp;lt;td&gt;${row.gf}:${row.ga}&amp;lt;\/td&gt;`;\n    tbody.appendChild(tr);\n  });\n}\n\/\/ \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438 \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u044b\u0435 60 \u0441\u0435\u043a\u0443\u043d\u0434\nloadStandings();\nsetInterval(loadStandings, 60000);\n<\/pre>\n<p>En tu lado del servidor, esta funci\u00f3n puede implementar el algoritmo de la secci\u00f3n anterior: solicitar partidos de la API, calcular la tabla y devolver la estructura ya preparada. Este patr\u00f3n te permite agregar f\u00e1cilmente nuevas caracter\u00edsticas (por ejemplo, mostrar el total promedio, los \u00faltimos 5 partidos, las cuotas actuales del campo <code>oddsBase<\/code>) sin cambios en el c\u00f3digo del cliente: el frontend seguir\u00e1 recibiendo un array de objetos con los campos necesarios, y solo lo expandir\u00e1s de tu lado.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-5\">\u00bfC\u00f3mo conectar el widget de tabla de campeonatos a trav\u00e9s de la API en WordPress y otros CMS?<\/h2>\n<p>En WordPress y CMS populares, es m\u00e1s conveniente conectar la tabla del campeonato a trav\u00e9s de tu propio shortcode o widget, que genera el contenedor HTML y conecta JavaScript para la carga de datos. La API de eventos deportivos, en este caso, permanece \u00abdetr\u00e1s de escena\u00bb \u2014 tu c\u00f3digo de servidor (PHP, Node.js u otro stack) accede a ella, y una respuesta JSON lista se genera en la p\u00e1gina, que se renderiza en la tabla.<\/p>\n<p>En WordPress, puedes crear un shortcode simple que inserte el marcado de la tabla y conecte el script de auto-actualizaci\u00f3n. La parte del servidor del shortcode puede llamar a tu endpoint REST interno, que, a su vez, utiliza datos de <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a>. Un ejemplo de una implementaci\u00f3n m\u00ednima de un shortcode en PHP:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nfunction api_sport_standings_shortcode( $atts ) {\n    $atts = shortcode_atts(&#x5B;\n        'league' =&gt; '7',      \/\/ ID \u0442\u0443\u0440\u043d\u0438\u0440\u0430\n        'season' =&gt; '72514',  \/\/ ID \u0441\u0435\u0437\u043e\u043d\u0430\n    ], $atts, 'api_sport_standings' );\n    ob_start();\n    ?&gt;\n    &amp;lt;div id='standings-widget' data-league='&amp;lt;?php echo esc_attr( $atts&#x5B;'league'] ); ?&gt;' data-season='&amp;lt;?php echo esc_attr( $atts&#x5B;'season'] ); ?&gt;'&gt;\n        &amp;lt;h3&gt;\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430&amp;lt;\/h3&gt;\n        &amp;lt;table&gt;\n            &amp;lt;thead&gt;\n                &amp;lt;tr&gt;\n                    &amp;lt;th&gt;#&amp;lt;\/th&gt;&amp;lt;th&gt;\u041a\u043e\u043c\u0430\u043d\u0434\u0430&amp;lt;\/th&gt;&amp;lt;th&gt;\u0418&amp;lt;\/th&gt;&amp;lt;th&gt;\u041e&amp;lt;\/th&gt;&amp;lt;th&gt;\u041c\u044f\u0447\u0438&amp;lt;\/th&gt;\n                &amp;lt;\/tr&gt;\n            &amp;lt;\/thead&gt;\n            &amp;lt;tbody id='standings-body'&gt;&amp;lt;\/tbody&gt;\n        &amp;lt;\/table&gt;\n    &amp;lt;\/div&gt;\n    &amp;lt;?php\n    return ob_get_clean();\n}\nadd_shortcode( 'api_sport_standings', 'api_sport_standings_shortcode' );\n<\/pre>\n<p>A continuaci\u00f3n, registras el script que realiza una llamada AJAX a tu ruta REST (por ejemplo, <code>\/wp-json\/api-sport\/v1\/standings<\/code>). Esta ruta en PHP solicita partidos de la API de eventos deportivos para el deporte y torneo requeridos, calcula la tabla y devuelve JSON. Un esquema similar se puede implementar en otros CMS y frameworks: en 1C-Bitrix, Drupal, Laravel, Django. Los principios clave son los mismos: la clave de API se almacena en el servidor, los datos se almacenan en cach\u00e9 y el frontend recibe JSON limpio y ligero para la visualizaci\u00f3n.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-6\">\u00bfC\u00f3mo configurar la cach\u00e9 y la frecuencia de actualizaci\u00f3n para la tabla de campeonatos a trav\u00e9s de la API?<\/h2>\n<p>El almacenamiento en cach\u00e9 adecuado es un elemento cr\u00edtico al trabajar con cualquier API externa. La tabla del campeonato no necesita actualizarse cada segundo: los puntos cambian solo cuando los partidos terminan o ocurren eventos en vivo. Por lo tanto, la estrategia \u00f3ptima es almacenar la tabla calculada en la cach\u00e9 del servidor y actualizarla solo cuando sea necesario. Esto reduce la carga tanto en su servidor como en la API de eventos deportivos, as\u00ed como protege contra el exceso de l\u00edmites.<\/p>\n<p>Para WordPress, es conveniente usar la API de Transients o cach\u00e9 de objetos: guardas la tabla lista (un array con equipos y estad\u00edsticas) durante 30-60 segundos para el modo en vivo y durante varios minutos fuera de las ventanas de partidos. En otros stacks, puedes usar Redis, Memcached o cach\u00e9 de archivos. El algoritmo t\u00edpico es: al recibir una solicitud del frontend, primero verificas la cach\u00e9; si los datos existen y no est\u00e1n desactualizados, simplemente los devuelves. Si la cach\u00e9 est\u00e1 vac\u00eda o ha expirado, haces una solicitud a <code>https:\/\/api.api-sport.ru<\/code>, recalculas la tabla y actualizas la cach\u00e9.<\/p>\n<p>La frecuencia de actualizaci\u00f3n es \u00fatil para adaptarse al contexto: durante los tours y partidos en vivo, tiene sentido actualizar los datos con m\u00e1s frecuencia (por ejemplo, cada 30-60 segundos), mientras que durante los descansos entre tours \u2014 con menos frecuencia (una vez cada 5-10 minutos). Con la futura introducci\u00f3n de WebSocket en el lado de la API, podr\u00e1s reestructurar la l\u00f3gica: la cach\u00e9 se invalidar\u00e1 por evento (por ejemplo, cambio de puntuaci\u00f3n o finalizaci\u00f3n del partido), en lugar de por temporizador. Esto har\u00e1 que el widget de la tabla del campeonato sea m\u00e1s preciso y, al mismo tiempo, a\u00fan menos intensivo en recursos.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-7\">Limitaciones y l\u00edmites de la API de estad\u00edsticas deportivas al crear un widget de tabla de campeonatos.<\/h2>\n<p>Al dise\u00f1ar el widget, es importante considerar los l\u00edmites y restricciones de la API. En la pr\u00e1ctica, esto significa: no solicitar datos innecesarios, usar filtros y manejar errores correctamente. El endpoint <code>\/v2\/{sportSlug}\/partidos<\/code> permite filtrar partidos por <code>torneo_id<\/code>, <code>temporada_id<\/code>, <code>equipo_id<\/code>, fecha y estado. Esto ayuda a evitar cargar todo el feed de eventos para el deporte y solo obtener lo que se necesita para calcular una tabla de campeonato espec\u00edfica.<\/p>\n<p>Tambi\u00e9n es importante monitorear el n\u00famero de solicitudes y distribuir la carga: para cada p\u00e1gina con un widget, no es necesario llamar directamente a la API externa. Es mucho m\u00e1s eficiente cuando todos los widgets leen datos de tu cach\u00e9 interna, que se sincroniza peri\u00f3dicamente con la API de eventos deportivos. Este enfoque minimiza el riesgo de alcanzar los l\u00edmites de solicitudes y asegura un funcionamiento estable del sitio web incluso durante picos de tr\u00e1fico.<\/p>\n<p>Aseg\u00farate de implementar el manejo de errores y casos l\u00edmite: indisponibilidad de la API, tiempos de espera de red, exceder l\u00edmites, clave inv\u00e1lida. A continuaci\u00f3n se muestra un ejemplo de una solicitud simplificada a tu backend con un manejo de errores cuidadoso en el frontend:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\nasync function safeLoadStandings() {\n  try {\n    const res = await fetch('\/api\/standings');\n    if (!res.ok) {\n      console.error('\u041e\u0448\u0438\u0431\u043a\u0430 API, \u0441\u0442\u0430\u0442\u0443\u0441:', res.status);\n      return;\n    }\n    const data = await res.json();\n    \/\/ \u0434\u0430\u043b\u0435\u0435 \u0440\u0435\u043d\u0434\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b\n  } catch (e) {\n    console.error('\u0421\u0435\u0442\u0435\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430:', e);\n  }\n}\n<\/pre>\n<p>La informaci\u00f3n detallada sobre tarifas, l\u00edmites y recomendaciones de uso suele estar disponible en la documentaci\u00f3n y en la cuenta personal. Al dise\u00f1ar el widget de la tabla del campeonato basado en la API, permite un rendimiento y estabilidad: usa cach\u00e9, respuestas comprimidas, frecuencia de actualizaci\u00f3n razonable y considera expandir la funcionalidad (conectar cuotas de casas de apuestas, estad\u00edsticas en vivo, futuros canales de WebSocket y sugerencias de IA).<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Content What is the API of sports events and how does it help create a championship table widget What sports league APIs to choose and where to get data for the championship table How to get the championship table via API: examples of requests and parameters How to create a championship table widget with auto-updating on the website using JavaScript How to connect the championship table widget via API in [\u2026]<\/p>","protected":false},"author":1,"featured_media":1261,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","faq":"[{\"question\":\"\u041a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 API \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439?\",\"answer\":\"\u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u0442\u0447\u0435\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0443\u0440\u043d\u0438\u0440\u0430 \u0438 \u0441\u0435\u0437\u043e\u043d\u0430. \u0427\u0435\u0440\u0435\u0437 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u044b API \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0442\u0443\u0440\u043d\u0438\u0440\u0430 \u0438 \u0441\u0435\u0437\u043e\u043d\u0430, \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0430\u0442\u0447\u0435\u0439 \u043f\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c tournament_id, season_id \u0438 status=finished. \u0418\u0437 \u043f\u043e\u043b\u0435\u0439 homeTeam, awayTeam, homeScore.current \u0438 awayScore.current \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0431\u0435\u0434\u044b, \u043d\u0438\u0447\u044c\u0438, \u043f\u043e\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0447\u043a\u0438 \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u044f\u0447\u0435\u0439.\"},{\"question\":\"\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b?\",\"answer\":\"\u0414\u0430. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e JavaScript\u2011\u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432 30\u201360 \u0441\u0435\u043a\u0443\u043d\u0434) \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u0433\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 API. \u0414\u0430\u043b\u0435\u0435 DOM \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043b\u0435\u0442\u0443. \u0412 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c WebSocket \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 API, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u043f\u043e\u043b\u043b\u0438\u043d\u0433\u0430 \u043a push\u2011\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e.\"},{\"question\":\"\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c API \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430?\",\"answer\":\"\u0412 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d\u2011\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c API \u043a\u043b\u044e\u0447 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0432\u0430\u0448\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u043a\u0441\u0438\u2011\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0443, \u0430 \u0443\u0436\u0435 \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043b\u044e\u0447 \u0438\u0437 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0432\u044b \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\u0435 \u043a\u043b\u044e\u0447, \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432.\"},{\"question\":\"\u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c \u043b\u0438\u043c\u0438\u0442\u044b API?\",\"answer\":\"\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430. \u0412 live\u2011\u0442\u0443\u0440\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u044b\u0435 30\u201360 \u0441\u0435\u043a\u0443\u043d\u0434, \u0432\u043d\u0435 \u043c\u0430\u0442\u0447\u0435\u0439 \u2014 \u0440\u0430\u0437 \u0432 5\u201310 \u043c\u0438\u043d\u0443\u0442. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435: \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u044d\u0448\u0430, \u0430 \u043a \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 API \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043a\u044d\u0448 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442\u044b \u0438 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a.\"},{\"question\":\"\u041a\u0430\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u043a WordPress\u2011\u0441\u0430\u0439\u0442\u0443?\",\"answer\":\"\u0412 WordPress \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0448\u043e\u0440\u0442\u043a\u043e\u0434\u0430. PHP\u2011\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0448\u043e\u0440\u0442\u043a\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 HTML\u2011\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 JS\u2011\u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 REST\u2011\u0440\u043e\u0443\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a API \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043f\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u0442\u0443\u0440\u043d\u0438\u0440\u0430 \u0438 \u0441\u0435\u0437\u043e\u043d\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u043c\u0430\u0442\u0447\u0438, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u043e\u0442\u0434\u0430\u0451\u0442 JSON \u0434\u043b\u044f \u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0430. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043c\u044b \u043f\u0440\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430.\"}]","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1262","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"yoast_head":"<title>How to create a championship table widget via API \u2014 api-sport.ru<\/title>\n<meta name=\"description\" content=\"Instructions for developers: how to assemble a championship table widget with auto-updating based on the API of sports events api-sport.ru.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-tabla-de-campeonato-con-actualizacion-automatica-2\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to create a championship table widget via API \u2014 api-sport.ru\" \/>\n<meta property=\"og:description\" content=\"Instructions for developers: how to assemble a championship table widget with auto-updating based on the API of sports events api-sport.ru.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-tabla-de-campeonato-con-actualizacion-automatica-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Sports Events API\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-17T17:08:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1584\" \/>\n\t<meta property=\"og:image:height\" content=\"672\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/\",\"url\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/\",\"name\":\"How to create a championship table widget via API \u2014 api-sport.ru\",\"isPartOf\":{\"@id\":\"https:\/\/api-sport.pro\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg\",\"datePublished\":\"2025-12-17T17:08:01+00:00\",\"author\":{\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\"},\"description\":\"Instructions for developers: how to assemble a championship table widget with auto-updating based on the API of sports events api-sport.ru.\",\"breadcrumb\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#primaryimage\",\"url\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg\",\"contentUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg\",\"width\":1584,\"height\":672,\"caption\":\"\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c?\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\/\/api-sport.pro\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to create a championship table widget with auto-refresh?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/api-sport.pro\/#website\",\"url\":\"https:\/\/api-sport.pro\/\",\"name\":\"Sports Events API\",\"description\":\"Sports Events API\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/api-sport.pro\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/api-sport.pro\"],\"url\":\"https:\/\/api-sport.pro\/es\/author\/admin\/\"}]}<\/script>","yoast_head_json":{"title":"C\u00f3mo crear un widget de tabla de campeonato a trav\u00e9s de API \u2014 api-sport.ru","description":"Instrucciones para desarrolladores: c\u00f3mo ensamblar un widget de tabla de campeonato con actualizaci\u00f3n autom\u00e1tica basado en la API de eventos deportivos api-sport.ru.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-tabla-de-campeonato-con-actualizacion-automatica-2\/","og_locale":"es_ES","og_type":"article","og_title":"How to create a championship table widget via API \u2014 api-sport.ru","og_description":"Instructions for developers: how to assemble a championship table widget with auto-updating based on the API of sports events api-sport.ru.","og_url":"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-tabla-de-campeonato-con-actualizacion-automatica-2\/","og_site_name":"Sports Events API","article_published_time":"2025-12-17T17:08:01+00:00","og_image":[{"width":1584,"height":672,"url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/","url":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/","name":"C\u00f3mo crear un widget de tabla de campeonato a trav\u00e9s de API \u2014 api-sport.ru","isPartOf":{"@id":"https:\/\/api-sport.pro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#primaryimage"},"image":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#primaryimage"},"thumbnailUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg","datePublished":"2025-12-17T17:08:01+00:00","author":{"@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601"},"description":"Instrucciones para desarrolladores: c\u00f3mo ensamblar un widget de tabla de campeonato con actualizaci\u00f3n autom\u00e1tica basado en la API de eventos deportivos api-sport.ru.","breadcrumb":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#primaryimage","url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg","contentUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sozdat-vidzhet-tablitsy-chempionata-s-avtoobnovleniem_posts.jpg","width":1584,"height":672,"caption":"\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0435\u043c\u043f\u0438\u043e\u043d\u0430\u0442\u0430 \u0441 \u0430\u0432\u0442\u043e\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c?"},{"@type":"BreadcrumbList","@id":"https:\/\/api-sport.pro\/how-to-create-a-championship-table-widget-with-auto-refresh-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/api-sport.pro\/"},{"@type":"ListItem","position":2,"name":"How to create a championship table widget with auto-refresh?"}]},{"@type":"WebSite","@id":"https:\/\/api-sport.pro\/#website","url":"https:\/\/api-sport.pro\/","name":"API de Eventos Deportivos","description":"API de Eventos Deportivos","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/api-sport.pro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601","name":"administrador","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8f3dce32feb8659c1f1c917db74325481c6133714f03d5a9433ba6df23a857ab?s=96&d=mm&r=g","caption":"admin"},"sameAs":["http:\/\/api-sport.pro"],"url":"https:\/\/api-sport.pro\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/comments?post=1262"}],"version-history":[{"count":2,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1262\/revisions"}],"predecessor-version":[{"id":1468,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1262\/revisions\/1468"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media\/1261"}],"wp:attachment":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media?parent=1262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/categories?post=1262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/tags?post=1262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}