R/extraction.R

#' Capturar processos
#' @description Esta funcao captura os meta-dados de todas as acoes de controle concentrado
#' do Supremo Tribunal Federal (STF).
#' @usage extractProcess(categoria, min = 1)
#' @param categoria O tipo de acao: ADIN, ADPF, ADCN ou ADOM
#' @param minimo Inicio da serie de processos a ser coletada. min = 1 e o default
#' @param maximo Fim da serie de processos
#' @details Os limites sao atualizados pelo autor do pacote conforme as atualizacoes do STF
#' @return Um dataframe com os meta-dados das acoes
#' @import rvest stringr dplyr tidyr httr
#' @export
extractProcess <- function(categoria, minimo = 1, maximo){

  min <- as.numeric(minimo)
  max <- as.numeric(maximo)

  processos <- data.frame()

  url_base <- "http://www.stf.jus.br/portal/peticaoInicial/verPeticaoInicial.asp?base=TIPO&s1=%20$%20&processo=NUM"

  if(is.null(max) | is.na(max) | max == 0){
    # valores atualizados em 06 de julho de 2017 - 10:00
    switch(categoria,
           ADIN={max=5740},
           ADPF={max=471},
           ADCN={max=46},
           ADOM={max=41}
    )
  }
  j=min
  i=min
  while(j<=max){
    while(i<=max){
      url_peticao <- gsub("TIPO",categoria,url_base)
      url_peticao <- gsub("NUM",i,url_peticao)

      pagina_peticao <- GET(url_peticao) %>% read_html(options = "HUGE")

      check <- pagina_peticao %>%
        html_nodes(xpath = '//*[@id="corpo"]/div[2]/text()') %>%
        html_text()
      check<-str_replace_all(check, "[\r\n\t]" , "")
      ifelse(!is.na(check[3]), ifelse(str_detect(check[3],"Nenhum resultado foi encontrado !"), break, no = "" ), no = "")

      tipo <- categoria
      num <- i
      titulo <- pagina_peticao %>%
        html_node(xpath = '//*[@id="divImpressao"]/div/h3/strong') %>%
        html_text()

      cabecalho1 <- pagina_peticao %>%
        html_nodes(xpath = '//table//strong') %>%
        html_text()
      cabecalho1 <- str_replace_all(cabecalho1, "[\r\n\t]" , "")

      corpo1 <- pagina_peticao %>%
        html_nodes(xpath = '///*[@id="divImpressao"]/pre') %>%
        html_text()

      informacoes_corpo <- str_replace_all(corpo1, "[\r\n\t]" , "")

      link_acompanhamento <- pagina_peticao %>%
        html_node(xpath = '//*[@id="divNaoImprimir"]/div[2]/a') %>%
        html_attr("href")
      link_acompanhamento <- str_replace(link_acompanhamento, "..", "http://www.stf.jus.br/portal")

      informacao <- pagina_peticao %>%
        html_nodes(xpath = '///*[@id="divImpressao"]/b') %>%
        html_text()

      dispositivo <- informacoes_corpo[grepl("Dispositivo Legal Questionado",informacao)]
      fundamentacao <- informacoes_corpo[grepl("Fundamentação Constitucional",informacao)]
      resultado_liminar <- informacoes_corpo[grepl("Resultado da Liminar",informacao)]
      decisao_plenario_liminar <- informacoes_corpo[grepl("Decisão Plenária da Liminar",informacao)]
      data_plenario_liminar <- informacoes_corpo[grepl("Data de Julgamento Plenário da Liminar",informacao)]
      data_publicacao_liminar <- informacoes_corpo[grepl("Data de Publicação da Liminar",informacao)]
      resultado_final <- informacoes_corpo[grepl("Resultado Final",informacao)]
      decisao_final <- informacoes_corpo[grepl("Decisão Final",informacao)]
      data_julgamento_final <- informacoes_corpo[grepl("Data de Julgamento Final",informacao)]
      data_publicacao_final <- informacoes_corpo[grepl("Data de Publicação da Decisão Final",informacao)]
      decisao_mono_final <- informacoes_corpo[grepl("Decisão Monocrática Final",informacao)]
      decisao_mono_liminar <- informacoes_corpo[grepl("Decisão Monocrática da Liminar",informacao)]
      incidentes <- informacoes_corpo[grepl("Incidentes",informacao)]
      ementa <- informacoes_corpo[grepl("Ementa",informacao)]
      indexacao <- informacoes_corpo[grepl("Indexação",informacao)]

      dispositivo <- ifelse(length(dispositivo) == 0, NA, dispositivo)
      fundamentacao <- ifelse(length(fundamentacao) == 0, NA, fundamentacao)
      resultado_liminar <- ifelse(length(resultado_liminar) == 0, NA, resultado_liminar)
      decisao_plenario_liminar <- ifelse(length(decisao_plenario_liminar) == 0, NA, decisao_plenario_liminar)
      data_plenario_liminar <- ifelse(length(data_plenario_liminar) == 0, NA, data_plenario_liminar)
      data_publicacao_liminar <- ifelse(length(data_publicacao_liminar) == 0, NA, data_publicacao_liminar)
      resultado_final <- ifelse(length(resultado_final) == 0, NA, resultado_final)
      decisao_final <- ifelse(length(decisao_final) == 0, NA, decisao_final)
      data_julgamento_final <- ifelse(length(data_julgamento_final) == 0, NA, data_julgamento_final)
      data_publicacao_final <- ifelse(length(data_publicacao_final) == 0, NA, data_publicacao_final)
      decisao_mono_final <- ifelse(length(decisao_mono_final) == 0, NA, decisao_mono_final)
      incidentes <- ifelse(length(incidentes) == 0, NA, incidentes)
      decisao_mono_liminar <- ifelse(length(decisao_mono_liminar) == 0, NA, decisao_mono_liminar)
      ementa <- ifelse(length(ementa) == 0, NA, ementa)
      indexacao <- ifelse(length(indexacao) == 0, NA, indexacao)

      processo <- data.frame(tipo = tipo,
                             num_acao = num,
                             url_peticao = url_peticao,
                             url_acompanhamento = link_acompanhamento,
                             nome_completo = titulo,
                             origem = cabecalho1[1],
                             relator = cabecalho1[3],
                             partes = cabecalho1[5],
                             entrada = cabecalho1[2],
                             distribuido = cabecalho1[4],
                             dispositivo = dispositivo,
                             fundamentacao = fundamentacao,
                             resultado_liminar = resultado_liminar,
                             decisao_plenario_liminar = decisao_plenario_liminar,
                             data_plenario_liminar = data_plenario_liminar,
                             data_publicacao_liminar = data_publicacao_liminar,
                             resultado_final = resultado_final ,
                             decisao_final = decisao_final,
                             data_julgamento_final = data_julgamento_final,
                             data_publicacao_final = data_publicacao_final,
                             decisao_mono_final = decisao_mono_final,
                             decisao_mono_liminar = decisao_mono_liminar,
                             incidentes = incidentes,
                             ementa = ementa,
                             indexacao = indexacao, stringsAsFactors = F)

      processo <- separate(processo, partes, c('requerente', 'requerido'), sep='Requerido :', remove=T)
      processo$requerente <- gsub("Requerente: ","",processo$requerente)
      processos <- bind_rows(processos, processo)
      i=i+1
      j=j+1
    }
    i=i+1
    j=j+1
  }
  return(processos)
}
lucaseosilva/stfBR documentation built on May 6, 2019, 7:32 a.m.