splor-mg / dados-totais-armazem-siafi

0 stars 0 forks source link

Renomear o nome do arquivo na etapa de extração #3

Closed hslinhares closed 10 months ago

hslinhares commented 12 months ago

As bases são geradas com a data em que foi gerada no nome. A função gm_save_attachments somente salva com o nome original. Para se renomearmos o nome do anexo ao salvar é preciso utilizar a função gm_save_attachment.
Um dos seus parâmentros é o attachmentId que não pode ser obtido diretamente. É preciso criar uma função para retirar essa informação de uma lista recursiva gerada pela função gm_message().

hslinhares commented 12 months ago

Foi criada a função de busca recursiva em listas para se encontrar o attachmentId por nome, que não altera, independentemente de sua posição na lista, que pode mudar.

extract_data_by_name <- function(list, name) {
  result <- list()

  if (length(ids_hist == 1)){
        recursive_extract <- function(x) {
    if (is.list(x)) {
      if (name %in% names(x)) {
        result <<- c(result, list(x[[name]]))
      } else {
        lapply(x, recursive_extract)
      }
    }
    }
  recursive_extract(list)
  return(result[[1]])
}
}
hslinhares commented 10 months ago

o arquivo utils.R traz a função utilizada durante o make extract que altera o nome do arquivo:

write_attachment <- function(message_id) {
  message <- gmailr::gm_message(message_id)
  attachments <- gmailr::gm_attachments(message)
  filename <- stringr::str_remove(attachments[["filename"]], "-\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2}")
  attachment_id <- attachments[["id"]]
  result <- gmailr::gm_attachment(attachment_id, message_id)
  gmailr::gm_save_attachment(result, paste0("data-raw/", filename))
}