R/fetcher_votos_camara.R

Defines functions fetch_votos_por_ano_camara fetch_votos_por_votacao_camara

Documented in fetch_votos_por_ano_camara fetch_votos_por_votacao_camara

#' @title Importa e processa dados de votações na Câmara dos Deputados
#' @description Recebe informações da votação específica para obtenção dos votos
#' @param id_votacao Id da votação no contexto interno do Voz Ativa
#' @return Dataframe contendo id da votação, id e voto e partido dos deputados que participaram de cada votação
#' @examples id_votacao = "2265603-43"
#' votacoes <- fetch_votos_por_votacao_camara("2179189-88")
#' @export
fetch_votos_por_votacao_camara <- function(id_votacao) {
  library(tidyverse)
  library(RCurl)
  library(jsonlite)
  
  url <-  stringr::str_interp("https://dadosabertos.camara.leg.br/api/v2/votacoes/${id_votacao}/votos")
  
  print(paste0("Baixando votos da votação ", id_votacao))
      
  votos <- (RCurl::getURL(url) %>% 
                  jsonlite::fromJSON(flatten = TRUE))$dados
  
  if(is.list(votos) && length(votos) == 0) {
    return(tibble())
  }

  votos <- votos %>% mutate(id_votacao = id_votacao)
      
  votos_alt <- votos %>% 
      select(
        id_votacao,
        id_parlamentar = deputado_.id,
        partido = deputado_.siglaPartido,
        voto = tipoVoto
        )
      
  return(votos_alt)
}

#' @title Recupera informações de votos de todas as votações de uma determinada proposição para um determinado ano
#' @description A partir do id da proposição e do ano recupera votos que aconteceram na Câmara dos Deputados
#' @param id_votacao ID da votacao
#' @param ano Ano para o período de votações
#' @return Votos dos parlametares para a proposição (inclui várias votações)
#' @examples
#' votos <- fetch_votos_por_ano_camara(2190237, 2019)
#' @export
fetch_votos_por_ano_camara <- function(id_proposicao, ano) {
  library(tidyverse)
  library(lubridate)
  
  votacoes_filtradas <- fetch_votacoes_por_proposicao_camara(id_proposicao)
  
  votacoes_filtradas$data <- ymd_hms(votacoes_filtradas$data)
  votacoes_filtradas$data_ano <- year(votacoes_filtradas$data) 
  
  votacoes_filtradas <- filter(votacoes_filtradas, data_ano == ano) %>% select(-data_ano)
  
  votacoes_filtradas <- votacoes_filtradas %>%
    distinct(id_votacao, .keep_all = T)
  
  votos_raw <- tibble(id_votacao = votacoes_filtradas$id_votacao) %>%
    rowwise(.) %>% 
    mutate(dados = map(
      id_votacao,
      fetch_votos_por_votacao_camara)) %>%
    select (-id_votacao) %>% 
    unnest(dados)  %>%
    ungroup()
  
  votos <- tryCatch({
    votos_raw %>%
      enumera_voto() %>%
      select(id_votacao, id_parlamentar, partido, voto) %>%
      distinct()
  }, error = function(e) {
    print(e)
    print(paste0("Proposição: ", id_proposicao, ". Votos recuperados: ", nrow(votos_raw)))
    return(tibble::tibble(id_votacao = character(),
                          id_parlamentar = integer(),
                          partido = character(),
                          voto = numeric()))
  })
  
  return(votos)
}
parlametria/perfil-parlamentarR documentation built on Feb. 9, 2022, 2:08 a.m.