Jump to content

Baixar resultados da loteria Dia de Sorte


Rany

Recommended Posts

Guest Zangado

@Jimmy

não tem como usar esse json para colocar os resultados no furum não?

vc falou que paga por uma api

mas não vejo necessidade já que tem esse link direto

provavelmente o mesmo que o x loterias e aquele outro que fica fazendo releitura de tempos em tempos até atualizar  

podendo mostrar até o rateio 

Link to comment
Share on other sites

@Zangado Tem razão, também podem ser programadores internos da própria caixa... Tenho certeza que esse retorno json é só para os apps deles, no dia que souberem que outros utilizam, darão um jeito de alterar, kkkkkkkkkkkkkk

Mas com paciência você consegue montar, onde if, else e loop for e não der jeito é porque foram poucos, kkkkkkkkkkkkkkk

Boa sorte e até.

Link to comment
Share on other sites

Guest Zangado

@Rany 

creio que a caixa saiba que usam

afinal oq ela quer é mais propaganda, 

ela não ganha nada com um site; online se o pessoal passar os resultados oir outros meios a partir de uma conexão mais leve que a pagina dela para ela é até melhor

sobre programadores internos não, isso tem licitação, teve da nova pagina dela que ficou essa bagaça e pelo que li na epoca foi parente de um grandão lá 

 

Link to comment
Share on other sites

Guest Zangado
28 minutos atrás, Rany disse:

Mas com paciência você consegue montar, onde if, else e loop for e não der jeito é porque foram poucos,

sobre isso é a mesma macro, só muda o indice de controle 

no caso se cria 1 indice para cada loteria e no loop se usa esse indice , os loop e if são os mesmos

 

o chato é ficar montando esses indices pelos motivos expostos 

tem que pegar nome por nome de campo e ir adicionando na matriz do indice em uma organização por campo 

tipo datas na mesma posição da matriz ,

e deixar as partes que tem quantidade variavel para o final tipo os rateio 

tbm se pode concatenar com um separador igual as dezenas e separar quando for usar

pq nesse caso se tem dimensão da matriz como controle, é como uma matriz dentro de outra

o mesmo conceito do json

 

Link to comment
Share on other sites

Guest Zangado

@Rany acabei pegando novamente para montar o atualizador da jb,, mesmo pq a minha esta aqui desatualizada

acho que dessa vez vai dar bastante llnhas , acho que já cheguei a 100 kkkk

serio ,  não lembro o metodo que tinha usado não , ei tinha feito uma pesquisa ferrenha e feito muitas mudanças "estava animado pelo $$" agora como é para mim vai ficar assim mesmo , se bem que está  legal

o problema agora é ordenar ,  não lembro como tinha feito, era um loop inverso mas não lembro a logica  já que o item de hora é separado e tem proporções diferentes, e se não pegar alinhado fica fora 

estava vendo qeu a pagina demora a atualizar em certos momentos só servindo como banco , 

por enquanto fica assim

1 17/11/18 sáb 11   7000 8605 8244 850 3496
2 17/11/18 sáb 14   1673 536 9524 4120 7370
3 17/11/18 sáb 16   8236 3878 3108 515 3297
4 17/11/18 sáb 19   2443 3432 4506 9080 5139
5 17/11/18 sáb 21   9976 6995 472 3931 7614
6 16/11/18 sex 11   3624 7403 5093 7126 1848
7 16/11/18 sex 14   4975 8841 4159 9580 6312
8 16/11/18 sex 16   3383 4124 1157 9126 6910
9 16/11/18 sex 18   1515 9209 1562 1100 5313
10 16/11/18 sex 21   4615 4876 4157 6800 7623
11 15/11/18 qui 11   283 9989 7824 1654 2321
12 15/11/18 qui 14   2163 2598 6275 5629 4188
13 14/11/18 qua 11   9124 7246 9660 9778 3216

 

Link to comment
Share on other sites

@Zangado kkkkkkkkkkkkkkk, mesmo assim 400 linhas menos que o meu.

Não sei como você fez o seu, mas usando aquele código que lhe envie, precisa mudar apenas o único FOR que possui.

 

