diff --git a/R/colunas_constants.R b/R/colunas_constants.R index 9e6aca7..17ce7ee 100644 --- a/R/colunas_constants.R +++ b/R/colunas_constants.R @@ -251,5 +251,9 @@ # Comissões .COLNAMES_COMISSOES_SENADO <- c("CARGO"="character","num.x"="integer","PARTIDO"="character","UF"="character","TIPO_VAGA"="character", "PARLAMENTAR.x"="character") +# Composição Camara +.COLNAMES_COMPOSICAO_CAMARA <- c("cargo"="character","id"="character","nome"="character","partido"="character", + "uf"="character","situacao"="character") + # Deferimento .COLNAMES_DEFRIMENTO <- c("proposicao_id"="character","deferimento"="character") diff --git a/R/comissoes.R b/R/comissoes.R new file mode 100644 index 0000000..d514637 --- /dev/null +++ b/R/comissoes.R @@ -0,0 +1,48 @@ +#' @title Fetches comissions on Champber +#' @description Fetches a dataframe containing information about the comission requested +#' @param sigla Comissao's id +#' @return Returns a dataframe containing information about the comission requested +#' fetch_composicao_comissoes_camara('cmads') +fetch_composicao_comissoes_camara <- function(sigla_comissao, apelido_comissao) { + print(sigla_comissao) + orgaos_camara <- + fetch_orgaos_camara() %>% + dplyr::mutate_all(as.character) %>% + dplyr::filter(trimws(sigla) == toupper(sigla_comissao) & + trimws(apelido) == toupper(apelido_comissao)) %>% + dplyr::select(uri) %>% head(1) + + column_names <- names(.COLNAMES_COMPOSICAO_CAMARA) + df <- data.frame(matrix(ncol = length(column_names), nrow = 0)) + + if (nrow(orgaos_camara) == 0) { + warning("Comissão não encontrada") + } else { + id <- stringr::str_extract(orgaos_camara[[1]], '\\d+(?!.*\\d)') + eventos_list <- .get_from_url(.CAMARA_WEBSITE_LINK, .COMPOSICAO_CAMARA_PATH, paste0('IDOrgao=', id))$content %>% + rawToChar() %>% + XML::xmlParse() %>% + XML::xmlToList() + + df <- + eventos_list %>% + jsonlite::toJSON() %>% + jsonlite::fromJSON() %>% + magrittr::extract2('membros') %>% + tibble::as.tibble() %>% + t() %>% + as.data.frame() %>% + tibble::rownames_to_column("VALUE") + } + + names(df) <- names(.COLNAMES_COMPOSICAO_CAMARA) + df %>% + dplyr::rowwise() %>% + dplyr::mutate(partido = ifelse(length(partido) == 0, "", partido)) %>% + dplyr::mutate(uf = ifelse(length(uf) == 0, "", uf)) %>% + dplyr::mutate(id = ifelse(length(id) == 0, "", id)) %>% + tidyr::unnest() %>% + dplyr::arrange(nome) %>% + .assert_dataframe_completo(.COLNAMES_COMPOSICAO_CAMARA) %>% + .coerce_types(.COLNAMES_COMPOSICAO_CAMARA) +} diff --git a/R/constants.R b/R/constants.R index a570913..559e313 100644 --- a/R/constants.R +++ b/R/constants.R @@ -27,6 +27,7 @@ # Path site Câmara .APENSADAS_CAMARA_PATH <- "/SitCamaraWS/Proposicoes.asmx/ObterProposicaoPorID" +.COMPOSICAO_CAMARA_PATH <- "/SitCamaraWS/Orgaos.asmx/ObterMembrosOrgao" .EMENDAS_SUBSTITUTIVOS_REDACAOFINAL_CAMARA_PATH <- "/SitCamaraWS/Orgaos.asmx/ObterEmendasSubstitutivoRedacaoFinal" .EVENTOS_PROPOSICAO_CAMARA_PATH <- "/proposicoesWeb/sessoes_e_reunioes" diff --git a/tests/testthat/test_comissoes.R b/tests/testthat/test_comissoes.R new file mode 100644 index 0000000..b11ec9f --- /dev/null +++ b/tests/testthat/test_comissoes.R @@ -0,0 +1,22 @@ +context("Comissoes") + +SIGLA_ID <<- c("ccjc", "cft", "cdc", "cdeics", "cctci", "cme", "capadr", "cpd") + +APELIDO <<- c("CONSTITUIÇÃO E JUSTIÇA E DE CIDADANIA", "FINANÇAS E TRIBUTAÇÃO", + "DEFESA DO CONSUMIDOR", "DESENVOLV. ECONÔMICO, INDÚSTRIA, COMÉRCIO E SERV.", + "CIÊNCIA E TECNOLOGIA, COMUNICAÇÃO E INFORMÁTICA", + "MINAS E ENERGIA", "AGRICULTURA, PECUÁRIA, ABASTECIMENTO DESENV. RURAL", + "DEFESA DOS DIREITOS DAS PESSOAS COM DEFICIÊNCIA") + +test_that('fetch_composicao_comissoes_camara() returns valid dataframe', { + df_sigla_apelido <- tibble::tribble(~ sigla, ~ apelido, + SIGLA_ID, APELIDO) %>% + tidyr::unnest() + + get_is_empty <- function(sigla, apelido) { + nrow(fetch_composicao_comissoes_camara(sigla, apelido)) != 0 + } + expect_true( + all(purrr::map2(df_sigla_apelido$sigla, df_sigla_apelido$apelido, + ~ get_is_empty(.x, .y)))) +})