Antes de começar
Para quem é: este endpoint só funciona para ligas com a subscrição Ouro que tenham a API ligada. Para a ligar, marque Activar JSON API nas Configurações API da sua liga. Se faltar alguma destas condições, todos os endereços web deste artigo devolvem um erro em vez dos seus dados. |
O que é isto? A API JSON permite que outro site, aplicação ou programa leia os jogos, resultados e classificações da sua liga diretamente do LeagueRepublic. Pense nela como um empregado de mesa: o seu site pede uma coisa ("os jogos de hoje, por favor") e o LeagueRepublic traz a resposta.
Como se faz o pedido? Visita-se um endereço web, tal como quando se abre uma página. Em vez de uma página bonita, recebe texto simples num formato chamado JSON. O código do seu programador lê esse texto e transforma-o naquilo que ele desenhar.
Qual é o aspeto do JSON? É uma lista de etiquetas e valores, um pouco como um formulário preenchido:
{ "homeTeamName": "Arthurlie", "homeScore": "2" } |
A palavra antes dos dois pontos é o nome do campo (a etiqueta do formulário). O que vem depois é o valor (o que foi escrito na caixa). As tabelas mais abaixo neste artigo explicam o que significa cada nome de campo.
O que é um ID? Cada época, equipa e jogo no LeagueRepublic tem o seu próprio número, chamado ID. Funciona como um número de sócio: nunca muda e não há duas coisas com o mesmo. Coloca os IDs no endereço web para indicar que época ou equipa quer.
Como encontro os meus IDs? O ID da época obtém-se com Get Seasons For League. Os IDs das equipas obtêm-se com Get Teams For Fixture Group. Ambos estão descritos no artigo de ajuda principal da API.
Quem pode usar? Ligas no plano Ouro que tenham marcado Activar JSON API nas Configurações API.
Há algum limite? Sim. Cada liga pode fazer até 60 pedidos por minuto. Se passar esse limite, recebe a mensagem "Rate limit exceeded" e tem de esperar um minuto antes de tentar outra vez.
Algumas palavras que vai encontrar
Palavra | O que significa |
Road | A equipa visitante. A LeagueRepublic diz "road" onde a maioria das pessoas diz "away" (fora). |
Fixture | Um jogo, quer já se tenha realizado quer não. |
Fixture group | Uma divisão (como "Premier Division") ou uma eliminatória de uma taça. |
Result | Um jogo que tem resultado. |
null | A caixa está vazia. A liga não a preencheu, ou não se aplica. |
true / false | Sim / não. |
Obter Centro de Jogos
Obter Centro de Jogos dá-lhe tudo o que aparece na página Centro de Jogos do seu site para um dia, num único pedido: os jogos, os resultados e as classificações das divisões que jogam nesse dia.
Poupa muito trabalho ao seu programador. Sem ele, teria de pedir as épocas, depois as divisões, depois os jogos de cada divisão, depois cada classificação, e juntar tudo à mão.
O endereço web
Para o dia predefinido (o mesmo dia em que a sua página Centro de Jogos abre):
Para um dia à sua escolha:
Substitua {seasonID} pelo ID da sua época e {date} pelo dia que quer, escrito como ano, mês, dia, sem espaços. Por exemplo, 3 de outubro de 2026 é 20261003:
Para ver jogos que ainda não têm data ("To Be Confirmed", por confirmar), use tbc em vez de uma data:
O que recebe
A resposta é como uma pasta com quatro partes:
As épocas da sua liga, para poder oferecer um seletor de época.
Os dias de jogo da época, cada um com quantos jogos e resultados tem. Assim pode criar uma barra de datas para ir clicando, como a da sua página Centro de Jogos.
O resumo do dia, se a sua liga tiver os resumos do centro de jogos ligados.
Os jogos do dia, agrupados por divisão ou eliminatória de torneio. Cada divisão vem também com a sua classificação.
Aqui está um exemplo real, reduzido a um jogo:
{ "seasonID": 236635540, "seasonList": [ { "seasonID": 922046009, "seasonName": "2025-2026" }, { "seasonID": 236635540, "seasonName": "2026-2027" } ], "matchHubRecapContentText": null, "matchHubRecapLoadDateTime": null, "matchHubDate": "20261002", "dateList": [ { "matchHubDate": "20261002", "matchCount": 1, "resultCount": 0, "liveResultCount": 0 }, { "matchHubDate": "20261003", "matchCount": 57, "resultCount": 0, "liveResultCount": 0 }, { "matchHubDate": "tbc", "matchCount": 5, "resultCount": null, "liveResultCount": null } ], "fixtureGroupList": [ { "fixtureGroupDesc": "Scottish Gas Scottish Cup - Round 1", "fixtureGroupIdentifier": 406990226, "fixtureTypeID": 2, "fixtures": [ { "fixtureID": 45132961, "fixtureDate": "20261002 19:30", "fixtureDateInMilliseconds": 1790965800000, "homeTeam": 551804519, "homeTeamName": "Cumnock Juniors", "roadTeam": 363729896, "roadTeamName": "Auchinleck Talbot", "homeScore": null, "roadScore": null, "result": false, "approved": false, "roundDesc": "Round 1", "venueAndSubVenueDesc": "Townhead Park" } ], "standings": null } ] } |
Este jogo ainda não se realizou, por isso os resultados estão vazios (null). É um jogo de taça, por isso não há classificação ("standings": null).
As partes principais
Nome do campo | O que significa |
seasonID | A época que pediu. |
seasonList | Todas as épocas da sua liga, cada uma com o seu ID e nome. |
matchHubDate | O dia que está a ver, escrito como 20261003. Mostra tbc para jogos sem data. |
dateList | Todos os dias de jogo da época (ver a tabela seguinte). |
matchHubRecapContentText | O resumo escrito do dia. Vazio se a sua liga não usar resumos. |
matchHubRecapLoadDateTime | Quando o resumo foi escrito. Vazio se não houver resumo. |
fixtureGroupList | Os jogos do dia, agrupados por divisão ou eliminatória de taça. |
Cada dia de jogo (em dateList)
Nome do campo | O que significa |
matchHubDate | O dia, escrito como 20261003, ou tbc para jogos ainda sem data. |
matchCount | Quantos jogos desse dia ainda não se realizaram. |
resultCount | Quantos jogos desse dia têm resultado. |
liveResultCount | Quantos jogos desse dia têm resultado em direto. Só é usado se a sua liga tiver os resultados em direto ligados. |
Cada divisão ou eliminatória de taça (em fixtureGroupList)
Nome do campo | O que significa |
fixtureGroupDesc | O nome, por exemplo "Premier Division" ou "Scottish Gas Scottish Cup - Round 1". |
fixtureGroupIdentifier | O ID. |
fixtureTypeID | O tipo: 1 = divisão, 2 = taça, 4 = outro. |
fixtures | Os jogos desse grupo nesse dia (ver a tabela seguinte). |
standings | A classificação. Vazio para taças e outros grupos. |
Cada jogo (em fixtures)
Estes campos usam exatamente os mesmos nomes que as listas de jogos dos outros endpoints da API LeagueRepublic, como Get Fixtures For Season, por isso o seu programador pode reutilizar o mesmo código.
Nome do campo | O que significa |
fixtureID | O ID do jogo. |
fixtureDate | Data e hora de início, escritas como 20261002 19:30. |
fixtureDateInMilliseconds | A mesma data e hora num único número. Os programadores acham mais fácil ordenar por este campo. |
fixtureDateStatusID / fixtureDateStatusDesc | Se a data está fixada: 1 = "Normal / Scheduled" (agendado), 2 = "To Be Confirmed" (por confirmar). |
fixtureStatus / fixtureStatusDesc | Se o jogo se vai realizar: 0 = "Normal", 2 = "Postponed" (adiado). |
homeTeam / roadTeam | Os IDs da equipa da casa e da equipa visitante. |
homeTeamName / roadTeamName | Os nomes da equipa da casa e da equipa visitante. |
homeScore / roadScore | O resultado. Vem como texto, por isso também pode conter uma letra, como "P" de adiado (postponed). Vazio se o jogo não se realizou. |
homeScoreNote / roadScoreNote | Uma nota junto ao resultado. Normalmente vazio. |
additionalScore | Detalhe extra do resultado, como "(HT 2-0)" (intervalo) ou "(Pens 4-5)" (penáltis). |
result | true se o jogo tiver resultado. |
approved | true se o resultado tiver sido aprovado pela liga. Um resultado pode aparecer antes de ser aprovado. |
noResultOutcome | true se o jogo tiver ficado registado como sem resultado. |
fixtureNote | Uma nota sobre o jogo, se a liga mostrar alguma. |
roundDesc | A eliminatória da taça, por exemplo "Round 2" ou "Final". |
shortCode | Um código de uma letra para o tipo de jogo: L = liga, C = taça, O = outro. |
venueAndSubVenueDesc | Onde se joga, por exemplo "Holm Park". |
matchInsightsExist | true se houver uma antevisão do jogo no seu site. |
liveLastUpdated / liveSourceDesc | Para resultados em direto: quando o resultado mudou pela última vez e de onde veio. Vazio se não for usado. |
gameGroups | Os jogos individuais dentro do encontro, em modalidades como dardos e bilhar (ver abaixo). Vazio nas outras modalidades. |
innings | O resultado de cada entrada, quarto ou período (ver abaixo). Vazio nas modalidades que não os usam. |
homeScoreHits / roadScoreHits | Batidas (hits), para softball e basebol. Vêm como números simples. |
homeScoreErrors / roadScoreErrors | Erros, para softball e basebol. Vêm como números simples. |
Jogos dentro de um encontro (setas, bilhar e semelhantes)
Em algumas modalidades, um encontro é composto por jogos mais pequenos, como pares e individuais nos dardos. Aqui está um exemplo real de dardos, reduzido:
"gameGroups": [ { "gameGroupDesc": "Pairs", "gameGroupDescShort": "PRS", "homeWinCount": 2, "roadWinCount": 1, "games": [ { "sequence": 1, "homeScoreLevel1": "2", "roadScoreLevel1": "0" }, { "sequence": 2, "homeScoreLevel1": "2", "roadScoreLevel1": "0" }, { "sequence": 3, "homeScoreLevel1": "0", "roadScoreLevel1": "2" } ] } ] |
Nome do campo | O que significa |
gameGroupDesc | O tipo de jogo, por exemplo "Pairs" (pares) ou "Singles" (individuais). |
gameGroupDescShort | Uma versão curta do nome, por exemplo "PRS". |
homeWinCount / roadWinCount | Quantos destes jogos cada lado ganhou. |
games | Cada jogo, por ordem. |
sequence | A posição do jogo na ordem: 1 é o primeiro jogo, 2 o segundo, e assim por diante. |
homeScoreLevel1 / roadScoreLevel1 | O resultado do jogo, por exemplo legs ou frames ganhos. |
Os nomes dos jogadores não estão incluídos aqui. Para os obter, use Get Full Fixture Details para esse jogo.
Entradas, quartos e períodos
Algumas modalidades dividem um jogo em entradas, quartos ou períodos. Cada um aparece por ordem. Aqui está um exemplo real de basquetebol que foi a prolongamento:
"innings": [ { "inningsNumber": 1, "homeScore": "13", "roadScore": "19", "overtime": false }, { "inningsNumber": 2, "homeScore": "26", "roadScore": "18", "overtime": false }, { "inningsNumber": 3, "homeScore": "9", "roadScore": "16", "overtime": false }, { "inningsNumber": 4, "homeScore": "22", "roadScore": "17", "overtime": false }, { "inningsNumber": 5, "homeScore": "6", "roadScore": "8", "overtime": true } ] |
Nome do campo | O que significa |
inningsNumber | A posição no jogo: 1 é o primeiro, 2 o segundo, e assim por diante. |
homeScore / roadScore | O resultado de cada lado nessa entrada, quarto ou período. |
overtime | true se for prolongamento. Para mostrar "OT 1", "OT 2", conte as entradas de prolongamento por ordem. |
Os resultados parciais e o resultado final são introduzidos separadamente pela liga, por isso nem sempre batem certo. Por exemplo, um resultado atribuído pode ter resultado final mas não ter parciais.
A classificação (tabela)
Cada divisão vem com a sua classificação. É exatamente igual à de Get Standings For Fixture Group, por isso usa os mesmos nomes de campos. Aqui está o topo de uma classificação real, reduzida:
"standings": { "standingsDesc": "Premier Division", "standingsLines": [ { "position": "1", "teamID": 191899149, "teamName": "Arthurlie", "overallPlayed": 6, "overallWon": 5, "overallTied": 0, "overallLoss": 1, "overallScoreFor": 15, "overallScoreAgainst": 8, "scoreDifference": 7, "points": 15, "recentForm": "WLWWWW" } ] } |
A linha de cada equipa tem também os mesmos números separados em jogos em casa (nomes começados por home) e jogos fora (nomes começados por road). Uma classificação em que todos têm 0 jogos mostra zeros em todo o lado. É normal numa divisão que ainda não começou.
É bom saber
Os resultados aparecem logo. O Centro de Jogos mostra os resultados assim que são introduzidos, antes de a liga os aprovar. Use approved para distinguir.
Um dia sem jogos mostra o dia predefinido. Se pedir uma data sem jogos, recebe o mesmo dia em que a sua página Centro de Jogos abriria. Veja matchHubDate para saber que dia recebeu de facto.
Os jogos sem data ficam à parte. Os jogos marcados como "Por Confirmar" só aparecem quando pede tbc, nunca num dia com data.
Se alguma coisa correr mal
Mensagem | O que significa |
Supplied seasonID is not numeric | O ID da época tem letras ou símbolos. Deve ter só números. |
Season does not exist for supplied season ID | Não existe nenhuma época com esse ID. Confirme que o copiou corretamente. |
Supplied date is not valid, expected format yyyyMMdd or tbc | A data não está escrita como ano, mês, dia (por exemplo 20261003), ou não é uma data real. |
League is not authorised to access webservices | A liga não está no plano Ouro. |
JSON api is disabled for league | A opção Activar JSON API não está marcada nas suas Configurações API. |
Rate limit exceeded | Mais de 60 pedidos num minuto. Espere um minuto e tente outra vez. |
Crie-a com um assistente de IA
Não precisa de ser programador para experimentar este endpoint. Assistentes de IA como o ChatGPT ou o Claude conseguem criar uma página web simples com os dados da sua liga, se lhes disser o que quer. Abaixo tem um pedido pronto a usar (chamado prompt) que pode copiar e colar.
Como usar o prompt
Copie o prompt da caixa cinzenta.
Preencha o ID da sua época. Substitua [ID DA MINHA ÉPOCA] pelo seu número. Veja "Como encontro os meus IDs?" no início deste artigo.
Junte um exemplo real. Abra no browser o endereço web do prompt, selecione tudo o que aparece na página e cole por baixo do prompt, no sítio indicado. Assim a IA vê os seus dados reais, o que torna muito mais provável que acerte à primeira.
Diga que aspeto quer. Descreva as suas cores e estilo, ou anexe uma captura de ecrã do seu site ou de um design de que goste (o ChatGPT e o Claude aceitam imagens). Uma imagem costuma resultar melhor. Se não disser nada, a IA escolhe um design simples.
Cole tudo na IA e envie.
Compare o resultado com o site da sua liga. Se algo parecer errado, diga à IA o que está mal, por palavras simples, por exemplo "os resultados estão trocados". Ela corrige.
Se a página que a IA criar não mostrar dados, diga à IA exatamente o que vê. Pode ser preciso ela sugerir outra forma de carregar os dados.
Prompt: uma página do centro de jogos
Tenho uma liga desportiva no LeagueRepublic. Cria-me uma única página web (um ficheiro HTML que eu possa abrir no browser) que mostre o centro de jogos da minha liga, usando a API JSON do LeagueRepublic.
Vai buscar os dados a este endereço web: https://api.leaguerepublic.com/json/getMatchHub/[ID DA MINHA ÉPOCA].json
Para outro dia, acrescenta a data como ano, mês, dia, por exemplo: https://api.leaguerepublic.com/json/getMatchHub/[ID DA MINHA ÉPOCA]/20261003.json Usa "tbc" em vez de uma data para obter os jogos que ainda não têm data.
A página deve: 1. Mostrar no topo uma fila de datas clicáveis, criada a partir de "dateList". Cada data mostra quantos jogos ("matchCount") e resultados ("resultCount") tem. Clicar numa data carrega esse dia. Quando a página abre, desloca a fila de datas para que o dia mostrado fique visível. 2. Mostrar os jogos do dia agrupados sob o nome da divisão ou da taça. Os grupos estão em "fixtureGroupList", e o nome de cada grupo é "fixtureGroupDesc". 3. Para cada jogo em "fixtures", mostrar a hora de início a partir de "fixtureDate", a equipa da casa ("homeTeamName"), o resultado ("homeScore" e "roadScore") e a equipa visitante ("roadTeamName"). "Road" significa visitante. 4. Se um jogo ainda não tiver resultado, mostrar a hora de início em vez disso. Se um jogo tiver resultado mas "approved" for false, mostrar uma pequena etiqueta "provisório" ao lado. 5. Por baixo de cada divisão, mostrar a classificação a partir de "standings" > "standingsLines": posição ("position"), equipa ("teamName"), jogos ("overallPlayed"), vitórias ("overallWon"), empates ("overallTied"), derrotas ("overallLoss"), diferença ("scoreDifference") e pontos ("points"). As taças não têm classificação. 6. Mostrar os valores vazios (null) em branco. Nunca mostrar a palavra "null". 7. Não ir buscar os dados mais do que uma vez por minuto. A API permite 60 pedidos por minuto.
Mantém o design limpo e fácil de ler num telemóvel. Explica-me em passos simples como abrir e usar o ficheiro. Pergunta-me se alguma coisa não estiver clara.
Design: [DESCREVA O ASPETO QUE QUER, OU ANEXE UMA CAPTURA DE ECRÃ]
Aqui está um exemplo do que o endereço web devolve: [COLE O EXEMPLO AQUI] |