Com base naquele código de 500 linhas (kkkkkkkkkkkkkkkkkk), precisa mudar apenas o for:

 

Era: For i = 0 To (Total - 1)

 

Agora: For i = (Total - 1) To 0 Step -1

 

Dessa forma ele monta o arquivo de texto em ordem cronológica.

 

Flw.

 

 

Link to comment
Share on other sites

Guest Zangado

@Rany 

é que vc trata tabela por tabela no meu caso todas são pegas em sequencia

sim seria isso , mas o item de hora atrapalha a logica de pegar em sequencia desse modo

qualquer coisa eu ordeno depois 

 

Link to comment
Share on other sites

Guest Zangado

@Rany 

se for pensar bem a sua estrategia pode ser mais segura a longo prazo do que a minha 

se tiver mudança minima da pagina a minha tem que refazer completamente  a sua estrategia provavelmente apenas pequenos trechos , 

fora que a minha tem loops entrelaçados que fica dificil acompanhar a logica 

Link to comment
Share on other sites

  • 1 month later...

Pra descobrir o json pra os outros jogos é bem fácil, faça isto:
No navegador, no site do hoje, onde mostra os resultados, vc faz isto:
Clique com o botão direito, e clique em "Inspecionar elemento", em seguida, clique na guia "Network", em seguida, clique na guia XHR, agora, pra vc ver a url é bem simples, clique no site da página, em um dos botões, anterior ou próximo, quando vc clica, aparecerá lá no "XHR", a url do json.

Por exemplo, pra a dupla sena é:
http://loterias.caixa.gov.br/wps/portal/loterias/landing/duplasena/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOLNDH0MPAzcDbwMPI0sDBxNXAOMwrzCjA2cDIAKIoEKnN0dPUzMfQwMDEwsjAw8XZw8XMwtfQ0MPM2I02-AAzgaENIfrh-FqsQ9wNnUwNHfxcnSwBgIDUyhCvA5EawAjxsKckMjDDI9FQGgnyPS/dl5/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_61L0H0G0J0I280A4EP2VJV30N4/res/id=buscaResultado/c=cacheLevelPage/=/?timestampAjax=1547413528911&concurso=1888

Se vc quiser pegar somente o último resultado, vc limpa o número após "concurso=", no exemplo acima, vc retiraria 1888.

Quando vc faz isto, vc tem o resultado do último concurso, mas e a url dos outro concursos, bem simples, vc pega o número do último concurso retorna pelo json.
Então, vc pode fazer um for de 1 ao último concurso, simplesmente, substituindo o número do concurso pelo valor da variável do for.

Eu programo em VBA, freepascal, delphi e outras linguagens.

Link to comment
Share on other sites

{
   "proximoConcurso":"1888",
   "concursoAnterior":"1887",
   "forward":null,
   "mensagens":[

   ],
   "concurso":1888,
   "data":1547258400000,
   "dtinclusao":1547333760000,
   "resultado_sorteio1":"08-29-43-14-28-31",
   "ganhadores_sena1":0,
   "valor_sena1":0.00,
   "acumulado_sena1":"1",
   "valor_acumulado_sena1":9007786.34,
   "resultado_sorteio2":"19-38-50-35-01-05",
   "ganhadores_sena2":0,
   "valor_sena2":0.00,
   "ganhadores_quina2":57,
   "valor_quina2":2333.74,
   "ganhadores_quadra2":2610,
   "valor_quadra2":64.71,
   "observacao":null,
   "ic_conferido":"1",
   "de_local_sorteio1":"Espaço Loterias Caixa",
   "no_cidade":"SÃO PAULO",
   "sg_uf":"SP",
   "valor_estimativa":9500000.00,
   "data_proximo_concurso":1547517600000,
   "vr_arrecadado":4870846.00,
   "qt_ganhador_quina_faixa1":37,
   "vr_quina_faixa1":3994.69,
   "qt_ganhador_quadra_faixa1":2070,
   "vr_quadra_faixa1":81.60,
   "vr_acumulado_especial":11827119.18,
   "qt_ganhador_terno_faixa1":39468,
   "vr_terno_faixa1":2.13,
   "qt_ganhador_terno_faixa2":45159,
   "vr_terno_faixa2":1.87,
   "ic_concurso_especial":false,
   "error":false,
   "acumulado":true,
   "previaNormal":false,
   "previaEspecial":false,
   "ganhadoresPorRegiao1":[

   ],
   "ganhadoresPorRegiao2":[

   ],
   "resultadoOrdenadoSorteio1":"08-14-28-29-31-43",
   "resultadoOrdenadoSorteio2":"01-05-19-35-38-50",
   "data_proximo_concursoStr":"15/01/2019",
   "dataStr":"12/01/2019",
   "descricaoLocalSorteio":"Espaço Loterias Caixa"
}
Link to comment
Share on other sites

