Você precisa de dados esportivos em seu aplicativo PHP agora, não na próxima sprint. Ao final deste guia, você listará todos os esportes suportados pela API SofaScore - Ao Vivo, buscará entidades como clubes e seleções nacionais, e buscará bandeiras de países—usando código PHP pronto para produção que você pode enviar esta semana via Zyla API Hub.
O que você pode construir com a API SofaScore - Ao Vivo
A API SofaScore - Ao Vivo no Zyla API Hub fornece metadados esportivos que você pode integrar rapidamente:
- Obtenha todos os esportes suportados (por exemplo, Futebol, Tênis, Basquete).
- Pesquise entre as entidades SofaScore (times, jogadores, competições e mais) por string de consulta.
- Busque bandeiras de países como bytes de imagem para emblemas de UI e marcadores de país da liga.
Esta API é adequada para placares, centros de partidas, ferramentas de apostas, painéis de scouting, ou qualquer produto esportivo que precise de metadados e imagens limpas. Está hospedada atrás do Zyla API Hub, então você usa uma chave e um modelo de assinatura em todas as APIs que adota.
Começando no Zyla API Hub
Para chamar a API SofaScore - Ao Vivo:
- Abra a listagem: API SofaScore - Ao Vivo no Zyla.
- Clique em Inscrever-se (ou Começar Teste Grátis quando disponível). O Zyla usa um modelo de assinatura + cota, não pagamento por chamada. Normalmente, usuários de primeira viagem podem acessar um teste de 7 dias ou 50 solicitações para sua primeira API—verifique a página da API para opções de acesso e preços atuais.
- Copie sua chave de API do seu painel.
Todas as solicitações requerem o cabeçalho Authorization: Bearer YOUR_API_KEY. Não passe nenhuma chave de acesso de origem—use apenas a chave Zyla. Você pode adicionar mais APIs esportivas depois com a mesma conta e faturamento no Zyla API Hub.
Endpoints que você usará
Abaixo estão os endpoints documentados expostos através do Zyla para esta API. Use apenas as URLs, métodos e parâmetros exatamente como listados.
1) Obter todos os esportes
Retorna uma lista de todos os esportes disponíveis.
- Método: GET
- URL: https://zylalabs.com/api/12787/sofascore-live-api/25080/get-all-sports
- Parâmetros: nenhum
- 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());
}
// Exemplo: construir um menu de seleção de esportes
foreach ($data as $sport) {
printf("<option value='%s'>%s</option>
",
h htmlspecialchars($sport["slug"], ENT_QUOTES),
h htmlspecialchars($sport["name"], ENT_QUOTES)
);
}
JSON (exemplo 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 você realmente usará:
- id: Identificador inteiro para o esporte. Útil para mapeamento e filtragem.
- name: Rótulo amigável (renderize isso em sua UI).
- slug: Chave única segura para URL (use em rotas, chaves de cache e buscas).
Dicas de implementação:
- Cache esta resposta no lado do servidor por pelo menos algumas horas. O conjunto de esportes muda com pouca frequência em comparação com os placares ao vivo.
- Trate slugs como identificadores estáveis para roteamento de UI. Mostre nomes para os usuários; armazene slugs em URLs.
2) Pesquisar todas as entidades
Pesquise todas as entidades SofaScore por string de consulta (times, competições, jogadores, etc.).
- Método: GET
- URL: https://zylalabs.com/api/12787/sofascore-live-api/25082/search-all-entities
- Parâmetros:
- q (string, obrigatório): 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"
Os detalhes da resposta não estão totalmente documentados aqui, mas ela retorna entidades correspondentes à sua consulta com metadados como id, name, slug, imagens e dados de país onde disponíveis. Analise apenas os campos que sua UI precisa e registre atributos desconhecidos para inspeção posterior.
3) Obter bandeira do país
Retorna os bytes da imagem da bandeira do país.
- Método: GET
- URL: https://zylalabs.com/api/12787/sofascore-live-api/31197/get-country-flag
- Parâmetros:
- country_code (string, obrigatório): 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 (exemplo 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:
- A resposta é bytes de imagem (conteúdo semelhante a base64 no exemplo). Armazene e sirva como bytes PNG ou faça cache como um arquivo. Se seu tempo de execução espera binário, certifique-se de não codificar acidentalmente duas vezes.
- Use um CDN ou cabeçalhos de cache HTTP em sua borda para evitar buscar as mesmas bandeiras novamente.
Exemplo de JavaScript (buscando esportes)
Use isso quando precisar hidratar uma página de configurações do lado do cliente ou pré-renderizar listas de esportes em Node.js. Para produção, chame do seu servidor para evitar expor sua chave ao 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();
// Exemplo: encontrar Futebol
const football = data.find(s => s.slug === "football");
console.log(football);
return data;
}
getAllSports().catch(console.error);
Padrões de integração do mundo real em PHP
Cache de metadados imutáveis
Enumerações de esportes e bandeiras não mudam com frequência. Cache “Obter todos os esportes” por 6–24 horas e bandeiras de países indefinidamente com um nome de arquivo versionado (por exemplo, flags/EN.png). Isso reduz a latência e o uso de cotas.
Manipule bytes de imagem com segurança
Para o endpoint da bandeira do país, escreva a resposta bruta no armazenamento como binário. Em 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);
Sirva esse arquivo via seu CDN ou caminho de ativos públicos. Se precisar de redimensionamento dinâmico, processe em vários tamanhos na primeira solicitação e faça cache.
Ergonomia de pesquisa
Para “Pesquisar todas as entidades”, debalanceie a entrada do usuário (por exemplo, 250–400ms), coloque a consulta em minúsculas e faça cache dos resultados para equipes populares. Como o endpoint aceita apenas q, mantenha os filtros da sua UI do lado do cliente e re-consulte quando necessário. Sempre sanitize a saída, pois os nomes podem incluir caracteres especiais.
MCP: chame esta API de um agente de IA
Cada API Zyla também pode ser chamada de agentes de IA que suportam o Protocolo de Contexto do Modelo (MCP), incluindo Claude Code, Cursor, Windsurf e outros clientes compatíveis com MCP. Direcione sua ferramenta para:
Passe sua chave como apikey na URL do MCP (por exemplo, https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY). A partir daí, seu agente pode invocar os mesmos endpoints da API SofaScore - Ao Vivo pelo nome através da interface MCP. Isso é útil para chatops internos, consoles de administração ou prototipagem rápida de buscas esportivas.
Casos de uso que você pode enviar esta semana
- Widget seletor de esportes: Hidratar um dropdown de esportes usando Obter todos os esportes e direcionar usuários para páginas específicas de esportes por slug.
- Barra de pesquisa de times: Use Pesquisar todas as entidades para autocompletar clubes como “Real Madrid” e pular diretamente para seus painéis internos de times usando ids/slugs retornados.
- Tabelas com bandeiras de países: Anexe bandeiras de países a classificações, listas de jogadores e cartões de competições buscando e fazendo cache dos bytes da imagem da bandeira uma vez por código de país.
Considerações operacionais
- Autenticação: Sempre inclua Authorization: Bearer YOUR_API_KEY.
- Timeouts: Defina timeouts do cliente (10–20s) e re-tente GETs idempotentes em falhas transitórias.
- Estratégia de cache:
- Obter todos os esportes: cache por horas; invalide na implantação ou trabalho agendado.
- Bandeiras de países: cache indefinidamente; armazene arquivos em disco ou armazenamento de objetos.
- Resultados de pesquisa: cache por q normalizado para um TTL curto (por exemplo, minutos).
- Cotas e faturamento: O Zyla usa assinatura + cota. Normalmente, usuários de primeira viagem recebem um teste de 7 dias ou 50 solicitações para sua primeira API—confirme os termos atuais na página da API.
- Tratamento de erros: Inspecione códigos de status HTTP. Para 4xx, verifique parâmetros; para 5xx, implemente backoff e mostre diagnósticos nos logs.
Referências de link
- Página da API: API SofaScore - Ao Vivo no Zyla
- Hub Zyla: Zyla API Hub
FAQ
A API SofaScore - Ao Vivo requer algum parâmetro para “Obter todos os esportes”?
Não. O endpoint não aceita parâmetros e só precisa do cabeçalho Authorization.
Qual é a maneira correta de autenticar?
Use o cabeçalho Authorization: Bearer YOUR_API_KEY em cada solicitação para https://zylalabs.com/api/… endpoints.
Posso exibir bandeiras de países diretamente no navegador?
Sim. Busque uma vez em seu servidor usando Obter bandeira do país, escreva bytes em um arquivo PNG e sirva-o como um ativo estático ou via CDN. Evite buscar do navegador para manter sua chave privada.
Como faço para pesquisar um time ou competição específica?
Chame Pesquisar todas as entidades com o parâmetro q. Por exemplo, q=real madrid. Analise a resposta para extrair id, name, slug e quaisquer atributos de imagem ou país que você precisar.
Há um plano gratuito?
Não há plano gratuito. O Zyla usa um modelo de assinatura + cota. Para usuários de primeira viagem, você normalmente recebe um teste de 7 dias ou 50 solicitações para sua primeira API; verifique a página da API para opções de acesso e preços atuais.
Obtenha sua chave e envie
Crie sua conta Zyla, inscreva-se na API SofaScore - Ao Vivo e conecte o cabeçalho Authorization ao código PHP acima. Você pode estar renderizando esportes e bandeiras de países hoje. Registre-se para obter sua chave de API e começar a integrar.