# CORS-Livedaten und Metadaten einsetzen (Stand: 17.9.2023., vor dem Livetest bei der OB-Wahl Offenbach) ## Daten live anzeigen... ...müssen einfach als CSV auf dem Google-Bucket liegen (CSV mit Komma und UTF-(); ich kopiere sie mit ``` system('gsutil -h "Cache-Control:no-cache, max_age=0" cp daten/test.csv gs://d.data.gcp.cloud.hr.de/obwahl_test.csv') ``` auf den Bucket. (Eine einzelne Kopieraktion dauert etwa 2s; das scheint aber vor allem der Overhead zum Schlüsseltausch zu sein: ob ich eine oder zwei Dateien über stadtteile* kopiere, macht keinen Unterschied.) ## Metadaten live verändern https://academy.datawrapper.de/article/328-how-to-create-a-chart-with-live-updating-metadata Anscheinend ist das eine Routine, die die abgespeicherten Metadaten live verändert anstatt sie alle einzulesen - sie funktioniert um so besser, je weniger in dem JSON drin ist. Am Anfang hatte ich eine komplette Kopie der Metadaten-Liste, die ich über die API ausgelesen hatte - ging nicht. Reduziert auf den [["content"]][["metadata"]]-Zweig-der Liste ging es so halbwegs - aber erst, als ich auf die einzelnen Einträge aus dem [["content"]][["metadata"]][["describe"]]-Zweig reduziert hatte, ging's. Deshalb: die Liste für das JSON sollte nur die Keys enthalten, die man wirklich ändern will! Also setzt man z.B. einen Eintrag für die Byline (Ersteller) und eine Erklärung in R so: ``` json <- list() # Leere Liste json[["describe"]][["byline"]][[1]] <- "Kilroy was here" json[["describe"]][["intro"]][[1]] <- "Diese Grafik zeigt live modifizierte Grafiken." json[["annotate"]][["notes"]][[1]] <- "Anmerkungsdaten wurden über CORS in einem JSON-File übergeben" ``` Für jeden Key, den die Routine im JSON findet, legt sie im Metadatensatz unter [[content]][["readonlyKeys"]] einen Eintrag an. (Verrückter Bug: wenn man den Key [["describe"]][["hide-title"]]) anlegt, wird der Titel der Grafik IMMER versteckt, auch wenn dieser Key auf FALSE gesetzt wird. Wie gesagt: nur anlegen, was man braucht! Kleine Regelverletzung der Import-Routine: Der Titel der Grafik - der in den Datawrapper-Daten unter [["content"]][["title"]] liegt, wird einfach über einen Eintrag ```json[["title"]] <- "Titel"``` angelegt. Der Logik der Metadaten zufolge müsste er dann unter [["content"]][["metadata"]][["title"]] liegen, tut er aber nicht. ## Eine Datawrapper-Grafik auf CORS-Metadatenlieferung umschalten Wenn man die externe Datenanlieferung einschaltet, werden folgende Keys gesetzt: - json[["content"]][["externalData"]] = <URL CSV> - json[["content"]][["metadata"]][["data"]][["upload-method"]] = "external-data" - json[["content"]][["metadata"]][["data"]][["external-data"]] = <URL CSV> - json[["content"]][["metadata"]][["data"]][["external-metadata"]] = <URL JSON> - json[["content"]][["metadata"]][["data"]][["use-datawrapper-cdn"]] = FALSE Leider kommt man über die Funktion dw_edit_chart() an diese Keys nicht ran - da kann man nur den visualize-Zweig verändern. Also muss ich eine Funktion dw_write_metadata() dazubasteln - das muss ich noch lösen...