Eu programo em vba, freepascal, e várias outras linguagens, no caso, eu tenho uma função em freepascal que puxa os resultados, por exemplo, do jogo lotofacil, dia de sorte.

{
A procedure abaixo, conecta no site da caixa, em seguida, pega o último concurso
sorteado, em seguida, de posse deste número, gera várias urls do último concurso ao
primeiro concurso, em seguida, baixa o json de cada url, em seguida, analisa cada json
e insere tais dados analisados na tabela 'd_sorte_resultado_importacao'.
}
procedure baixar_novos_concursos(sql_conexao: TZConnection; sgr_controle: TStringGrid);
var
ultimo_concurso, uA: integer;
obj_http: TIdHTTP;
url_lotofacil, conteudo_recebido, sql_gerado: string;
request: TIdHTTPRequest;
resultado_json: TJSONData;
json_chave_valor: TJSONObject;
json_valor: variant;
lista_de_url, lista_de_resultado_json: TStringList;
sql_query: TZQuery;
begin
// Pra obter o último concurso, deve-se enviar pra o webservice,
// um concurso vazio e um timestamp da hora atual da solicitação.
url_lotofacil := lotofacil_url_download;
url_lotofacil := ReplaceText(url_lotofacil, '@timestamp@', IntToStr(DateTimeToUnix(Now)));
url_lotofacil := ReplaceText(url_lotofacil, '@concurso@', '');
 
// Agora, vamos enviar a requisição
obj_http := TIdHTTP.Create;
obj_http.AllowCookies := True;
obj_http.HandleRedirects := True;
;
try
conteudo_recebido := obj_http.Get(url_lotofacil, IndyTextEncoding_UTF8);
conteudo_recebido := LowerCase(conteudo_recebido);
 
except
On exc: EIdHTTPProtocolException do
begin
MessageDlg('', 'Erro: ' + exc.Message, mtError, [mbOK], 0);
Exit;
end;
end;
 
// A requisição retorna um json, este json é um objeto
resultado_json := GetJSON(conteudo_recebido);
json_chave_valor := TJSONObject(resultado_json);
 
if not Assigned(json_chave_valor) then
begin
MessageDlg('', 'Erro: Nenhum concurso localizado', mtError, [mbOK], 0);
Exit;
end;
 
// Vamos obter o número do concurso.
json_valor := json_chave_valor.Get('nu_concurso');
if varType(json_valor) = varnull then
begin
MessageDlg('', 'Erro: Nenhum concurso localizado', mtError, [mbOK], 0);
Exit;
end;
 
// Aqui, obtemos o número do concurso.
ultimo_concurso := json_valor;
 
// Os concursos são sorteados sequencialmente, então, iremos gerar, a url
// pra cada concurso, indo do último ao primeiro concurso.
lista_de_url := TStringList.Create;
lista_de_url.Clear;
for uA := ultimo_concurso downto 1 do
begin
url_lotofacil := lotofacil_url_download;
url_lotofacil := ReplaceText(url_lotofacil, '@timestamp@', IntToStr(DateTimeToUnix(Now)));
url_lotofacil := ReplaceText(url_lotofacil, '@concurso@', IntToStr(uA));
lista_de_url.Add(url_lotofacil);
end;
 
