Você precisa de dados esportivos ao vivo integrados ao seu aplicativo Python esta semana, sem lutar com múltiplos provedores, chaves ou documentos. Ao final deste guia, você buscará entidades do FlashScore (times, jogadores, torneios), listará os esportes suportados e buscará países/competições para um esporte usando a FlashScore - Live API no Zyla API Hub—completo com cURL e código Python que você pode copiar e colar na produção.
O que você pode construir com a FlashScore - Live API
A FlashScore - Live API fornece acesso programático ao diretório esportivo estruturado da FlashScore: busque entidades por nome, enumere os esportes suportados e liste países/competições para um esporte. Isso é ideal para:
- Fluxos de integração onde os usuários escolhem um time ou competição e você armazena seu ID canônico.
- Autocomplete para times ou torneios em um aplicativo de apostas, aplicativo de pontuação ou CMS.
- Recursos de descoberta (navegue pelos esportes e depois refine para países/competições).
Porque está no Zyla API Hub, você usa uma conta, uma chave API e um modelo de assinatura + cota em todas as suas integrações—sem preços por chamada.
Começando no Zyla API Hub
Abra a listagem para a API aqui: FlashScore - Live API. Clique em Inscrever-se (ou Começar Teste Grátis quando disponível) para obter sua chave API. Esta API usa assinatura + cota (não pagamento por chamada). A primeira API oferece um teste de 7 dias ou 50 solicitações. Nenhum Plano Gratuito está disponível. Para opções de acesso e cotas atuais, sempre confirme na página da API antes de implantar.
Todas as solicitações requerem um cabeçalho de Autorização:
- Autorização: Bearer SUA_CHAVE_API
Endpoints que você usará
Abaixo estão os caminhos disponíveis nesta listagem, exatamente como documentado no Zyla API Hub. Não adicione parâmetros de corpo—estes são simples GETs com strings de consulta onde especificado.
1) Buscar
Busque entidades do FlashScore (times, jogadores, torneios) por string de consulta.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23852/search
- Params:
- q (string, obrigatório): o termo de busca (exemplo: real madrid)
cURL
curl -s -X GET "https://zylalabs.com/api/12518/flashscore-live-api/23852/search?q=real+madrid" \
-H "Authorization: Bearer SUA_CHAVE_API"
Resposta JSON
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…
O que usar em seu aplicativo:
- id: o identificador canônico do FlashScore para a entidade que você armazenará.
- type: tipo de entidade (por exemplo, time) para filtrar as opções da UI.
- name, gender, country_name: metadados apresentáveis para dropdowns e rótulos.
- sport.id e sport.name: restringir fluxos subsequentes (por exemplo, listas de países por esporte).
- image_path e country_image_path: ícones/brasões opcionais em sua UI.
2) Obter esportes
Retorna uma lista de todos os esportes disponíveis suportados.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports
- Params: nenhum documentado.
cURL
A resposta é uma lista de objetos de esportes incluindo sport_id, sport_url e name (por exemplo, Futebol, Tênis, Basquete). Use sport_id ao chamar Obter países.
3) Obter países
Retorna uma lista de países para um esporte específico.
- Método: GET
- URL: https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries
- Params:
- sport_id (string, obrigatório): exemplo 2
cURL
A resposta inclui country_id, country_url e name para o esporte especificado. Para Tênis (sport_id 2), as entradas incluem ATP/WTA singles e doubles, torneios de exibição e mais. Use esses para preencher filtros de competição ou construir navegação para torneios dentro de um esporte.
Python: buscar e normalizar entidades
O trecho abaixo chama o caminho de Busca na mesma listagem, lê campos principais e normaliza resultados para armazenamento e exibição na UI. Ele usa o cabeçalho de Autorização documentado e o parâmetro de consulta real q=real+madrid.
Python
import os
import sys
import requests
API_KEY = os.getenv("ZYLA_API_KEY", "SUA_CHAVE_API")
BASE_URL = "https://zylalabs.com/api/12518/flashscore-live-api"
def search_entities(query: str):
url = f"{BASE_URL}/23852/search"
params = {"q": query}
headers = {"Authorization": f"Bearer {API_KEY}"}
try:
resp = requests.get(url, headers=headers, params=params, timeout=15)
resp.raise_for_status()
except requests.RequestException as e:
print(f"Erro HTTP: {e}", file=sys.stderr)
return []
try:
data = resp.json()
except ValueError:
print("Resposta não-JSON", file=sys.stderr)
return []
# Normalize apenas os campos que planejamos armazenar/exibir
normalized = []
for item in data:
sport = item.get("sport") or {}
normalized.append({
"id": item.get("id"),
"type": item.get("type"),
"name": item.get("name"),
"sport_id": sport.get("id"),
"sport_name": sport.get("name"),
"gender": item.get("gender"),
"country_name": item.get("country_name"),
"image_path": item.get("image_path"),
"country_image_path": item.get("country_image_path"),
"slug": item.get("url"),
})
return normalized
if __name__ == "__main__":
results = search_entities("real madrid")
for r in results[:5]:
print(f"{r['id']} | {r['type']} | {r['name']} | {r['sport_name']} | {r['country_name']}")
Notas que economizam seu tempo:
- Timeouts: defina um tempo limite do cliente (o acima usa 15s) para evitar solicitações pendentes.
- Resultados vazios: a API pode retornar validamente uma lista vazia; trate isso em sua UI.
- Cache: estas são solicitações GET; você pode armazenar em cache por string de consulta para TTLs curtos para reduzir a latência e o uso de cotas.
Padrões de integração prática
Integração orientada por busca
Fluxo: o usuário digita em um time → você chama Buscar com q, mostra os principais resultados com emblemas de image_path e country_image_path → armazena id + type + sport_id. Isso permite que você pré-configure alertas, seções ou widgets vinculados a esse id canônico.
Navegação esporte → país
Fluxo: chame Obter esportes para preencher uma seleção de esportes, depois chame Obter países com sport_id quando o usuário escolher um esporte. Use os valores country_id e name para construir seus filtros de competição. Para tênis, as entradas refletem tours e agrupamentos de competição (por exemplo, ATP/WTA singles/doubles).
Microserviço de autocomplete
Envolva o endpoint de Busca com um pequeno cache (por exemplo, 60–300 segundos por consulta) e retorne um JSON mínimo de {id, type, name, sport_name, country_name}. Isso mantém seus frontends rápidos e consistentes em web e mobile.
Trabalhando com a API de agentes de IA (MCP)
Cada API Zyla é chamável de agentes de codificação de IA e clientes compatíveis com MCP (Claude Code, Cursor, Windsurf, etc.) usando o endpoint MCP. Configure seu cliente para acessar:
- https://mcp.zylalabs.com/mcp?apikey=SUA_CHAVE_API
Seu agente pode então fazer as mesmas solicitações GET para os caminhos mostrados acima nesta listagem. Para orientações sobre como conectar clientes MCP, veja a referência MCP.
Tratamento de erros, cotas e dicas de implantação
- Autorização: Todas as chamadas requerem Autorização: Bearer SUA_CHAVE_API. Mantenha as chaves na configuração do lado do servidor ou em gerenciadores de segredos.
- Métodos HTTP: Todos os caminhos documentados aqui são GET. Não envie um corpo; use parâmetros de string de consulta exatamente como listados.
- Cotas: Esta API é assinatura + cota. A primeira API oferece um teste de 7 dias ou 50 solicitações e não possui Plano Gratuito. Confirme sua cota atual na página da API antes de testar carga.
- Paginação: Não documentada nesses endpoints. Espere arrays completos para seus filtros e busca; adicione paginação do lado do cliente se necessário.
- Resiliência: Implemente tentativas com backoff para respostas transitórias 5xx. Não tente novamente 4xx sem alterações de código.
- Observabilidade: Registre o método da solicitação, URL e código de status—não a chave. Para depuração, despeje os cabeçalhos de resposta e os primeiros N bytes do corpo.
Exemplo de ponta a ponta: navegue para torneios de tênis e depois busque
- Liste os esportes:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23853/get-sports (cabeçalho de Autorização apenas)
- Extraia a entrada com o nome Tênis, leia sport_id (2 no conjunto de resposta de exemplo).
- Liste países/competições para Tênis:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23854/get-countries?sport_id=2
- Renderize seções ATP/WTA em sua UI usando name e country_id.
- Busque entidades específicas:
- GET https://zylalabs.com/api/12518/flashscore-live-api/23852/search?q=real+madrid
- Armazene os ids das entidades selecionadas para uso posterior em seus recursos.
Checklist de segurança e desempenho
- Mantenha sua chave API do lado do servidor; faça proxy das solicitações do frontend através do seu backend.
- Use endpoints apenas HTTPS exatamente como documentado em zylalabs.com.
- Aplicar cache de TTL curto em GETs por URL completa (incluindo string de consulta) para melhorar a capacidade de resposta.
- Valide e sane o parâmetro q da entrada do usuário; passe-o como está para a API após a codificação da URL.
- Defina limites de tempo razoáveis (conectar/ler) e imponha limites superiores nos tamanhos de resposta em seu cliente HTTP.
Trechos de solicitação prontos para copiar
Busque por “real madrid” (cURL)
Liste todos os esportes (cURL)
Obtenha países/competições para Tênis (cURL)
Para onde ir a seguir
Explore a listagem completa no Zyla: FlashScore - Live API. Crie uma conta gratuita para obter sua chave e comece a integrar em minutos: Registrar. Você também pode chamar essas APIs diretamente de agentes de codificação de IA usando MCP, conforme descrito acima.
FAQ
A FlashScore - Live API requer um cabeçalho de Autorização?
Sim. Envie Autorização: Bearer SUA_CHAVE_API com cada solicitação.
Há um plano gratuito?
Nenhum Plano Gratuito está disponível. A primeira API oferece um teste de 7 dias ou 50 solicitações. Verifique a página da API para opções de acesso e preços atuais.
Quais endpoints estão disponíveis nesta listagem?
Buscar (GET /23852/search com q), Obter esportes (GET /23853/get-sports) e Obter países (GET /23854/get-countries com sport_id).
Posso passar um corpo de solicitação?
Não. Os endpoints documentados são apenas GET; use os parâmetros de consulta exatamente como listados.
Como chamo a API de um agente de IA?
Aponte seu cliente compatível com MCP para https://mcp.zylalabs.com/mcp?apikey=SUA_CHAVE_API e faça com que ele emita as mesmas solicitações GET mostradas neste guia. Veja a referência MCP para detalhes.
Resposta oficial da API
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…
Resposta oficial da API
[{"id":"W8mj7MDD","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/E99TZ05n-ttfpEDUq.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"SlAdQJK4","type":"team","name":"Real Madrid U19","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/IgG3LUAK-xGwa4c2B.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"MP6gLUO7","type":"team","name":"Real Madrid","url":"real-madrid","sport":{"id":3,"name":"Basketball"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/pn8TQOkQ-bXlcmj9T.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"2anA8FkF","type":"team","name":"Real Madrid U21","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/p048BCQt-SKpsUss3.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"4xlfVfnP","type":"team","name":"Real Madrid W","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Women","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/4CKmt8Rt-WpmKUEXD.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"fyNss8GQ","type":"team","name":"Real Madrid B","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/f5FO93Tc-ltKPQjEk.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"46uFRv4a","type":"team","name":"Real Madrid C","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/bupmbK6n-QkBtimSf.png","country_image_path":"https:\/\/static.flashscore.com\/res\/image\/data\/QFbOpTR6-GtJBBjyH.png"},{"id":"UiUgFWdq","type":"team","name":"Real Madrid U20","url":"real-madrid","sport":{"id":1,"name":"Soccer"},"gender":"Men","country_name":"Spain","image_path":"https:\/\/static.flash…