{"id":1260,"date":"2025-12-17T20:08:01","date_gmt":"2025-12-17T17:08:01","guid":{"rendered":"http:\/\/api-sport.pro\/?p=1260"},"modified":"2025-12-17T20:08:01","modified_gmt":"2025-12-17T17:08:01","slug":"como-crear-un-widget-de-incrustacion-universal-para-cualquier-sitio-web","status":"publish","type":"post","link":"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-incrustacion-universal-para-cualquier-sitio-web\/","title":{"rendered":"\u00bfC\u00f3mo crear un widget de inserci\u00f3n universal para cualquier sitio web?"},"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\">\u00bfQu\u00e9 es un widget de inserci\u00f3n para eventos deportivos y c\u00f3mo funciona?<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-2\">C\u00f3mo elegir y conectar la API de eventos deportivos para el widget de inserci\u00f3n.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-3\">C\u00f3mo obtener datos y estad\u00edsticas de partidos a trav\u00e9s de la API para el widget del sitio web.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-4\">C\u00f3mo crear un widget de inserci\u00f3n universal para eventos deportivos para cualquier sitio web.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-5\">C\u00f3mo personalizar los par\u00e1metros y la apariencia del widget de inserci\u00f3n para que coincida con el dise\u00f1o del sitio web.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-6\">C\u00f3mo integrar el widget de inserci\u00f3n para eventos deportivos en CMS populares y creadores de sitios web.<\/a><\/li>\n<li class=\"table-of-contents-li\"><a class=\"table-of-contents-a\" href=\"#contents-7\">Seguridad y limitaciones al usar la API de eventos deportivos en el widget de inserci\u00f3n.<\/a><\/li>\n<\/ul>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-1\">\u00bfQu\u00e9 es un widget de inserci\u00f3n para eventos deportivos y c\u00f3mo funciona?<\/h2>\n<p>El widget de inserci\u00f3n para eventos deportivos es un peque\u00f1o fragmento de c\u00f3digo que se incrusta en la p\u00e1gina y carga autom\u00e1ticamente datos actuales sobre partidos, puntajes, estad\u00edsticas y cuotas. Este bloque no requiere que el propietario del sitio web lo actualice manualmente: toda la informaci\u00f3n se obtiene de una API de eventos deportivos confiable y se actualiza en tiempo real o en un intervalo especificado. Como resultado, cualquier sitio web, desde medios hasta blogs o portales de apuestas, recibe contenido deportivo en vivo sin desarrollar una infraestructura interna compleja.<\/p>\n<p>Tecnol\u00f3gicamente, el widget de inserci\u00f3n es un componente de JavaScript que, cuando se carga la p\u00e1gina, env\u00eda solicitudes al servidor, recibe datos estructurados en formato JSON y los presenta en una interfaz amigable para el usuario. La fuente de datos es un servicio especializado, como <a href=\"http:\/\/api-sport.pro\/es\/\">API de datos deportivos api-sport.ru<\/a>, que agrega informaci\u00f3n sobre varios deportes (f\u00fatbol, hockey, baloncesto, tenis, tenis de mesa, deportes electr\u00f3nicos y otros) y de las APIs de las casas de apuestas: l\u00edneas, cuotas y movimientos de precios. Debido a esto, el mismo widget puede mostrar tanto los resultados de los partidos como los mercados de apuestas con cuotas actuales.<\/p>\n<p>El principal valor de tal soluci\u00f3n radica en su universalidad y velocidad de implementaci\u00f3n. El desarrollador no necesita negociar con docenas de proveedores, escribir analizadores complejos y mantener un almacenamiento de datos. Es suficiente con conectar una API lista para usar, obtener una clave en el sistema y configurar el widget del cliente: elegir un deporte, torneos, mercados de apuestas necesarios y el idioma de la interfaz. Pronto, tales widgets podr\u00e1n mejorarse con tecnolog\u00edas WebSocket (para actualizaciones instant\u00e1neas en vivo) y IA (para sugerencias inteligentes, selecciones de partidos personalizadas y estad\u00edsticas predictivas), que tambi\u00e9n est\u00e1n planeadas en el ecosistema de api-sport.ru.<\/p>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-2\">C\u00f3mo elegir y conectar la API de eventos deportivos para el widget de inserci\u00f3n.<\/h2>\n<p>La clave para el funcionamiento estable del widget de inserci\u00f3n es la API de eventos deportivos correctamente elegida. Al seleccionar un proveedor, es importante considerar varios par\u00e1metros: la amplitud de cobertura por deportes y torneos, la profundidad de las estad\u00edsticas, la disponibilidad de datos en vivo, las cuotas de las casas de apuestas, as\u00ed como la calidad de la documentaci\u00f3n y la velocidad de respuesta del servidor. El servicio debe tener reglas transparentes respecto a los l\u00edmites de solicitudes, precios claros y soporte t\u00e9cnico listo para ayudar con la integraci\u00f3n. Todo esto es cr\u00edtico si planeas implementar un widget universal en docenas o cientos de sitios asociados.<\/p>\n<p>La API de la plataforma <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> est\u00e1 construida espec\u00edficamente para tales escenarios. A trav\u00e9s de una \u00fanica interfaz, obtienes acceso a partidos de f\u00fatbol, hockey, baloncesto, tenis, tenis de mesa, deportes electr\u00f3nicos y otras disciplinas. Las respuestas incluyen alineaciones de equipos, estad\u00edsticas detalladas (campo <code>estad\u00edsticasDelPartido<\/code>), eventos en vivo (<code>eventosEnVivo<\/code>), res\u00famenes en video (<code>momentosDestacados<\/code>) y cuotas de las casas de apuestas (<code>oddsBase<\/code>). Para comenzar, es suficiente registrarse y obtener una clave API en <a href=\"https:\/\/app.api-sport.ru\">tu cuenta personal en api-sport.ru<\/a>, despu\u00e9s de lo cual podr\u00e1s autorizar solicitudes con el encabezado <code>Autorizaci\u00f3n<\/code>.<\/p>\n<p>Conectar la API se reduce a hacer solicitudes HTTP a los puntos finales correspondientes. Por ejemplo, para obtener una lista de deportes disponibles y rutas b\u00e1sicas, es suficiente referirse al recurso. <code>\/v2\/deporte<\/code>. Este es un punto de partida conveniente para la configuraci\u00f3n din\u00e1mica de su widget: basado en la respuesta, puede construir listas desplegables para seleccionar un deporte, as\u00ed como generar autom\u00e1ticamente URLs para solicitudes posteriores de partidos y torneos.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\/\/ \u041f\u0440\u0438\u043c\u0435\u0440: \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u0438\u0434\u043e\u0432 \u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u0430\nfetch('https:\/\/api.api-sport.ru\/v2\/sport', {\n  headers: {\n    'Authorization': 'YOUR_API_KEY'\n  }\n})\n  .then(response =&gt; response.json())\n  .then(data =&gt; {\n    \/\/ data - \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0438\u0434\u043e\u0432 \u0441\u043f\u043e\u0440\u0442\u0430 \u0441 \u043f\u043e\u043b\u0435\u043c apiBasePath\n    console.log('\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432\u0438\u0434\u044b \u0441\u043f\u043e\u0440\u0442\u0430:', data);\n  })\n  .catch(console.error);<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-3\">C\u00f3mo obtener datos y estad\u00edsticas de partidos a trav\u00e9s de la API para el widget del sitio web.<\/h2>\n<p>Despu\u00e9s de conectar la API, la siguiente tarea es formar correctamente las solicitudes para obtener los datos que poblar\u00e1n el widget incrustado. El escenario b\u00e1sico: mostrar los partidos de hoy o pr\u00f3ximos para el deporte y torneos seleccionados. Para esto, la API de Eventos Deportivos utiliza el endpoint <code>\/v2\/{sportSlug}\/partidos<\/code>, donde <code>{sportSlug}<\/code> \u2014 el slug del deporte (por ejemplo, <code>f\u00fatbol<\/code>, <code>baloncesto<\/code>, <code>tenis<\/code>). Los par\u00e1metros de la solicitud permiten filtrar partidos por fecha (<code>fecha<\/code>), torneo (<code>torneo_id<\/code>), temporada (<code>temporada_id<\/code>), equipo (<code>equipo_id<\/code>) y estado (por ejemplo, solo <code>en progreso<\/code> para en vivo).<\/p>\n<p>En la respuesta, recibe no solo una lista de partidos, sino tambi\u00e9n entidades relacionadas: torneo, categor\u00eda (pa\u00eds\/regi\u00f3n), temporada, estadio, equipos, puntaje actual, as\u00ed como un bloque de estad\u00edsticas extendidas. <code>estad\u00edsticasDelPartido<\/code>. Para cada partido, puede solicitar eventos detallados a trav\u00e9s de <code>\/v2\/{sportSlug}\/matches\/{matchId}\/events<\/code> o obtener cuotas de las casas de apuestas directamente del objeto del partido en el array <code>oddsBase<\/code>. Estos datos le permiten construir widgets complejos: l\u00edneas de tiempo de eventos, comparaci\u00f3n de estad\u00edsticas de equipos, tablas con l\u00edneas y movimiento de cuotas.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de una solicitud simple que recupera partidos de f\u00fatbol para hoy con estad\u00edsticas b\u00e1sicas y cuotas. Tal c\u00f3digo puede ejecutarse tanto en el backend como en el script del cliente (siempre que la clave est\u00e9 debidamente protegida).<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\/\/ \u041f\u0440\u0438\u043c\u0435\u0440: \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0442\u0447\u0435\u0439 \u0444\u0443\u0442\u0431\u043e\u043b\u0430 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0441 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443\nconst apiKey = 'YOUR_API_KEY';\nconst today = new Date().toISOString().slice(0, 10); \/\/ YYYY-MM-DD\nfetch(`https:\/\/api.api-sport.ru\/v2\/football\/matches?date=${today}&amp;status=inprogress`, {\n  headers: {\n    'Authorization': apiKey\n  }\n})\n  .then(res =&gt; res.json())\n  .then(payload =&gt; {\n    const matches = payload.matches || &#x5B;];\n    matches.forEach(match =&gt; {\n      console.log(match.id, match.tournament.name, match.homeTeam.name, '-', match.awayTeam.name);\n      console.log('\u0421\u0447\u0451\u0442:', match.homeScore.current, ':', match.awayScore.current);\n      console.log('\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b 1X2:', match.oddsBase);\n    });\n  })\n  .catch(console.error);<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-4\">C\u00f3mo crear un widget de inserci\u00f3n universal para eventos deportivos para cualquier sitio web.<\/h2>\n<p>El widget incrustado universal deber\u00eda ser igualmente f\u00e1cil de integrar en cualquier sitio web, independientemente de su CMS, constructor o pila tecnol\u00f3gica. En la pr\u00e1ctica, esto significa una arquitectura de \u00abuna l\u00ednea de c\u00f3digo \u2014 un widget\u00bb. Por lo general, se implementa un archivo JavaScript separado, alojado en su servidor o CDN, y un peque\u00f1o fragmento HTML que el socio inserta en la p\u00e1gina. El script encuentra autom\u00e1ticamente el contenedor para el widget, lee la configuraci\u00f3n de los atributos <code>data-*<\/code> y carga datos de la API de eventos deportivos.<\/p>\n<p>Para que el widget sea verdaderamente universal, la configuraci\u00f3n debe describir todos los par\u00e1metros clave: tipo de deporte (<code>sportSlug<\/code>), lista de torneos o equipos, tipo de contenido (l\u00ednea de apuestas, resultados, centro en vivo), idioma de la interfaz, formato de cuotas. La fuente para estos par\u00e1metros es la API: a trav\u00e9s de endpoints <code>\/v2\/deporte<\/code> \u0438 <code>\/v2\/{sportSlug}\/categor\u00edas<\/code> puede proporcionar al administrador del sitio una interfaz conveniente para seleccionar los torneos necesarios, y el widget en s\u00ed recibir\u00e1 solo los partidos necesarios a trav\u00e9s de filtros (<code>torneo_id<\/code>, <code>equipo_id<\/code>Este enfoque permite utilizar el mismo c\u00f3digo de widget en un portal de noticias, en un blog y en el sitio de un corredor de apuestas, cambiando solo la configuraci\u00f3n.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de un fragmento t\u00edpico para un widget universal que el propietario del sitio agrega al c\u00f3digo de la p\u00e1gina. Dentro de la biblioteca principal, puedes usar tanto la sondeo HTTP como, en el futuro, suscripciones WebSocket para datos en vivo y la API del modelo AI api-sport.ru para consejos inteligentes y selecciones de partidos personalizadas.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\" data-no-translation=\"\">&amp;lt;!-- \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e embed\u2011\u0432\u0438\u0434\u0436\u0435\u0442\u0430 --&gt;\n&amp;lt;div id=&quot;sport-widget&quot;\n     data-sport=&quot;football&quot;\n     data-tournament-id=&quot;7,17&quot;   &gt;&amp;lt;\/div&gt;\n&amp;lt;script src=&quot;https:\/\/your-cdn.com\/sport-widget.js&quot; async&gt;&amp;lt;\/script&gt;\n&amp;lt;script&gt;\n  window.initSportWidget &amp;&amp; window.initSportWidget({\n    containerId: 'sport-widget',\n    sportSlug: 'football',\n    showOdds: true,\n    locale: 'ru',\n    theme: 'dark'\n  });\n&amp;lt;\/script&gt;<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-5\">C\u00f3mo personalizar los par\u00e1metros y la apariencia del widget de inserci\u00f3n para que coincida con el dise\u00f1o del sitio web.<\/h2>\n<p>Incluso el widget de inserci\u00f3n m\u00e1s informativo debe coincidir visualmente con el dise\u00f1o del sitio: paleta de colores, fuentes, m\u00e1rgenes, estilo de iconos. Una pr\u00e1ctica com\u00fan es mover la configuraci\u00f3n visual a la configuraci\u00f3n y\/o variables CSS. El widget puede aceptar par\u00e1metros de tema (<code>tema<\/code>), colores primarios (<code>colorPrimario<\/code>, <code>colorFondo<\/code>), radio de borde, as\u00ed como interruptores para mostrar bloques individuales: l\u00edneas de apuestas, estad\u00edsticas avanzadas, res\u00famenes en video. Los datos de la API (nombres de torneos, equipos, indicadores estad\u00edsticos) permanecen sin cambios, mientras que la forma en que se presentan se adapta a la marca del sitio asociado.<\/p>\n<p>La API de la plataforma <a href=\"http:\/\/api-sport.pro\/es\/\">api-sport.pro<\/a> ayuda a configurar de manera flexible la parte de contenido del widget. En las respuestas, muchas entidades contienen traducciones a trav\u00e9s del campo <code>traducciones<\/code>, lo que te permite cambiar el idioma del widget sin cambiar la l\u00f3gica. Los par\u00e1metros de consulta de partidos te permiten controlar la saturaci\u00f3n del bloque: desde una l\u00ednea de puntuaci\u00f3n concisa hasta grupos detallados de estad\u00edsticas del array <code>estad\u00edsticasDelPartido<\/code>, as\u00ed como conectar cuotas de <code>oddsBase<\/code>. Todo esto te permite crear diferentes versiones del mismo widget: uno \u00abligero\u00bb para la barra lateral y uno extendido para una p\u00e1gina de partido separada.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de c\u00f3mo establecer par\u00e1metros b\u00e1sicos de apariencia a trav\u00e9s de la configuraci\u00f3n y variables CSS. Este enfoque es conveniente para la integraci\u00f3n con cualquier sistema de dise\u00f1o y temas de CMS.<\/p>\n<pre class=\"brush: css; title: ; notranslate\" title=\"\" data-no-translation=\"\">\/* \u041f\u0440\u0438\u043c\u0435\u0440 CSS\u2011\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0442\u0435\u043c\u044b \u0432\u0438\u0434\u0436\u0435\u0442\u0430 *\/\n#sport-widget {\n  --widget-bg: #0b1020;\n  --widget-text: #ffffff;\n  --widget-accent: #ffcc00;\n  --widget-border-radius: 8px;\n}\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0442\u0435\u043c\u044b\nwindow.initSportWidget({\n  containerId: 'sport-widget',\n  sportSlug: 'basketball',\n  locale: 'ru',\n  showOdds: true,\n  theme: {\n    background: 'var(--widget-bg)',\n    text: 'var(--widget-text)',\n    accent: 'var(--widget-accent)',\n    borderRadius: 'var(--widget-border-radius)'\n  }\n});<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-6\">C\u00f3mo integrar el widget de inserci\u00f3n para eventos deportivos en CMS populares y creadores de sitios web.<\/h2>\n<p>El principal requisito para un widget de inserci\u00f3n universal es la facilidad de integraci\u00f3n en cualquier CMS o constructor de sitios web. En la mayor\u00eda de los sistemas (WordPress, 1C-Bitrix, Tilda, Webflow, etc.), basta con agregar un bloque HTML o un widget de \u00abInserci\u00f3n de C\u00f3digo\u00bb, donde el administrador copia un fragmento pre-preparado. El script debe ser independiente: sin dependencias de los marcos del sitio, con clases CSS neutrales y estilos aislados, para no entrar en conflicto con el dise\u00f1o existente.<\/p>\n<p>Para WordPress, puedes preparar tanto un fragmento HTML directo como un shortcode corto que generar\u00e1 el contenedor necesario y el script de inicializaci\u00f3n del widget. La l\u00f3gica de funcionamiento no cambia: tu script de frontend accede a la API de eventos deportivos y, si es necesario, a la API de las casas de apuestas para cuotas, y luego renderiza la interfaz dentro del contenedor especificado. Si tu widget se utiliza en m\u00faltiples sitios de clientes, tiene sentido almacenar la plantilla de inserci\u00f3n en una instrucci\u00f3n separada y actualizarla centralmente cuando se lancen nuevas funciones, como la conexi\u00f3n de m\u00f3dulos WebSocket o AI.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de c\u00f3digo que se puede insertar en el bloque HTML de cualquier p\u00e1gina o publicaci\u00f3n. Su estructura es lo m\u00e1s simple y clara posible para los administradores del sitio.<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\" data-no-translation=\"\">&amp;lt;!-- \u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0432 CMS --&gt;\n&amp;lt;div id=&quot;sport-widget&quot;\n     data-sport=&quot;ice-hockey&quot;\n     data-status=&quot;inprogress&quot;&gt;&amp;lt;\/div&gt;\n&amp;lt;script src=&quot;https:\/\/your-cdn.com\/sport-widget.js&quot; async&gt;&amp;lt;\/script&gt;\n&amp;lt;script&gt;\n  document.addEventListener('DOMContentLoaded', function () {\n    window.initSportWidget({\n      containerId: 'sport-widget',\n      sportSlug: 'ice-hockey',\n      locale: 'ru',\n      showOdds: true\n    });\n  });\n&amp;lt;\/script&gt;<\/pre>\n<\/div>\n<div class=\"universal_article\">\n<h2 id=\"contents-7\">Seguridad y limitaciones al usar la API de eventos deportivos en el widget de inserci\u00f3n.<\/h2>\n<p>Al trabajar con cualquier API externa, es importante considerar cuestiones de seguridad y cumplimiento de l\u00edmites de uso. La clave API emitida en el sistema <a href=\"https:\/\/app.api-sport.ru\">la cuenta personal api-sport.ru<\/a>, est\u00e1 vinculada a tu cuenta y tarifa, por lo que su filtraci\u00f3n puede llevar a un consumo no autorizado de l\u00edmites. Se recomienda mover las llamadas a la API de Eventos Deportivos y a la API de las casas de apuestas al lado del servidor y usar el widget de inserci\u00f3n como un cliente delgado que recibe datos ya agregados de tu backend. Este enfoque te permite ocultar la clave, implementar cach\u00e9 centralizado, cumplir con los l\u00edmites de solicitud y, si es necesario, implementar l\u00f3gica de negocio adicional.<\/p>\n<p>Adem\u00e1s de proteger la clave, es importante manejar errores y casos l\u00edmite correctamente: exceder l\u00edmites, indisponibilidad de puntos finales individuales, falta de datos para torneos o partidos espec\u00edficos. El widget debe degradarse de manera elegante: mostrar marcadores de posici\u00f3n, los \u00faltimos datos en cach\u00e9 o mensajes al usuario sin fallos cr\u00edticos en la interfaz. Tambi\u00e9n se debe prestar atenci\u00f3n a la carga en el cliente: durante actualizaciones intensivas de datos en vivo, es aconsejable utilizar suscripciones WebSocket (tan pronto como aparezcan en el ecosistema api-sport.ru) o sondeo optimizado con intervalos razonables para evitar agotar la cuota de solicitudes y sobrecargar el navegador del usuario.<\/p>\n<p>A continuaci\u00f3n se muestra un ejemplo de un servidor proxy simple en Node.js que redirige de manera segura las solicitudes del widget a la API de Eventos Deportivos. En un proyecto real, puedes mejorarlo con un sistema de autenticaci\u00f3n, cach\u00e9 y registro.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\" data-no-translation=\"\">\/\/ \u041f\u0440\u043e\u0441\u0442\u043e\u0439 Node.js-\u043f\u0440\u043e\u043a\u0441\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0438\u0434\u0436\u0435\u0442\u0430\nimport express from 'express';\nimport fetch from 'node-fetch';\nconst app = express();\nconst API_KEY = process.env.SPORT_API_KEY;\napp.get('\/api\/matches', async (req, res) =&gt; {\n  const { sport = 'football', date } = req.query;\n  const url = `https:\/\/api.api-sport.ru\/v2\/${sport}\/matches?date=${date}`;\n  try {\n    const response = await fetch(url, {\n      headers: { Authorization: API_KEY }\n    });\n    const data = await response.json();\n    res.json(data);\n  } catch (e) {\n    res.status(502).json({ error: 'Upstream API error' });\n  }\n});\napp.listen(3000);<\/pre>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Contents What is an embed widget for sports events and how does it work How to choose and connect the sports events API for the embed widget How to get match data and statistics through the API for the website widget How to create a universal embed widget for sports events for any website How to customize the parameters and appearance of the embed widget to match the website design How to embed the sports embed widget [\u2026]<\/p>","protected":false},"author":1,"featured_media":1259,"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\":\"\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 embed\u2011\u0432\u0438\u0434\u0436\u0435\u0442 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439?\",\"answer\":\"\u042d\u0442\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 JavaScript\u2011\u0432\u0438\u0434\u0436\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0447\u0438, \u0441\u0447\u0451\u0442, \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e API \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 API \u0431\u0443\u043a\u043c\u0435\u043a\u0435\u0440\u043e\u0432. \u041e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0438\u0434\u0436\u0435\u0442 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u0430\u0445, \u043c\u0435\u043d\u044f\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.\"},{\"question\":\"\u041a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432 embed\u2011\u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Sport Events API?\",\"answer\":\"\u0427\u0435\u0440\u0435\u0437 Sport Events API \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u0430\u0442\u0447\u0435\u0439, \u0441\u0442\u0430\u0442\u0443\u0441\u044b \u0438 \u0441\u0447\u0451\u0442, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043c\u0430\u0442\u0447\u0430 (matchStatistics), live\u2011\u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u0433\u043e\u043b\u044b, \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438, \u0437\u0430\u043c\u0435\u043d\u044b), \u0441\u043e\u0441\u0442\u0430\u0432\u044b \u043a\u043e\u043c\u0430\u043d\u0434, \u0442\u0443\u0440\u043d\u0438\u0440\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0432\u0438\u0434\u0435\u043e\u0445\u0430\u0439\u043b\u0430\u0439\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0431\u0443\u043a\u043c\u0435\u043a\u0435\u0440\u043e\u0432 \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0440\u044b\u043d\u043a\u0430\u043c \u0441\u0442\u0430\u0432\u043e\u043a.\"},{\"question\":\"\u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c API\u2011\u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0441 api-sport.ru?\",\"answer\":\"\u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 api-sport.ru \u0438 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c API\u2011\u043a\u043b\u044e\u0447. \u041e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 Authorization \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u043a \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442\u0430\u043c \u0432\u0438\u0434\u0430 \/v2\/{sportSlug}\/matches, \/v2\/{sportSlug}\/categories \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c Sport Events API.\"},{\"question\":\"\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d embed\u2011\u0432\u0438\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0430\u0439\u0442\u043e\u0432 \u0438 CMS?\",\"answer\":\"\u0414\u0430. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 embed\u2011\u0432\u0438\u0434\u0436\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c HTML\u2011\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u043b\u044e\u0431\u0443\u044e CMS \u0438\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u0430\u0439\u0442\u043e\u0432. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 (\u0432\u0438\u0434 \u0441\u043f\u043e\u0440\u0442\u0430, \u0442\u0443\u0440\u043d\u0438\u0440\u044b, \u044f\u0437\u044b\u043a, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438) \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 data\u2011\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.\"},{\"question\":\"\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c API\u2011\u043a\u043b\u044e\u0447 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u0441\u0430\u0439\u0442\u0430\u0445?\",\"answer\":\"\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a Sport Events API \u0447\u0435\u0440\u0435\u0437 \u0432\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440\u2011\u043f\u0440\u043e\u043a\u0441\u0438. \u0412\u0438\u0434\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u0430, \u0430 \u0442\u043e\u0442 \u0443\u0436\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 api-sport.ru, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a Authorization, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043b\u0438\u043c\u0438\u0442\u043e\u0432.\"},{\"question\":\"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u0438 embed\u2011\u0432\u0438\u0434\u0436\u0435\u0442 live\u2011\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0443\u043a\u043c\u0435\u043a\u0435\u0440\u043e\u0432?\",\"answer\":\"\u0414\u0430, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Sport Events API \u0432\u0438\u0434\u0436\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c live\u2011\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043c\u0430\u0442\u0447\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 oddsBase. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebSocket\u2011\u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 \u0438 AI\u2011\u043c\u043e\u0434\u0443\u043b\u0438 api-sport.ru \u0434\u043b\u044f \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0438 \u0443\u043c\u043d\u044b\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439.\"}]","footnotes":""},"categories":[1],"tags":[],"class_list":["post-1260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"yoast_head":"<title>How to create a universal sports embed widget \u2014 API api-sport.ru<\/title>\n<meta name=\"description\" content=\"Step-by-step guide to creating a universal embed widget for sports events on a website using the API for matches and bookmaker odds 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-incrustacion-universal-para-cualquier-sitio-web\/\" \/>\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 universal sports embed widget \u2014 API api-sport.ru\" \/>\n<meta property=\"og:description\" content=\"Step-by-step guide to creating a universal embed widget for sports events on a website using the API for matches and bookmaker odds api-sport.ru.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-incrustacion-universal-para-cualquier-sitio-web\/\" \/>\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-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1408\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\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=\"11 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-universal-embed-widget-for-any-website\/\",\"url\":\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/\",\"name\":\"How to create a universal sports embed widget \u2014 API api-sport.ru\",\"isPartOf\":{\"@id\":\"https:\/\/api-sport.pro\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg\",\"datePublished\":\"2025-12-17T17:08:01+00:00\",\"author\":{\"@id\":\"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601\"},\"description\":\"Step-by-step guide to creating a universal embed widget for sports events on a website using the API for matches and bookmaker odds api-sport.ru.\",\"breadcrumb\":{\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#primaryimage\",\"url\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg\",\"contentUrl\":\"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg\",\"width\":1408,\"height\":768,\"caption\":\"\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 embed-\u0432\u0438\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430?\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#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 universal embed widget for any website?\"}]},{\"@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 incrustaci\u00f3n deportiva universal \u2014 API api-sport.ru","description":"Gu\u00eda paso a paso para crear un widget de incrustaci\u00f3n universal para eventos deportivos en un sitio web utilizando la API para partidos y la API de cuotas de bookmakers 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-incrustacion-universal-para-cualquier-sitio-web\/","og_locale":"es_ES","og_type":"article","og_title":"How to create a universal sports embed widget \u2014 API api-sport.ru","og_description":"Step-by-step guide to creating a universal embed widget for sports events on a website using the API for matches and bookmaker odds api-sport.ru.","og_url":"https:\/\/api-sport.pro\/es\/como-crear-un-widget-de-incrustacion-universal-para-cualquier-sitio-web\/","og_site_name":"Sports Events API","article_published_time":"2025-12-17T17:08:01+00:00","og_image":[{"width":1408,"height":768,"url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Tiempo de lectura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/","url":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/","name":"C\u00f3mo crear un widget de incrustaci\u00f3n deportiva universal \u2014 API api-sport.ru","isPartOf":{"@id":"https:\/\/api-sport.pro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#primaryimage"},"image":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#primaryimage"},"thumbnailUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg","datePublished":"2025-12-17T17:08:01+00:00","author":{"@id":"https:\/\/api-sport.pro\/#\/schema\/person\/bc93f449b3753a5f254264da266fb601"},"description":"Gu\u00eda paso a paso para crear un widget de incrustaci\u00f3n universal para eventos deportivos en un sitio web utilizando la API para partidos y la API de cuotas de bookmakers api-sport.ru.","breadcrumb":{"@id":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#primaryimage","url":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg","contentUrl":"https:\/\/api-sport.pro\/wp-content\/uploads\/2025\/11\/kak-sdelat-universalnyi-embed-vidzhet-dlya-lyubogo-saita_posts.jpg","width":1408,"height":768,"caption":"\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 embed-\u0432\u0438\u0434\u0436\u0435\u0442 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430?"},{"@type":"BreadcrumbList","@id":"https:\/\/api-sport.pro\/how-to-create-a-universal-embed-widget-for-any-website\/#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 universal embed widget for any website?"}]},{"@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\/1260","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=1260"}],"version-history":[{"count":3,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1260\/revisions"}],"predecessor-version":[{"id":1677,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/posts\/1260\/revisions\/1677"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media\/1259"}],"wp:attachment":[{"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/media?parent=1260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/categories?post=1260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/api-sport.pro\/es\/wp-json\/wp\/v2\/tags?post=1260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}