Skip to content

Instantly share code, notes, and snippets.

@sergiospagnuolo
Created February 16, 2024 16:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sergiospagnuolo/821f3f53c4617205339e7fdabb6f32c5 to your computer and use it in GitHub Desktop.
Save sergiospagnuolo/821f3f53c4617205339e7fdabb6f32c5 to your computer and use it in GitHub Desktop.
Puxa automaticamente dados de gastos de publicidade online da SECOM/PR
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())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment