# fonctions d'import des tables emm
#' Importe Tableau 1.V.5.EMM
#' Importe le Tableau 1.V.5.EMM de Ovalide et empile les valeurs.
#' @param file_path Chemin vers le fichier HTML sauvegardé depuis Ovalide
#' @return Une data.frame avec les valeurs empilées
#' @export
import_emm <- function(file_path) {
# Lit le fichier
emm_html <- xml2::read_html(x = file_path)
# Récupérer toutes les tables
tables_data <- emm_html %>%
rvest::html_nodes("table[class='table']")
# Récupérer tous les nombes de table
tables_names <- emm_html %>%
rvest::html_nodes("div[class='c m byline']") %>%
rvest::html_text() %>%
gsub(pattern = "type=", replacement = "")
# Boucle d'import de chaque table
x <- mapply(tables_data, tables_names, FUN = import_one_table, SIMPLIFY = F)
# Empiler
x <- bind_rows(x)
# Ajouter les données de la page
# Récupérer la date du traitement
x$date_traitement <- emm_html %>%
html_node('.systemtitle') %>%
html_text() %>%
stringr::str_extract('\\d{2}/\\d{2}/\\d{4}') %>%
as.Date.character(format = '%d/%m/%Y')
# Récupérer le mois de traité
x$mois_traite <- emm_html %>%
html_node('.systemtitle4') %>%
html_text() %>%
stringr::str_extract('(?<=M)\\d{1,2}') %>%
as.integer()
# Récupérer l'année traitée
x$annee_traite <- emm_html %>%
html_node('.systemtitle4') %>%
html_text() %>%
stringr::str_extract('(?<=e )\\d{4}') %>%
as.integer()
x
}
#' Importer une table d'un fichier EMM
#' Fonction d'aide pour [import_emm]
#' @import magrittr
import_one_table <- function(table_node, table_name) {
df1 <- rvest::html_table(table_node, fill = TRUE)
# Reformater
# Les premières lignes ne sont que des éléments d'en-tête
df1clean <- df1[ 5:nrow(df1),]
# Le nom des mois est sur la première ligne
colnames(df1clean) <- df1[1,]
colnames(df1clean)[1] <- "mois_envoi"
# Mettre au format long
dflong <- tidyr::gather(df1clean,
key = "mois_sortie",
value = "valorisation",
2:length(df1))
# Convert numeric
# Retirer les blancs
dflong$valorisation %<>%
gsub(" ", "", .) %>%
# Changer les , en .
gsub(",", ".", .) %>%
# Convertir en numérique
as.numeric
# en faire une tibble
df <- tibble::as.tibble(dflong)
df
# Remplacer les noms des mois par des numéro de mois
df %<>%
mutate(mois_envoi = as.integer(match_pair(mois_envoi, .mois_fr)),
mois_sortie = as.integer(match_pair(mois_sortie, .mois_fr)))
# firtrer les totaux et NA
df <- df[complete.cases(df), ]
# Ajouter le type
df$type_table <- table_name
# Distinguer envoi initiaux des rattrapages
df %<>%
mutate(envoi_initial = mois_envoi == mois_sortie)
df
}
match_pair <- function(x, dico) {
positions <- match(x, names(dico))
dico[positions]
}
.mois_fr <- c(
"Janvier" = 1,
"Février" = 2,
"Mars" = 3,
"Avril" = 4,
"Mai" = 5,
"Juin" = 6,
"Juillet" = 7,
"Août" = 8,
"Septembre" = 9,
"Octobre" = 10,
"Novembre" = 11,
"Décembre" = 12
)
#' Importer un tableau EMM depuis epmsi
#' @inheritParams open_ovalide_session
#' @inheritParams jump_to_emm
#' @inherit import_emm return
#' @seealso [open_ovalide_session()], [jump_to_emm()] et [import_emm()]
#' @export
import_emm_from_epmsi <- function(user, pass, annee, mois) {
session <- open_ovalide_session(user, pass)
session <- jump_to_emm(session, annee, mois)
import_emm(session)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.