// Agora, iremos fazer requisição pra o webservice pra obter o json de cada
// url.
lista_de_resultado_json := TStringList.Create;
lista_de_resultado_json.Clear;
for uA := 0 to Pred(lista_de_url.Count) do
begin
try
url_lotofacil := lista_de_url.Strings[uA];
conteudo_recebido := obj_http.Get(url_lotofacil, IndyTextEncoding_UTF8);
conteudo_recebido := LowerCase(conteudo_recebido);
lista_de_resultado_json.Add(conteudo_recebido);
except
On exc: Exception do
begin
// Isto, indica um erro no servidor, neste caso, devemos descartar esta requisição.
// e continuar o processamento, este erro vai ocorrer no concurso de número 1.
// Depois, irei criar um sql separadamente pra o concurso de número 1.
if (obj_http.ResponseCode >= 500) and (obj_http.ResponseCode <= 599) then
begin
continue;
end;
end;
end;

end;

 

Link to comment
Share on other sites

A variável lotofacil_url_download está definida em outro arquivo, desta forma:
lotofacil_url_download = 'http://loterias.caixa.gov.br/wps/portal/loterias/landing/lotofacil/!ut/p/a1/04_Sj9CPykssy0xPLMnMz0vMAfGjzOLNDH0MPAzcDbz8vTxNDRy9_Y2NQ13CDA0sTIEKIoEKnN0dPUzMfQwMDEwsjAw8XZw8XMwtfQ0MPM2I02-AAzgaENIfrh-FqsQ9wBmoxN_FydLAGAgNTKEK8DkRrACPGwpyQyMMMj0VAcySpRM!/dl5/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_61L0H0G0J0VSC0AC4GLFAD2003/res/id=buscaResultado/c=cacheLevelPage/=/?timestampAjax=@timestamp@&concurso=@concurso@';

Observe, que há isto na ulr @timestamp@  e @concurso@, que serve pra substituir pela data e pelo número do concurso.

Link to comment
Share on other sites

Aqui, está a função que gera o sql das informações retornada pelo json:

{
 Aqui, iremos gerar o sql do json que foi retornado.
}
function gerar_sql_dinamicamente(lista_de_resultado_json: TStringList): string;
var
    json_data: TJsonData;

    // Há 25 bolas, o índice corresponde ao número da bola,
    // o índice 0 não é utilizado.
    lotofacil_bolas: array[0..25] of integer;

    // Concurso retorna somente 15 bolas.
    lotofacil_concurso_bolas: array[0..15] of integer;

    lista_de_sql:    TStringList;
    uA, uB, indice_bolas: integer;
    json_value:      variant;
    data_do_concurso: TDateTime;
    outra_data:      TDateTime;
    data_concurso:   array of string;
    data_convertida: array of string;
    bolas_ordenadas: TStringArray;
    bola_numero:     longint;
    sql_insert:      string;
    formato_numero_decimal: TFormatSettings;
    arquivo_sql:     Text;
