Guest Zangado Posted November 17, 2018 Share Posted November 17, 2018 @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 Quote Link to comment Share on other sites More sharing options...
Rany Posted November 17, 2018 Author Share Posted November 17, 2018 @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é. Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 17, 2018 Share Posted November 17, 2018 @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á Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 17, 2018 Share Posted November 17, 2018 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 Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 18, 2018 Share Posted November 18, 2018 @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 Quote Link to comment Share on other sites More sharing options...
Rany Posted November 18, 2018 Author Share Posted November 18, 2018 @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. Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 18, 2018 Share Posted November 18, 2018 @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 Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 18, 2018 Share Posted November 18, 2018 @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 Quote Link to comment Share on other sites More sharing options...
Rany Posted November 18, 2018 Author Share Posted November 18, 2018 @Zangado Pode ser uma possibilidade sim, sem contar que facilmente dá para eliminar umas 200 linhas apenas criando mais alguns FOR... Também a possibilidade de criar umas 2 funções de retorno, onde quantidade de linhas diminui. Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 20, 2018 Share Posted November 20, 2018 @Rany qual seu grau de conhecimento e facilidade com a matemática e logica Quote Link to comment Share on other sites More sharing options...
Rany Posted November 21, 2018 Author Share Posted November 21, 2018 @Zangado Difícil mensurar, mas acredito que seja na média dos demais. Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 21, 2018 Share Posted November 21, 2018 @Rany ia perguntar se podia ajudar em automatizar uma ideia, mas deixa quieto, é algo que exige um pouco mais de conhecimento r facilidade nessa area Quote Link to comment Share on other sites More sharing options...
Rany Posted November 21, 2018 Author Share Posted November 21, 2018 @Zangado Tudo bem, conheço minhas limitações, mas se mesmo assim no futuro quiser me apresentar sua ideia estou a disposição. Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 21, 2018 Share Posted November 21, 2018 @Rany kkk a ideia é segredo não é algo que vi numa pagina e acho que seria uma boa aplicar em loteria mas vai exigir algo mais para definir a logica com loterias Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted November 21, 2018 Share Posted November 21, 2018 @Rany te mandei uma mp Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 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. Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 No exemplo, acima o navegador é firefox, mas o mesmo ocorre pra Chrome, lá, o nome é "Inspecionar", ao invés de "Inspecionar elemento". Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 { "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" } Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 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; Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 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. Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 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; Quote Link to comment Share on other sites More sharing options...
edson_spbr Posted January 13, 2019 Share Posted January 13, 2019 https://asloterias.com.br/download-todos-resultados-dia-de-sorte Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted January 13, 2019 Share Posted January 13, 2019 @edson_spbr no caso seria depender apenas da caixa e não de um site avulso Quote Link to comment Share on other sites More sharing options...
Guest Zangado Posted January 13, 2019 Share Posted January 13, 2019 @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 Quote Link to comment Share on other sites More sharing options...
fabiuz Posted January 13, 2019 Share Posted January 13, 2019 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.