Web API loteria

 Sobre

Esta é um página de documentação sobre o como interagir com a "interface de programação para aplicações". Aqui você encontrará detalhes para programar suas aplicações usando qualquer cliente HTTP.

Você pode usar esta API para obter informações sobre resultados dos jogos e análises de sorteios realizados pela loteria Caixa Economica Federal. Disponibilizo este serviço no intuíto de automatizar a divulgação dos resultados lotéricos e facilitar a padronização os dados para desenvolvedores de aplicações voltadas à este contexto. Desta forma, não existe nenhum vínculo direto entre este serviço e a CEF.

 Passo a passo

Se você ficou interessado, inscreva-se:

  1. Solicitar sua conta de usuário através do formulário de contato
  2. Aguardar o email de confirmação contendo os dados de login
  3. Gerar o token de acesso através do método de autenticação
  4. Armazenar o token e utilizá-lo para as próximas requisições

 Quanto custa

Planos de acesso

BÁSICO

Ideal para um simples aplicativo pessoal Grátis
Informações reduzidas Número limitado de requisições Federal, Loteca e Lotogol não disponiveis

COMPLETO

Perfeito para aplicativos comerciais R$16,50Mês
Informações completas Sem limite de requisições Acesso à todas loterias

 Autenticação

A sua permissão de acesso será concedida pelo token de autenticação, e não mais por "usuário e senha" como de costume, estes serão usados apenas uma vez para a criação do token, o qual deverá ser enviado no cabeçalho de cada requisição HTTP ao servidor.

Fluxo de Autenticação WebApi
Fonte: asp.net

Esta forma de autenticação aumenta a seguraça das conexões, uma vez que seu usuário e senha não trafegam pela rede e nem estarão expostos em código de programação.

Observações:

  • O mesmo token deverá ser usado em todas as requisições, ou seja, não é necessário gerar um novo para cada nova chamada aos webservices.
  • O token, ao ser criado, fica vinculado ao dispositivo gerador, ou seja, um mesmo token não poderá ser utilizado nas requisições realizadas a partir de outro dispositivo.
  • Quando o endereço IP do seu dispositivo mudar, um novo token deverá ser gerado.
  • O token é válido por 7(sete) dias contados a partir de sua criação.

Ferramentas recomendadas

Criando um token temporário

                                
//Exemplo:
{
    "Success": true,
    "Token": "PyMAIhLlIYUEsK0gCk5sOR9fdp32XN7sYL8=",
    "Message": "201 - OK (Token gerado com sucesso.)"
}
                                
                                

Configure de acordo com os passos a seguir:

  1. Defina o tipo da requisição para POST
  2. Insira o método responsável pela criação do token:
    1. #
  3. Na aba BODY:
    1. Marque o tipo da caixa de texto como RAW
    2. Defina o formato do texto para como JSON(application/json)
    3. Na caixa de texto, insira o código abaixo especificando seu usuário e senha
                                                                          
      //Exemplo:
      { "Codigo": "0001", "Senha": "psw123" }
                                          
                                      
  4. Clique no botão SEND
  5. Observe a mensagem de retorno da requisição, nela contém o seu token

Conforme a imagem abaixo:

 Como testar

Dia de Sorte

diadesorte

Dupla-Sena

duplasena

Federal

federal

Loteca

loteca

Lotofácil

lotofacil

Lotogol

lotogol

Lotomania

lotomania

Mega-Sena

megasena

Quina

quina

Timemania

timemania

* Os logotipos das loterias reproduzidos nesta documentação, foram retirados no site da CEF a qual possui os todos direitos autorais.

Testes de resposta

Configure de acordo com os passos a seguir:

  1. Defina o tipo da requisição para GET
  2. Insira o método que deseja verificar:
    1. Ex.: megasena/last
  3. Na aba HEADERS:
    1. Adicione um atributo nomeado como "A-Token"
    2. Insira o conteúdo do seu token como valor para o atributo
  4. Clique no botão SEND
  5. Visualize a mensagem de resposta da requisição


Para facilitar os testes, exportei minha coleção de requisições no Postman, faça o download, descompacte e realize a importação do arquivo para a ferramenta.

 Coleção Postman

Dica: Antes da importação, abra o arquivo no editor de texto de sua preferência, e substitua o valor de todos os atributos nomeados como "A-Token" com o valor do novo token que você gerou. Caso contrário terá que subistituí-lo manualmente para cada requisição de teste.

Com isso, os passos [1, 2 e 3] de configuração para os "teste de resposta" podem ser ignorados, bastando apenas clicar no item da coleção.

Por padrão, o retorno dos dados é em JSON, caso deseje em XML especifique o "Accept" como "application/xml", no cabeçalho da requisição. Veja abaixo:

 Implementação

O Postman já facilita nosso trabalho, gerando automaticamente exemplos de códigos em diversas linguangens de programação. Confira:

Mas também forneço aqui alguns modelos para auxiliar no uso inicial da API. Qualquer dúvida estarei disposto a ajudá-lo.

