2

[PITCH] API gratuita com todos os resultados da Mega-Sena em JSON (sem cadastro, com CORS)

Fiz um site de resultados da Mega-Sena (resultadomega.com.br) e, no caminho, os dados viraram uma API aberta. Deixo aqui para quem precisar, e conto três problemas que tive com a fonte oficial, que podem poupar tempo de alguém.

Endpoints

Tudo em https://resultadomega.com.br/api/:

  • ultimo.json: o último concurso completo, com dezenas, ordem do sorteio, premiação das três faixas, cidades dos ganhadores, arrecadação e prêmio estimado do próximo
  • proximo.json: número, data e prêmio estimado do próximo concurso, e a reserva da Mega da Virada
  • concursos.json: todos os mais de 3 mil concursos desde 1996, num formato compacto, [concurso, "AAAA-MM-DD", [dezenas]] (116 KB)
  • estatisticas.json: frequência e atraso de cada dezena
const c = await (await fetch('https://resultadomega.com.br/api/ultimo.json')).json();
console.log(c.concurso, c.dezenas); // 3069 [5, 19, 22, 44, 47, 57]

Não tem cadastro nem chave, e o CORS é liberado, então dá para usar direto do front. Atualiza minutos depois de cada sorteio, com cache de 5 minutos. Documentação com todos os campos: https://resultadomega.com.br/api/

Três coisas que aprendi com a API da Caixa

1. Ela bloqueia IP de datacenter. Desde o fim de setembro, a API oficial passou a responder 403 para boa parte das chamadas vindas de servidores fora do Brasil, incluindo os runners do GitHub Actions. Do navegador, no Brasil, funciona normal. Pôr um Worker da Cloudflare no meio não resolve sozinho: o Worker roda perto de quem chama, então, chamado do runner, ele sai dos EUA e leva o mesmo 403. Acabei com uma cascata de fontes, que passa para a próxima quando uma falha.

2. O endpoint do "último concurso" atrasa. Chamar sem número pode devolver o concurso anterior por horas depois do sorteio, mesmo com o novo já disponível pelo número. O que funciona é varrer n+1, n+2… até dar erro. Detalhe: para concurso inexistente ela responde 500, não 404.

3. O agendamento do GitHub Actions não serve para horário. Eu tinha 14 execuções agendadas por dia; o GitHub rodava umas 5, com horas de atraso, e o resultado entrava no site 1 a 2 horas depois do sorteio. A documentação avisa: no início de cada hora há pico, e execuções agendadas podem atrasar ou ser descartadas. Resolvi com uma Cron Trigger da Cloudflare, que roda na hora, chamando workflow_dispatch. Agora o resultado entra uns 30 minutos depois do sorteio.

Uso

Pode usar à vontade. Os resultados são dados públicos da Caixa; em caso de divergência, vale a informação oficial. Se usar num projeto, um link para o site ajuda a mantê-lo no ar. Sugestões e bugs: comentem aqui.

Carregando publicação patrocinada...
1

Ficou bem bonitão o template!
Mas pergunto: qual finalidade? Gastar com infra e domínio, pretente monetizar de alguma forma?

Dica: utilize o Workers da Cloudflare no plano free, que não precisa se preocupar com infra. De quebra, você ganha multirregião para tempo de resposta <30 ms em qualquer canto do mundo.