Ir para conteúdo principal

API LeagueRepublic: Obter Centro de Jogos

Escrito por Pedro Maia

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:

  1. As épocas da sua liga, para poder oferecer um seletor de época.

  2. 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.

  3. O resumo do dia, se a sua liga tiver os resumos do centro de jogos ligados.

  4. 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

  1. Copie o prompt da caixa cinzenta.

  2. 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.

  3. 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.

  4. 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.

  5. Cole tudo na IA e envie.

  6. 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]

Isto respondeu à sua pergunta?