Öffne deine R-Konsole oder RStudio und führe aus: install.packages(c("shiny", "googlesheets4", "httr", "jsonlite"))
Die Authentifizierung bei Google Sheets funktioniert über einen Google Service Account, verwaltet über:
Um auf ein Google Sheet zuzugreifen, muss es für diesen Service-Account mit Bearbeitungsrechten freigegeben sein:
efm-714@able-hull-366008.iam.gserviceaccount.com
Im App-Ordner (z. B. efm-app/) befindet sich ein versteckter Ordner .secrets/ mit der JSON-Key-Datei:
able-hull-366008-48e78f3bc110.json
In global.R befinden sich alle relevanten Authentifizierungsinformationen – inkl. der Google Sheet ID.
Die Shiny-App besteht aus drei Hauptdateien:
ui.R– UI-Komponenten (auch z. T. inglobal.R)global.R– Initialisierung, Variablen, Authentifizierungserver.R– Serverlogik
Als Datenbank dient ein Google Sheet.
Jeder Aufruf der App wird in eine JSON-Datei geschrieben:
users_data.json
Diese Datei liegt im App-Verzeichnis.
Beim Klick auf den Button Neue Aufgabe wird folgende Funktion ausgelöst:
observeEvent(input$newTaskButton, {...})Diese ruft intern zwei Funktionen auf:
newTask <- eventReactive(input$newTaskButton, {...})newQuestionText()
Je nach ausgewähltem Test wird:
- die Aufgabenstellung über
newTaskText()generiert - ein passender Test wie
doTtest()durchgeführt - das Ergebnis zurückgegeben
Beim Klick auf Lösung anzeigen:
observeEvent(input$showSolutionButton, {...})Falls eine Lösung angegeben wurde, zeigt die Funktion:
showSolutionText <- eventReactive(input$showSolutionButton, {...})die passende Lösung an – z. B. getTtestSolution().
Die App kann auch ChatGPT nutzen über:
ask_chatgpt <- function(prompt) {...}Dabei wird die OpenAI API mit "gpt-3.5-turbo" verwendet.
-
helperGetPercentage(value)
Konvertiert einen numerischen Wert in einen Prozent-String (z. B.0.1234 → "12.34%") -
newScaleInfo()
Aktualisiert die Information zur Skalierung im UI.
.secrets-Ordner mit JSON-Key erstellenui.R,global.R,server.Rins gleiche Verzeichnis legen- Lokale R-Umgebung mit
shiny,googlesheets4,httr,jsonliteusw. vorbereiten - App starten mit:
Öffne das Skript oder Console-Fenster Füge dort das ein: install.packages(c("shiny", "googlesheets4", "httr", "jsonlite"))
shiny::runApp("efm-app")
In der .gitignore sollten stehen:
efm-app/.secrets/
*.json
.Rhistory
.RDataBeim ersten Zugriff auf das Google Sheet wird googlesheets4 den Service-Account-Key (die .json) verwenden. Stelle sicher, dass:
- Die Datei vorhanden ist: efm-app/.secrets/able-hull-...json
- Das Sheet für diesen Account freigegeben ist
- Du in global.R den richtigen Pfad und die Sheet-ID drin hast


