Skip to content
Snippets Groups Projects
Select Git revision
  • d57d4d9ef4961886d903f76257fe1affbd4f3136
  • main default protected
2 results

lies_aktuellen_stand.R

Blame
  • lies_aktuellen_stand.R 14.84 KiB
    # lies_aktuellen_stand.R
    #
    # Enthält die Funktion zum Lesen der aktuellen Daten. 
    
    #---- Hilfsfunktionen ----
    
    hole_daten <- function(stand_url,a_directory = "daten", copy=TRUE) {
      #' Schreibt das Dataframe mit den zuletzt geholten Stimmbezirks-Daten
      #' als Sicherungskopie in das angegebene Verzeichnis
      #' 
      if (!dir.exists(a_directory)) {
        dir.create(a_directory)
      }
      if (copy) {
        fname = paste0(a_directory,"/",
                       str_replace_all(now(),"\\:","") %>% str_sub(1,15),
                       ".csv")
      } else {
        fname = "livedaten/tmp.csv"
        if (file.exists(fname)) { file.remove(fname)}
      }
      # Bei Internet-Adresse: Daten aus dem Netz in den lokalen Ordner kopieren
      if (str_detect(stand_url,"^http")) {
        check = tryCatch(
          { 
            # Einmal Daten einlesen
            utils::download.file(stand_url,fname)
          },
          warning = function(w) {teams_warning(w,title=paste0(wahl_name,": Daten von ",stand_url," kopieren"))},
          error = function(e) {teams_warning(e,title=paste0(wahl_name,": Kann Daten nicht von ",stand_url,
                                                            " kopieren nach ",fname))}
        )  
      } else {
         R.utils::copyFile(stand_url,fname) 
      }
      # Jetzt vom lokalen Laufwerk einlesen
      check = tryCatch(
        {
          tmp_df <-read_csv2(fname, 
                               locale = locale(date_names = "de", 
                                               decimal_mark = ",", 
                                               grouping_mark = "."), 
                             col_types=list(
                               `Wahlkreis gewonnen: Name` = col_character(),
                               `Wahlkreis gewonnen: Vorname` = col_character(),
                               `Wahlkreis gewonnen: Titel` = col_character(),
                               `Wahlkreis gewonnen: Wahlvorschlag` = col_character(),
                               `Letzte Änderung` = col_character(),
                               freigegeben = col_double(),
                               `Nummer aufnehmender Wahlbezirk` = col_character(),
                               `Name aufnehmender Wahlbezirk` = col_character(),
                               `Aufnahme Wahlbezirk` = col_double()
                             ),
                                trim_ws = TRUE, 
                               skip =1)
        },
        warning = function(w) {teams_warning(w,title=paste0(wahl_name,": Datenakquise - Warnung beim Einlesen von ",fname))},
        error = function(e) {teams_warning(e,title=paste0(wahl_name,": Datenakquise - Fehler beim Einlesen von ",fname))}
      )
      if (file.exists("livedaten/tmp.csv")) { file.remove("livedaten/tmp.csv")}
      return(tmp_df)
    }
    
    hole_letztes_df <- function(a_directory = "daten") {
      #' Schaut im angegebenen Verzeichnis nach der zuletzt angelegten Datei
      #' und holt die Daten zurück in ein df
      if (!dir.exists(a_directory)) return(tibble())
      # Die zuletzt geschriebene Datei finden und einlesen
      neuester_file <- list.files(a_directory, full.names=TRUE) %>% 
        file.info() %>%