Exemplos de conexão

                                
                                
  _  _     _ _                        _    _ _ 
 | || |___| | |___    __ __ _____ _ _| |__| | |
 | __ / -_) | / _ \_  \ V  V / _ \ '_| / _` |_|
 |_||_\___|_|_\___( )  \_/\_/\___/_| |_\__,_(_)
                  |/                           
                                
                                
                                
                                            ;
using System;
using System.IO;
using System.Net;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string token = "C2g8+MvcW4PEzINa8mmBjs0HLUZDwjPMU="
            string result = BuscarSorteio(token); 
            Console.Write(result);
            Console.Read();
        }
        
        private static string BuscarSorteio(string token)
        {
            HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create("#/duplasena/last");
            httpWReq.Method = "GET";
            httpWReq.ContentType = "application/json; charset=utf-8";
            httpWReq.Headers.Add("A-Token", token);
            HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();
            using (var sr = new StreamReader(response.GetResponseStream()))
            {
                return sr.ReadToEnd();
            }
        }
    }
}
                                            
                                            
                                            
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   
   
	NSString *urlString = @"#/account/authenticate"
	NSMutableDictionary *tokenObject = [[NSMutableDictionary alloc] init];
	[tokenObject setObject:@"0001" forKey:@"Codigo"];
	[tokenObject setObject:@"psw123" forKey:@"Senha"];
	NSError *myError = nil;
	NSData *jsonData = [NSJSONSerialization dataWithJSONObject:tokenObject options:NSJSONReadingMutableLeaves error:&myError];
	
    if (myError == nil)
	{
		NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
		NSURL *url = [NSURL URLWithString:urlString];
		NSMutableURLRequest *requestData = [[NSMutableURLRequest alloc] init];
		[requestData setURL:url];
		[requestData setHTTPMethod:@"POST"];
		[requestData setValue:[NSString stringWithFormat:@"%lu",(unsigned long)[[jsonString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES] length]] forHTTPHeaderField:@"Content-Length"];
		[requestData setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]];
		[requestData setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
		NSURLResponse *response;
		NSData *localData = [NSURLConnection sendSynchronousRequest:requestData returningResponse:&response error:&myError];
		
		if (myError == nil)
		{
			NSString *result = [[NSString alloc] initWithData:localData encoding:NSASCIIStringEncoding];
			NSLog(@"Post result : %@", result);
		}
	}
    
   
   [pool drain];
   return 0;
}
                                            
                                            
                                            
<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery.ajax({
            url: "#/duplasena/last",
            type: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            headers: {
                "A-Token": "C2g8+MvcW4PEzINa8mmBjs0HLUZDwjPMU="
            },
            success: function (result) {
                console.log(result);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.error("\n xhr.status: " + xhr.status + 
                    "\n xhr.statusText: " + xhr.statusText +
                    "\n xhr.readyState: " + xhr.readyState + 
                    "\n xhr.redirect: " + xhr.redirect +
                    "\n textStatus: " + ajaxOptions + 
                    "\n errorThrown: " + thrownError);
            }
        });
    });
</script>
                                            
                                            
                                            
<?php 
    $options = array(
        'http' => array(
            'method'  => 'GET',
            'header'  => 'A-Token: C2g8+MvcW4PEzINa8mmBjs0HLUZDwjPMU=',
        )
    );
    $context = stream_context_create($options);
    $json = file_get_contents('#/duplasena/last', false, $context);
    $result = json_decode($json);
    var_dump($result);
?>
                                            
                                            

Erros comuns

  • Ao requisitar a criação do token de acesso, verifica-se o cadastro de usuários
                                            
    {
        "Success": false,
        "Token": null,
        "Message": "404 - NotFound"
    }
                                            
                                            
    Possíveis causas:
    • Código de usuário ou senha inválidos
                                            
    {
        "Success": false,
        "Token": null,
        "Message": "403 - Forbidden"
    }
                                            
                                            
    Possíveis causas:
    • Não existe permissão de acesso atribuída ao perfil
    • A data de cadastro expirou
    • Vencimento do período contratado
                                            
    {
        "Success": false,
        "Token": null,
        "Message": "402 - PaymentRequired"
    }
                                            
                                            
    Possíveis causas:
    • Pagamento não identificado
    • A conta de usuário encontra-se desativada
  • Ao requisitar algum serviço da API, valida-se o token de acesso
                                            
    {
        "Success": false,
        "Token": null,
        "Message": "401 - Unauthorized",
    }
                                                         
                                            
    Possíveis causas:
    • Idem anteriores
    • O token informado não pertence ao dispositivo solicitante
                                            
    {
        "Success": false,
        "Token": null,
        "Message": "403 - Forbidden",
    }
                                                         
                                            
    Possíveis causas:
    • A data de validade do Token expirou (7 dias)
                                            
    {
        "Success": false,
        "Token": null,
        "Message": "417 - ExpectationFailed",
    }
                                            
                                            
    Possíveis causas:
    • O "A-Token" não está presente no cabechalho da requisição
    • O valor do token não foi informado
  • Ao requisitar algum serviço da API, verifica-se as permissões do solicitante
                                            
    {
        "401 - Unauthorized"
    }
                                            
                                            
    Possíveis causas:
    • Acesso ao recurso não foi autorizado ao perfil do usuário.