Ref: https://gestaosecom.presidencia.gov.br/gestaosecom/liquidacao/pagamento/ordem-cronologica
Projeto do Núcleo Jornalismo - https://nucleo.jor.br
Ref: https://gestaosecom.presidencia.gov.br/gestaosecom/liquidacao/pagamento/ordem-cronologica
Projeto do Núcleo Jornalismo - https://nucleo.jor.br
library(readr) | |
library(jsonlite) | |
library(httr) | |
library(tidyverse) | |
library(lubridate) | |
library(deflateBR) | |
library(fst) | |
anos <- c( 2016 | |
,2017 | |
,2018 | |
,2019 | |
,2020 | |
,2021 | |
,2022 | |
,2023 | |
) | |
lista <- ls() | |
for (a in anos){ | |
url <- paste0("https://gestaosecom.presidencia.gov.br/gestaosecom/liquidacao/pagamento/ordem-cronologica/exportar?tipo_exportacao=dados-completos&data_pagamento_inicio=01/01/", a, "&data_pagamento_fim=31/12", a) | |
resposta <- GET(url) | |
if (status_code(resposta) == 200) { | |
# envia resposta do header | |
content_disposition <- headers(resposta)$`content-disposition` | |
# puxa o nome do arquivo CSV | |
d <- sub(".*filename=([^\"]*).*", "\\1", content_disposition) | |
# cria arquivo temporario | |
tmp_file <- tempfile(fileext = ".csv") | |
writeBin(content(resposta, "raw"), tmp_file) | |
# faz a leitura do CSV | |
data <- read.csv(tmp_file, sep = ";", fileEncoding = "ISO-8859-1") | |
data$ano <- a | |
# seleciona apenas as colunas que interessam | |
data <- data %>% select(Contratada,Nº.Processo,Tipo.de.contrato,Tipo.de.processo,Data.do.Ateste,Data.do.Pagamento,Nº.Empenho,Tipo.Rubrica,Tema,Valor.bruto.da.contratada,Valor.líquido.da.contratada,Veículo...Fornecedor,Valor.bruto.do.fornecedor,Valor.líquido.do.fornecedor,Nome.fantasia.do.veículo,Grupo...Editora,Meios,Tipo.da.praça.de.veiculação,Praças.de.Veiculação,ano) | |
# concatena os dados | |
lista <- c(lista, list(data)) | |
} else { | |
cat("Erro:", status_code(resposta), "\n") | |
} | |
} | |
# Faz o bind dos dados no data.frame principal e aplica filtros de colunas e valores necessarios | |
d <- do.call(rbind, lista) | |
d <- d %>% slice(-1:-9) | |
d <- d %>% | |
filter(Tipo.de.contrato == "Publicidade") %>% | |
filter(Meios == "Internet") | |
# faz limpeza básica de dados para formatação correta | |
d$custo_fornecedor <- gsub(",", ".", d$Valor.líquido.do.fornecedor) | |
d$custo_fornecedor <- as.numeric(d$custo_fornecedor) | |
d$data <- dmy(d$Data.do.Pagamento) | |
# calcula reajuste pela inflacao | |
d$custo_fornecedor_ajustado <- deflate(d$custo_fornecedor, d$data, "12/2023", "ipca") | |
# transforma os dados em formato wide para melhor leitura | |
d <- d %>% separate_wider_delim(Veículo...Fornecedor, delim = " / ", names = c("CNPJ", "Nome")) | |
# grava em fst ou csv (FST é mais rápido em R) | |
#write.fst(d, "data.fst", compress = 100) | |
#write.csv(d,"data.csv") | |
# limpa todo o ambiente para economizar memória | |
#rm(resposta, d, url, content_disposition, tmp_file) | |
#rm(list = ls()) |