begin
    // O sql será formado desta maneira.
    // Insert campo_1, campo_2 values (valor_1, valor_2), (valor_1, valor_2);
    lista_de_sql := TStringList.Create;
    lista_de_sql.Clear;

    for uA := 0 to Pred(lista_de_resultado_json.Count) do
    begin
        Writeln(lista_de_resultado_json.Strings[ua]);
        json_data := GetJSON(lista_de_resultado_json.Strings[ua]);


        // ============ NÚMERO DO CONCURSO. ==================
        json_value := TJsonObject(json_data).Get('nu_concurso');
        if vartype(json_value) = varnull then
        begin
            continue;
        end;
        if uA <> 0 then
        begin
            lista_de_sql.Add(',');
        end;
        lista_de_sql.Add('(');
        lista_de_sql.Add(json_value);
        if json_value = 428 then
            Writeln('Erro.');

        if json_value = 3 then
        begin
            writeln('');
        end;

        // ============ DATA ======================
        // Aqui, a data está em formato brasileiro, interseparados
        // pelo caractere '/'.
        json_value := TJsonObject(json_data).Get('dt_apuracaostr');
        data_concurso := string(json_value).Split('/');
        if Length(data_concurso) <> 3 then
        begin
            MessageDlg('', 'Erro, data: ' + json_value + ' incorreto.',
                mtError, [mbOK], 0);
            Exit;
        end;
        // O arranjo está desta forma:
        // dia-mes-ano.
        // data_concurso[0] := dia
        // data_concurso[1] := mes
        // data_concurso[2] := ano
        SetLength(data_convertida, 3);
        // Iremos organizar a data neste formato:
        // ano-mes-dia.
        data_convertida[0] := data_concurso[2];
        data_convertida[1] := data_concurso[1];
        data_convertida[2] := data_concurso[0];
        lista_de_sql.Add(',' + QuotedStr(data_convertida[0] + '-' + data_convertida[1] +
            '-' + data_convertida[2]));

        // ============ DATA PRÓXIMO CONCURSO ======================
        // Aqui, a data está em formato brasileiro, interseparados
        // pelo caractere '/'.
        json_value := TJsonObject(json_data).Get('dtproximoconcursostr');
        if vartype(json_value) = varnull then
        begin
            lista_de_sql.Add(', null');
        end
        else
        begin
            data_concurso := string(json_value).Split('/');
            if Length(data_concurso) <> 3 then
            begin
                MessageDlg('', 'Erro, data: ' + json_value + ' incorreto.',
                    mtError, [mbOK], 0);
                Exit;
            end;
            // A data está neste formato:
            // dia-mes-ano.
            // data_concurso[0] := dia
            // data_concurso[1] := mes
            // data_concurso[2] := ano
            SetLength(data_convertida, 3);
            // Irei organizar a data neste formato:
            // ano-mes-dia.
            data_convertida[0] := data_concurso[2];
            data_convertida[1] := data_concurso[1];
            data_convertida[2] := data_concurso[0];
            lista_de_sql.Add(',' + QuotedStr(data_convertida[0] + '-' + data_convertida[1] +
                '-' + data_convertida[2]));
        end;

        // ================= BOLAS SORTEADAS =======================
        // No json, o campo resultadoordenado, armazena as bolas interseparadas
        // pelo caractere '-'
        json_value := TJsonObject(json_data).Get('resultadoordenado');
        bolas_ordenadas := string(json_value).Split('-');
        if Length(bolas_ordenadas) <> 15 then
        begin
            MessageDlg('', 'Erro, nao há 15 bolas no concurso.', mtError, [mbOK], 0);
            Exit;
        end;
        // Não iremos confiar no webservice, sempre devemos verificar por bolas
        // duplicadas e foram de ordem.
        // As bolas correspondem os índices do vetor, por isso, devemos
        FillChar(lotofacil_bolas, 26 * sizeof(integer), 0);
        for uB := 0 to Pred(Length(bolas_ordenadas)) do
        begin
            try
                // Verificar se o número da bola é válida pra aquele jogo.
                bola_numero := StrToInt(bolas_ordenadas[uB]);
                if (bola_numero < 1) or (bola_numero > 25) then
                begin
                    MessageDlg('', 'Erro, bola inválida: ' + IntToStr(bola_numero),
                        mtError, [mbOK], 0);
                    Exit;
                end;
            except
                On Exc: Exception do
                begin
                    MessageDlg('', 'Erro: ' + Exc.Message, mtError, [mbOK], 0);
                    Exit;
                end;
            end;
            // Verifica bolas duplicadas.
            if lotofacil_bolas[bola_numero] = 1 then
            begin
                MessageDlg('', 'Erro, bola já foi sorteada', mtError, [mbOK], 0);
                Exit;
            end;
            lotofacil_bolas[bola_numero] := 1;
        end;

        // Pega as bolas ordenadas.
        indice_bolas := 0;
        for uB := 1 to 25 do
        begin
            if lotofacil_bolas[uB] = 1 then
            begin
                lotofacil_concurso_bolas[indice_bolas] := uB;
                Inc(indice_bolas);
                if indice_bolas = 15 then
                begin
                    break;
                end;
            end;
        end;

        // Gera o sql dinamicamente.
        // As bolas está armazenada de 0 a 14.
        for uB := 0 to Pred(Length(bolas_ordenadas)) do
        begin
            lista_de_sql.Add(', ' + IntToStr(lotofacil_concurso_bolas[uB]));
        end;

        // ============================================================
        // Aqui, iremos pegar os valores dos campos:
        // qt_ganhador_faixa_1, que corresponde a quantidade de ganhadores de 15 números.
        // qt_ganhador_faixa_2, que corresponde a quantidade de ganhadores de 14 números.
        // qt_ganhador_faixa_3, que corresponde a quantidade de ganhadores de 13 números.
        // qt_ganhador_faixa_4, que corresponde a quantidade de ganhadores de 12 números.
        // qt_ganhador_faixa_5, que corresponde a quantidade de ganhadores de 11 números.
        // Tais números são números inteiros e não decimais, nenhuma conversão necessária.
        for uB := 1 to 5 do
        begin
            json_value := TJsonObject(json_data).Get('qt_ganhador_faixa' + IntToStr(uB));
            lista_de_sql.Add(',' + IntToStr(json_value));
            Writeln(FloatToStr(json_value));
        end;

        // ============================================================
        // Aqui, iremos pegar os valores dos campos:
        // qt_rateio_faixa_1, que corresponde ao valor que cada ganhador de 15 acertos recebeu.
        // qt_rateio_faixa_2, que corresponde ao valor que cada ganhador de 14 acertos recebeu.
        // qt_rateio_faixa_3, que corresponde ao valor que cada ganhador de 13 acertos recebeu.
        // qt_rateio_faixa_4, que corresponde ao valor que cada ganhador de 12 acertos recebeu.
        // qt_rateio_faixa_5, que corresponde ao valor que cada ganhador de 11 acertos recebeu.
        // Aqui, o número está no formato americano.
        formato_numero_decimal.DecimalSeparator := '.';
        formato_numero_decimal.ThousandSeparator := ',';
        for uB := 1 to 5 do
        begin
            json_value := TJsonObject(json_data).Get('vr_rateio_faixa' + IntToStr(uB));
            lista_de_sql.Add(',' + FloatToStr(double(json_value), formato_numero_decimal));
            Writeln(FloatToStr(double(json_value), formato_numero_decimal));
        end;

        // ================ VALOR ACUMULADO FAIXA 1 ====================
        // No json, 'vracumuladofaixa1' está em formato numérico brasileiro.
        // Ele pode ser nulo, devemos evitar isto.
        json_value := TJsonObject(json_data).Get('vracumuladofaixa1');
        if vartype(json_value) = varnull then
        begin
            lista_de_sql.Add(', null');
        end
        else
        begin
            formato_numero_decimal.DecimalSeparator := ',';

            // Se fossemos converter um string numérico em formato brasileiro, sem especificar,
            // o formato do número, StrToFloat, espera que o número esteja em formato americano,
            // por isso, devemos explicitar que o string tem um formato numérico do brasil.
            json_value := ReplaceText(json_value, '.', '');
            json_value := StrToFloat(json_value, formato_numero_decimal);

            // Observe agora, que json_value, está em formato americano, pois float, são números
            // decimais com ponto, sempre será desta forma, se quisermos converter pra o formato
            // brasileiro, era simplesmente informar com isto, neste caso, não precisamos mais
            // mais pra garantir iremos explicitar que quando converter de float pra string,
            // o formato seja americano pois, sql espera receber um número em formato americano.
            formato_numero_decimal.DecimalSeparator := '.';
            formato_numero_decimal.ThousandSeparator := ',';
            lista_de_sql.Add(',' + FloatToStr(double(json_value), formato_numero_decimal));
            Writeln(FloatToStr(double(json_value), formato_numero_decimal));
        end;

        // ================ VALOR ACUMULADO FAIXA 2 ====================
        // No json, 'vracumuladofaixa2' está em formato numérico brasileiro.
        json_value := TJsonObject(json_data).Get('vracumuladofaixa2');
        if vartype(json_value) = varnull then
        begin
            lista_de_sql.Add(', null');
        end
        else
        begin
            formato_numero_decimal.DecimalSeparator := ',';

            // Se fossemos converter um string numérico em formato brasileiro, sem especificar,
            // o formato do número, StrToFloat, espera que o número esteja em formato americano,
            // por isso, devemos explicitar que o string tem um formato numérico do brasil.
            json_value := ReplaceText(json_value, '.', '');
            json_value := StrToFloat(json_value, formato_numero_decimal);

            // Observe agora, que json_value, está em formato americano, pois float, são números
            // decimais com ponto, sempre será desta forma, se quisermos converter pra o formato
            // brasileiro, era simplesmente informar com isto, neste caso, não precisamos mais
            // mais pra garantir iremos explicitar que quando converter de float pra string,
            // o formato seja americano pois, sql espera receber um número em formato americano.
            formato_numero_decimal.DecimalSeparator := '.';
            lista_de_sql.Add(',' + FloatToStr(double(json_value), formato_numero_decimal));
            Writeln(FloatToStr(double(json_value), formato_numero_decimal));

            // ======================= Valor arrecadado =====================
            // O campo 'vrarrecadado' está em formato numérico brasileiro.
            json_value := TJsonObject(json_data).Get('vrarrecadado');
            if vartype(json_value) = varnull then
            begin
                lista_de_sql.Add(', null');
            end
            else
            begin
                formato_numero_decimal.DecimalSeparator := ',';
                // Retirar o separador de milhar, pois o número está em formato brasileiro.
                // e a função StrToCurr não aceita o separador de milhar ao realizar a conversão.
                json_value := ReplaceText(json_value, '.', '');
                json_value := StrToFloat(json_value, formato_numero_decimal);
                // Agora converter em formato numérico americano.
                formato_numero_decimal.DecimalSeparator := '.';
                lista_de_sql.Add(',' + FloatToStr(double(json_value), formato_numero_decimal));
                Writeln(FloatToStr(double(json_value), formato_numero_decimal));
            end;
        end;

        // ======================= Valor acumulado especial ================
        // O campo 'vracumuladoespecial' está em formato numérico brasileiro
        formato_numero_decimal.DecimalSeparator := ',';
        // Retirar o separador de milhar, pois o número está em formato brasileiro.
        // e a função StrToFloat não aceita o separador de milhar ao realizar a conversão.
        json_value := TJsonObject(json_data).Get('vracumuladoespecial');
        if vartype(json_value) = varnull then
        begin
            lista_de_sql.Add(', null');
        end
        else
        begin
            formato_numero_decimal.DecimalSeparator := ',';
            json_value := ReplaceText(json_value, '.', '');
            json_value := StrToFloat(json_value, formato_numero_decimal);
            // Agora converter em formato americano.
            formato_numero_decimal.DecimalSeparator := '.';
            lista_de_sql.Add(',' + FloatToStr(double(json_value), formato_numero_decimal));
            Writeln(FloatToStr(double(json_value), formato_numero_decimal));
        end;

        // ===================== ESTIMATIVA ===========================
        // O campo 'vrestimativa' está em formato numérico brasileiro.
        json_value := TJsonObject(json_data).Get('vrestimativa');
        if vartype(json_value) = varnull then
        begin
            lista_de_sql.Add(', null');
        end
        else
        begin
            formato_numero_decimal.DecimalSeparator := ',';
            json_value := ReplaceText(json_value, '.', '');
            json_value := StrToFloat(json_value, formato_numero_decimal);
            // Agora, converter em formato americano.
            formato_numero_decimal.DecimalSeparator := '.';
            lista_de_sql.Add(',' + FloatToStr(double(json_value), formato_numero_decimal));
            Writeln(FloatToStr(double(json_value), formato_numero_decimal));
        end;

        // ======================= é um concurso especial ======================
        json_value := TJsonObject(json_data).Get('ic_concurso_especial');
        if json_value = True then
        begin
            lista_de_sql.add(',true');
        end
        else if json_value = False then
        begin
            lista_de_sql.Add(',false');
        end
        else
        begin
            lista_de_sql.Add(',null');
        end;

        // =================== sorteio acumulado =====================
        json_value := TJsonObject(json_data).Get('sorteio_acumulado');
        if json_value = True then
        begin
            lista_de_sql.add(',true');
        end
        else if json_value = False then
        begin
            lista_de_sql.Add(',false');
        end
        else
        begin
            lista_de_sql.Add(',null');
        end;

        // =================== Rateio processamento ==================
        json_value := TJsonObject(json_data).Get('rateioprocessamento');
        if json_value = True then
        begin
            lista_de_sql.add(',true');
        end
        else if json_value = False then
        begin
            lista_de_sql.Add(',false');
        end
        else
        begin
            lista_de_sql.Add(',null');
        end;

        // Fecha o insert do registro atual
        lista_de_sql.Add(')');

    end;

    // Gera o cabeçãlho do insert, observe que a ordem dos campos
    // tem que ser igual ao insert dos valores, no loop for acima,
    // se o usuário alterar o valor dos insert de posição, deve-se
    // alterar este cabeçalho.
    sql_insert := 'Insert into lotofacil.lotofacil_resultado_importacao(';
    sql_insert := sql_insert + 'concurso, data, data_proximo_concurso,';
    sql_insert := sql_insert + 'b_1, b_2, b_3, b_4, b_5, b_6, b_7, b_8, b_9, b_10, b_11, b_12, b_13, b_14, b_15';
    sql_insert := sql_insert + ',qt_ganhadores_15_numeros';
    sql_insert := sql_insert + ',qt_ganhadores_14_numeros';
    sql_insert := sql_insert + ',qt_ganhadores_13_numeros';
    sql_insert := sql_insert + ',qt_ganhadores_12_numeros';
    sql_insert := sql_insert + ',qt_ganhadores_11_numeros';
    //sql_insert := sql_insert + ',qt_ganhadores_mes_de_sorte';
    sql_insert := sql_insert + ',rateio_15_numeros';
    sql_insert := sql_insert + ',rateio_14_numeros';
    sql_insert := sql_insert + ',rateio_13_numeros';
    sql_insert := sql_insert + ',rateio_12_numeros';
    sql_insert := sql_insert + ',rateio_11_numeros';

    sql_insert := sql_insert + ', acumulado_15_numeros';
    sql_insert := sql_insert + ', acumulado_14_numeros';

    sql_insert := sql_insert + ', valor_arrecadado';
    sql_insert := sql_insert + ', valor_acumulado_especial';
    sql_insert := sql_insert + ', estimativa_premio';

    sql_insert := sql_insert + ', concurso_especial';
    sql_insert := sql_insert + ', sorteio_acumulado';
    sql_insert := sql_insert + ', rateio_processamento';

    sql_insert := sql_insert + ') values';

    lista_de_sql.Insert(0, sql_insert);
    Exit(lista_de_sql.Text);
end; 

Link to comment
Share on other sites

Guest Zangado

@fabiuz 

 

desanimei com isso de loteria, e o pessoal só dá valor a matrizes e esquemas oq torna algo mais trabalhado perda de tempo se não for apenas para uso pessoal

sobre loteria existem varias maneiras de se baixar o resultado e no final oq conta mesmo é oq vc apostou 

o pior que isso de mexer com loteria vicia tão ou mais que apostar 

 

Link to comment
Share on other sites

No código que postei acima, é parte de um programa que criei que baixa os resultados automaticamente do site da caixa, antes, eu baixava do arquivo zip, entretanto, no site quando saia o resultado, no arquivo zip era disponibilizado um dia depois.

Meu programa é feito em freepascal/lazarus, eu geralmente, só aperto um botão, ele baixa o json, analisa-o e inseri em tabelas do banco de dados.

Pra mim, é improdutivo, vc acessar um site, baixar o arquivo, em excel e depois copia pra as colunas.

Eu uso software, que baixa automaticamente diretamente da caixa.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...