Necesitas datos deportivos en tu aplicación PHP ahora, no en el próximo sprint. Al final de esta guía, listarás todos los deportes soportados de la API en Vivo de SofaScore, buscarás entidades como clubes y selecciones nacionales, y obtendrás banderas de países, utilizando código PHP listo para producción que puedes enviar esta semana a través de Zyla API Hub.
Lo que puedes construir con la API en Vivo de SofaScore
La API en Vivo de SofaScore en Zyla API Hub proporciona metadatos deportivos que puedes integrar rápidamente:
- Obtén todos los deportes soportados (por ejemplo, Fútbol, Tenis, Baloncesto).
- Busca entre las entidades de SofaScore (equipos, jugadores, competiciones y más) mediante una cadena de consulta.
- Obtén banderas de países como bytes de imagen para insignias de UI y marcadores de países de ligas.
Esta API es adecuada para marcadores, centros de partidos, herramientas de apuestas, paneles de exploración, o cualquier producto deportivo que necesite metadatos e imágenes limpias. Está alojada detrás de Zyla API Hub, por lo que usas una clave y un modelo de suscripción en todas las APIs que adoptes.
Comenzando en Zyla API Hub
Para llamar a la API en Vivo de SofaScore:
- Abre la lista: API en Vivo de SofaScore en Zyla.
- Haz clic en Suscribirse (o Comenzar Prueba Gratuita cuando esté disponible). Zyla utiliza un modelo de suscripción + cuota, no pago por llamada. Típicamente, los usuarios primerizos pueden acceder a una prueba de 7 días o 50 solicitudes para su primera API; consulta la página de la API para las opciones de acceso y precios actuales.
- Copia tu clave API desde tu panel de control.
Todas las solicitudes requieren el encabezado Authorization: Bearer YOUR_API_KEY. No pases ninguna clave de acceso de origen; usa solo la clave de Zyla. Puedes agregar más APIs deportivas más tarde con la misma cuenta y facturación en Zyla API Hub.
Puntos finales que usarás
A continuación se presentan los puntos finales documentados expuestos a través de Zyla para esta API. Usa solo las URL, métodos y parámetros exactamente como se enumeran.
1) Obtener todos los deportes
Devuelve una lista de todos los deportes disponibles.
- Método: GET
- URL: https://zylalabs.com/api/12787/sofascore-live-api/25080/get-all-sports
- Parámetros: ninguno
- Auth: Authorization: Bearer YOUR_API_KEY
cURL
curl -s -X GET "https://zylalabs.com/api/12787/sofascore-live-api/25080/get-all-sports" \
-H "Authorization: Bearer YOUR_API_KEY"
PHP (curl_init)
<?php
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "https://zylalabs.com/api/12787/sofascore-live-api/25080/get-all-sports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer YOUR_API_KEY"
],
CURLOPT_TIMEOUT => 15
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false || $httpCode >= 400) {
throw new RuntimeException("Request failed: HTTP $httpCode - ".curl_error($ch));
}
curl_close($ch);
data = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new RuntimeException("Invalid JSON: ".json_last_error_msg());
}
// Ejemplo: construir un menú desplegable de deportes
foreach ($data as $sport) {
printf("<option value='%s'>%s</option>\n",
htmlspecialchars($sport["slug"], ENT_QUOTES),
htmlspecialchars($sport["name"], ENT_QUOTES)
);
}
JSON (ejemplo real)
[
{
"id": 1,
"name": "Football",
"slug": "football"
},
{
"id": 5,
"name": "Tennis",
"slug": "tennis"
},
{
"id": 2,
"name": "Basketball",
"slug": "basketball"
},
{
"id": 64,
"name": "Baseball",
"slug": "baseball"
},
{
"id": 23,
"name": "Volleyball",
"slug": "volleyball"
},
{
"id": 63,
"name": "American football",
"slug": "american-football"
},
{
"id": 6,
"name": "Handball",
"slug": "handball"
},
{
"id": 20,
"name": "Table tennis",
"slug": "table-tennis"
},
{
"id": 4,
"name": "Ice hockey",
"slug": "ice-hockey"
},
{
"id": 22,
"name": "Darts",
"slug": "darts"
},
{
"id": 72,
"name": "E-sports",
"slug": "esports"
},
{
"id": 11,
"name": "Motorsport",
"slug": "motorsport"
},
{
"id": 65,
"name": "Cycling",
"slug": "cycling"
},
{
"id": 62,
"name": "Cricket",…
Notas de campo que realmente usarás:
- id: Identificador entero para el deporte. Útil para mapeo y filtrado.
- name: Etiqueta amigable para humanos (muestra esto en tu UI).
- slug: Clave única segura para URL (útil en rutas, claves de caché y búsquedas).
Consejos de implementación:
- Cachea esta respuesta del lado del servidor durante al menos unas horas. El conjunto de deportes cambia infrecuentemente en comparación con los puntajes en vivo.
- Trata los slugs como identificadores estables para el enrutamiento de UI. Muestra nombres a los usuarios; almacena slugs en URLs.
2) Buscar todas las entidades
Busca todas las entidades de SofaScore mediante una cadena de consulta (equipos, competiciones, jugadores, etc.).
- Método: GET
- URL: https://zylalabs.com/api/12787/sofascore-live-api/25082/search-all-entities
- Parámetros:
- q (string, requerido): real madrid
cURL
curl -s -X GET "https://zylalabs.com/api/12787/sofascore-live-api/25082/search-all-entities?q=real+madrid" \
-H "Authorization: Bearer YOUR_API_KEY"
Los detalles de la respuesta no están completamente documentados aquí, pero devuelve entidades que coinciden con tu consulta con metadatos como id, name, slug, imágenes y datos de país donde estén disponibles. Analiza solo los campos que tu UI necesita y registra atributos desconocidos para una inspección posterior.
3) Obtener bandera del país
Devuelve los bytes de imagen de la bandera del país.
- Método: GET
- URL: https://zylalabs.com/api/12787/sofascore-live-api/31197/get-country-flag
- Parámetros:
- country_code (string, requerido): EN
cURL
curl -s -X GET "https://zylalabs.com/api/12787/sofascore-live-api/31197/get-country-flag?country_code=EN" \
-H "Authorization: Bearer YOUR_API_KEY"
JSON (ejemplo real)
iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAMAAAAL34HQAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAACxMAAAsTAQCanBgAAAELUExURUdwTN/f37QVJd7e3t3d3d/f39/f39/f39/f397e3t7e3t3d3d3d3d3d3d/f397e3t/f39/f39zc3N7e3rQUJN/f37MUJLUTJd/f39/f3+Hh4d3d3bMUJLUVJbQUJLUVJbUUJLcQKOHh4d3d3bQVJLQUJN/f397e3rQVJbIWI7ITI7QUJLcYKM4RJP///97e3rQUJPv7++Li4v39/ebm5uDg4Orq6vDw8OTk5Pf397sTJPn5+bsUJPPz8/Ly8u7u7rcUJMcSJOzs7PHx8cQSJO/v77gUJLgTJOjo6MoSJMETJL8TJLUUJL4TJOvr680RJMsSJMsRJMQTJL0TJO3t7cwRJLYUJM0SJLwUJL4UJDN2488AAAAsdFJOUwB/38+AMBAg79+fcJBAv3CfYKC/YICfj79vr0AwcGCvIF+Pz8+vsKBQULAgUCRTtgAABilJREFUeNrtnGdX40YUhoWrhA1uGFj6tmQ34VrFKl6vzdqYDrtJNvX//5JMkSU3YWk0kiYn3A/CB3zMc+776s54NHMlKV6cfThp756+zeVUErlcq7XbPj48kjKLYqOel9WAkLf3GsXUkcqVA7mDIwiL/FE+qKSItrWndKZBIR6vrz+TuL6excKhbG6lwyR3/ND/eZiM7r6dz8bdaHL/tzPzJmUz4ZyVKtvePzMtu2fAeUCA0bNvde/N+UaCUBteorp2H0gEYpHo210/ZeVkXL7pMxkwjeexUGgDjywBMA/KufKZwmARMj0ZME++bg/mIwwWip7lgm1wBHtFocyxBsCGhVLmgim8zF+md585r15ULB8szyVhrn6WBhAPywfb4JWqJU8xYSEwan6lzMNV5iUAHywAelfKlTg34B5NlQb8sKZKvikxC5hfkyomLJQwM46QRTJPcDTgjeU6TGEawF+TXP8OwB8L4Ip8OIPBNoiAA0gGCy5NpkpBqPQ+JIXlCrnBQqVBclgsXITKMSBJLDCciFyEqhuGKg5WVC5C9RUgaSyArxG4XhEFIQ0sIDPX16GqaGhfccCiOoaoq2Vc2/WwVHGxwNBDjUMlJWRl4IRF60R+3biN5wxmeKr4WNDH…
Notas de campo:
- La respuesta son bytes de imagen (contenido similar a base64 en el ejemplo). Almacena y sirve como bytes PNG o cachea como un archivo. Si tu entorno de ejecución espera binario, asegúrate de no codificar accidentalmente dos veces.
- Usa un CDN o encabezados de caché HTTP en tu borde para evitar volver a obtener las mismas banderas.
Ejemplo de JavaScript (obteniendo deportes)
Usa esto cuando necesites hidratar una página de configuración del lado del cliente o pre-renderizar listas de deportes en Node.js. Para producción, llama desde tu servidor para evitar exponer tu clave al navegador.
async function getAllSports() {
const res = await fetch("https://zylalabs.com/api/12787/sofascore-live-api/25080/get-all-sports", {
method: "GET",
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
const data = await res.json();
// Ejemplo: encontrar Fútbol
const football = data.find(s => s.slug === "football");
console.log(football);
return data;
}
getAllSports().catch(console.error);
Patrones de integración en el mundo real en PHP
Cachear metadatos inmutables
Las enumeraciones de deportes y banderas no cambian a menudo. Cachea “Obtener todos los deportes” durante 6–24 horas y las banderas de países indefinidamente con un nombre de archivo versionado (por ejemplo, flags/EN.png). Esto reduce la latencia y el uso de cuotas.
Manejar bytes de imagen de forma segura
Para el punto final de la bandera del país, escribe la respuesta en bruto en el almacenamiento como binario. En PHP:
<?php
$ch = curl_init("https://zylalabs.com/api/12787/sofascore-live-api/31197/get-country-flag?country_code=EN");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
CURLOPT_TIMEOUT => 15
]);
$bytes = curl_exec($ch);
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http >= 400 || $bytes === false) {
throw new RuntimeException("Flag fetch failed: HTTP $http");
}
file_put_contents(__DIR__ . "/flags/EN.png", $bytes);
Sirve ese archivo a través de tu CDN o ruta de activos públicos. Si necesitas redimensionamiento dinámico, procesa en múltiples tamaños en la primera solicitud y cachea.
Ergonomía de búsqueda
Para “Buscar todas las entidades”, debouncea la entrada del usuario (por ejemplo, 250–400ms), convierte la consulta a minúsculas, y cachea resultados para equipos populares. Dado que el punto final acepta solo q, mantén los filtros de tu UI del lado del cliente y vuelve a consultar cuando sea necesario. Siempre sanitiza la salida ya que los nombres pueden incluir caracteres especiales.
MCP: llama a esta API desde un agente de IA
Cada API de Zyla también es llamable desde agentes de IA que soportan el Protocolo de Contexto de Modelo (MCP), incluyendo Claude Code, Cursor, Windsurf, y otros clientes compatibles con MCP. Dirige tu herramienta a:
Pasa tu clave como apikey en la URL de MCP (por ejemplo, https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY). Desde allí, tu agente puede invocar los mismos puntos finales de la API en Vivo de SofaScore por nombre a través de la interfaz MCP. Esto es útil para chatops internos, consolas de administración, o prototipos rápidos de búsquedas deportivas.
Casos de uso que puedes enviar esta semana
- Widget selector de deportes: Hidrata un menú desplegable de deportes usando Obtener todos los deportes y dirige a los usuarios a páginas específicas de deportes por slug.
- Barra de búsqueda de equipos: Usa Buscar todas las entidades para autocompletar clubes como “Real Madrid” y salta directamente a tus paneles internos de equipos usando los ids/slugs devueltos.
- Tablas con insignias de país: Adjunta banderas de países a clasificaciones, listas de jugadores y tarjetas de competiciones obteniendo y cacheando los bytes de imagen de la bandera una vez por código de país.
Consideraciones operativas
- Autenticación: Siempre incluye Authorization: Bearer YOUR_API_KEY.
- Timeouts: Establece timeouts del cliente (10–20s) y vuelve a intentar GETs idempotentes en fallos transitorios.
- Estrategia de caché:
- Obtener todos los deportes: cachear durante horas; invalidar en despliegue o trabajo programado.
- Bandera de países: cachear indefinidamente; almacenar archivos en disco o almacenamiento de objetos.
- Resultados de búsqueda: cachear por q normalizado para un TTL corto (por ejemplo, minutos).
- Cuotas y facturación: Zyla utiliza suscripción + cuota. Típicamente, los usuarios primerizos obtienen una prueba de 7 días o 50 solicitudes para su primera API; confirma los términos actuales en la página de la API.
- Manejo de errores: Inspecciona los códigos de estado HTTP. Para 4xx, verifica parámetros; para 5xx, implementa retroceso y muestra diagnósticos en los registros.
Referencias de enlace
- Página de API: API en Vivo de SofaScore en Zyla
- Hub de Zyla: Zyla API Hub
FAQ
¿La API en Vivo de SofaScore requiere algún parámetro para “Obtener todos los deportes”?
No. El punto final no toma parámetros y solo necesita el encabezado de autorización.
¿Cuál es la forma correcta de autenticar?
Usa el encabezado Authorization: Bearer YOUR_API_KEY en cada solicitud a los puntos finales de https://zylalabs.com/api/… .
¿Puedo mostrar banderas de países directamente en el navegador?
Sí. Obtén una vez en tu servidor usando Obtener bandera del país, escribe bytes en un archivo PNG y sírvelo como un activo estático o a través de un CDN. Evita obtener desde el navegador para mantener tu clave privada.
¿Cómo busco un equipo o competición específica?
Llama a Buscar todas las entidades con el parámetro q. Por ejemplo, q=real madrid. Analiza la respuesta para extraer id, name, slug y cualquier atributo de imagen o país que necesites.
¿Hay un plan gratuito?
No hay un plan gratuito. Zyla utiliza un modelo de suscripción + cuota. Para los usuarios primerizos, típicamente obtienes una prueba de 7 días o 50 solicitudes para tu primera API; consulta la página de la API para las opciones de acceso y precios actuales.
Obtén tu clave y envía
Crea tu cuenta de Zyla, suscríbete a la API en Vivo de SofaScore, y conecta el encabezado de autorización en el código PHP anterior. Puedes estar renderizando deportes y banderas de países hoy. Regístrate para obtener tu clave API y comenzar a integrar.