[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óximoproximo.json: número, data e prêmio estimado do próximo concurso, e a reserva da Mega da Viradaconcursos.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.