Jump to content
edionas

Exportação de dados do portal governo transparente

Recommended Posts

Bom dia
a tempos tenho tentando exportar dados deste portal (https://www.governotransparente.com.br/transparencia/api/v1/json/remessas/1194487) para uma tabela em HTML, pois preciso exibir os dados sem necessidade de ter que ir para uma pagina externa do site.

Share this post


Link to post
Share on other sites

Desculpa, eu não entendi bem a pergunta mas acredito que você queira algo como...

 

<style>
  .wrapper .table {
    border-collapse: collapse;
  }

  .wrapper .table .table-header th {
    font-weight: bold;
    border: 1px solid silver;
    background: #eee;
  }

  .wrapper .table .table-body td {
    border: 1px solid silver;
  }
</style>

<div id="wrapper" class="wrapper"></div>

<!-- estes scripts são polifills para que as Promises (then, catch) e o método fetch funcionem em navegadores mais antigos -->
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/3.0.0/fetch.min.js"></script>

<script>
(function () { // utilizado para isolar as variáveis e não causar problemas de segurança futuros
  var url = 'https://www.governotransparente.com.br/transparencia/api/v1/json/remessas/1194487';
  var resultWrapper = document.getElementById('wrapper');

  // aqui fica a requisição e as ações sobre cada uma delas
  fetch(url)
    .then(checkServerResponse)
    .then(toJSON)
    .then(createTable)
    ['catch'](showErrorMessage); // caso aconteça algum erro em qualquer uma das ações anteriores, faça o tratamento de erros ;-)

  // tratamento de erros
  function showErrorMessage(err) {
    resultWrapper.innerHTML = '<pre>Erro:\r' + err.toString() + '</pre>';
  }

  // verifica se a resposta do servidor foi um sucesso
  function checkServerResponse(res) {
    if (res.ok) {
      return res;
    }
    throw new Error('Unable to fetch data from server. Status: ' + res.status);
  }

  // tenta converter a resposta do servidor em objeto json manipulável ao invés de texto puro
  function toJSON(res) {
    return res.json();
  }

  // converte os dados em tabela e insere no resultWrapper
  function createTable(data) {
    var heads = Object.keys(data).map(function (item) {
      return '<th>' + item + '</th>';
    }).join('');

    var contents = Object.values(data).map(function (item) {
      return '<td>' + item + '</td>';
    }).join('');

    resultWrapper.innerHTML = [
      '<table class="table">',
        '<thead class="table-header">',
          '<tr>',
              heads,
          '</tr>',
        '</thead>',
        '<tbody class="table-body">',
          '<tr>',
              contents,
          '</tr>',
        '</tbody>',
      '</table>',
    ].join('');
  }
});
</script>

Você pode ver o código funcionando aqui: https://jsfiddle.net/gkezhv85/5/

 

Tomei a liberdade de fazer um código mais moderno, não utilizando jQuery e utilizando funcionalidades que os navegadores mais modernos já utilizam como o fetch e as Promises, o que faz o código ficar, na miha opinião, mais organizado, já que cada ação fica em uma função isolada.

 

Também optei por fazer dessa maneira para instigar os estudos do pessoal aqui no fórum... espero ter ajudado, qualquer coisa dá um grito :-D

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By brunoogm
      Pessoal, vou iniciar um desenvolvimento mobile usando Xamarin
      e gostaria de saber se alguém conhece alguma maneira
      ou tenha algum doc. de como utilizar PHP e MySql (e se necessário Json)
      para realizar um CRUD e a partir daí eu poder me entender com a plataforma...
       
      Desde já obrigado.
       
       
    • By Gilberto Jr
      Boa tarde.
       
      Eu esto com um probleminha que eu não estou conseguindo resolver.
       
      Estou lendo um json atraves de uma webservice https://jsonplaceholder.typicode.com/photos atraves do codigo abaixo.
       
      <html> <head> <title>Teste</title> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.min.js"></script> <!-- Adicionando Javascript --> <script type="text/javascript" > $(document).ready(function(){ $("#search").click(function(){ $.ajax({ type: "GET", dataType: "json", url: "https://jsonplaceholder.typicode.com/photos", success: function(data) { for (var i in data) { //vai passar por todos os objetos dentro do array $("#title").text(data[i]["title"]); $("#id").text(data[i]["id"]); $("#albumId").text(data[i]["albumId"]); $("#thumbnailUrl").attr("src",data[i]["thumbnailUrl"]); $("#url").attr("src",data[i]["url"]); } } }); }) }); // END Function, END ready </script> </head> <body> <input type="button" placeholder="Busca" id="search" value="Buscar"> <section> <div class="container"> <div class="row" id="content"> <br/> <div id="id"></div><br/> <div id="albumId"></div><br/> <div id="title"></div><br/> <img src="" id="thumbnailUrl"><br/> <img src="" id="url"><br/> </div> </div> </section> </body> </html> Eu estou até conseguindo trazer as informações. Porem vem o ultimo dado do JSON, 
       
      E eu também, tenho que mostrar todas as informações do arquivo JSON. Fazer um for para mostrar todos os dados na tela.
       
      Mas eu não estou conseguindo, poderia me ajudar?
       
      Att;
      Gilberto Jr
    • By Regiane Primoni
      Fiz toda integração da API 3.0 da Cielo utilizando o ambiente de teste deu tudo certo, quando coloquei url e credenciais de produção retorna erro 405.
      O certificado + os 3 arquivos cielo estão instalados.
       
      O código:
      <?php
      $array = array(
          "MerchantOrderId" => "2014111703",
          "Payment" => array(
              "Type"=> "CreditCard",   
              "Amount"=> "15700",   
              "Installments"=> "1",   
              "SoftDescriptor"=> "123456789ABCD",
              "CreditCard" => array(
                  "CardNumber" => "4551870000000183",   
                  "Holder" => "Teste Holder",   
                  "ExpirationDate" => "10/2030",   
                  "SecurityCode" => "123",
                  "Brand" => "Visa"
              ),
          ), 
      );
      echo $json = json_encode($array);                                                                           
      $ch = curl_init('https://api.cieloecommerce.cielo.com.br/'); 
      curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "POST");   
      curl_setopt($ch, CURLOPT_POSTFIELDS, $json); 
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);  
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
          'Content-Type: application/json',
          'MerchantId: ' . '8b08ea04-951e-414e-9541-d2d19c36fdf6',
          'MerchantKey: ' . 'QJCRZAUKNODFHXBISETYIJXSTMNTAKSDVEKCISGI',
          'Content-Length: ' . strlen($json))
      );                                                                                                        
      $result = curl_exec ($ch);
      $novo = json_decode($result);
      echo "TID ". $novo->Payment->Tid;
       
      O erro:
      {"MerchantOrderId":"2014111703","Payment":{"Type":"CreditCard","Amount":"15700","Installments":"1","SoftDescriptor":"123456789ABCD","CreditCard":{"CardNumber":"4551870000000183","Holder":"Teste Holder","ExpirationDate":"10\/2030","SecurityCode":"123","Brand":"Visa"}}}
      Server Error
      405 - HTTP verb used to access this page is not allowed.
      The page you are looking for cannot be displayed because an invalid method (HTTP verb) was used to attempt access.
       
      Alguem consegue me ajudar por favor
       
    • By evandrofelipe
      Como consigo ler este retorno e jogar para dentro de uma variável?
       
      ["total"]=> int(771) ["page"]=> int(1) ["total_pages"]=> int(78) } ...
      $data = curl_exec($ch);
      $info = json_decode($data, true);
      curl_close($ch);
       
      fiz assim, mas sem sucesso:
      echo '<p>';
      echo $info['buildings']['id'];
      echo '<p>';
       
      fiz assim também e também sem sucesso:
      foreach($info as $registro)
      {$i=$i+1;
      echo $registro->url[$i].'<p>';
      }
       
      agradeço a quem poder ajudar.
    • By luannsr12
      Olá pessoal, ontem coloquei um repositório em meu GitHub , para quem deseja rastrear encomendas dos correios usando php, a chamada é bem simples, e retorna em JSON:
       
      <?php $obj = "CODIGO DE RASTREIO"; $url = "http://localhost/rastreio/api/obj.php?obj={$obj}"; $rastreio = file_get_contents($url); echo $rastreio; JSON:
      { "0": { "date":"10/06/2019", "hour":"14:14", "location":"SAO PAULO / SP", "action":"Objeto encaminhado", "message":"Objeto encaminhado de Agência dos Correios em SAO PAULO / SP para Unidade de Tratamento em SAO PAULO / SP", "change":"há 2 dias" } } https://github.com/luannsr12/correios-rastreio
      Vlw!!
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.