You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.4KB

  1. library(tidyverse)
  2. library(RSQLite)
  3. library(magrittr)
  4. library(httr)
  5. library(rvest)
  6. library(stringr)
  7. setwd("/srv/shiny/celine")
  8. annee <- 2020
  9. # Fetch celine and data ----
  10. celine <- GET("http://www.cngsante.fr/chiron/celine/listing.html")
  11. celine %>%
  12. content %>%
  13. html_node("tr:first-child") %>%
  14. html_text ->
  15. timestamp
  16. readRDS("prev_time.rds") -> prev_time
  17. if (timestamp == prev_time)
  18. {
  19. q(save = "no")
  20. } else
  21. {
  22. saveRDS(timestamp, file = "prev_time.rds")
  23. }
  24. db <- dbConnect(SQLite(), "ecn.db")
  25. # Fetch previous state ----
  26. db %>%
  27. tbl("trajectoires") %>%
  28. select(Etat, Etudiant, `Vœu`, Rang, Subdivision, Discipline, `Désir (non officiel) en chirurgie générale`, timestamp) %>%
  29. collect(n = Inf) %>%
  30. group_by(Etudiant) %>%
  31. mutate_at(vars(`Désir (non officiel) en chirurgie générale`), as.character) %>%
  32. filter(timestamp == max(timestamp)) ->
  33. current
  34. timestamp %>%
  35. str_extract("\\d+h\\d+") %>%
  36. str_replace("h", ":") ->
  37. heure
  38. timestamp %>%
  39. str_replace(" \\d+h\\d+ ", "") %>%
  40. str_extract("\\w+") ->
  41. date
  42. date %>%
  43. str_replace("([a-z]+)(\\d+)([a-zû]+)", "\\2") ->
  44. jour
  45. date %>%
  46. str_replace("([a-z]+)(\\d+)([a-z]+)", "\\3") ->
  47. mois
  48. case_when(mois == "jul" ~ "07",
  49. mois == "sep" ~ "09",
  50. mois == "aoû" ~ "08") ->
  51. mois
  52. timestamp <- str_c(annee, "-", mois, "-", jour, " ", heure)
  53. celine %>%
  54. str_replace_all("\n", "") %>%
  55. str_replace("(<tr>.*?</tr>){8}", "") %>%
  56. read_html %>%
  57. html_table(header = T) %>%
  58. .[[1]] ->
  59. listing
  60. listing %>%
  61. select(-SubDis) %>%
  62. filter(Etat != "déclassé") %>%
  63. mutate(Etudiant = ifelse(Etudiant %>% str_detect("\\d+ \\( (\\d+) \\)"),
  64. Etudiant %>% str_replace("\\d+ \\( (\\d+) \\)", "\\1"),
  65. Etudiant)
  66. %>% as.numeric,
  67. Discipline = Discipline %>% str_replace("Discipline .*? : ", ""),
  68. Subdivision = Subdivision %>% str_replace("CHU ((d')|(de ))?", ""),
  69. timestamp = timestamp) %>%
  70. mutate_if(is.character, factor) ->
  71. listing
  72. # Ajout des différences avec timestamp
  73. listing %>%
  74. mutate(`Désir (non officiel) en chirurgie générale` = `Désir (non officiel) en chirurgie générale` %>% as.character) %>%
  75. anti_join(current, by = c("Etat", "Etudiant", "Vœu", "Rang", "Subdivision", "Discipline", "Désir (non officiel) en chirurgie générale")) %>%
  76. dbWriteTable(conn = db, value = ., name = "trajectoires", append = T)
  77. db %>% dbDisconnect