#include "dow_fetch.h" int dow_fetch(const char *url, std::vector &target) { int responseCode = -1; WiFiClient client; HTTPClient http; http.useHTTP10(true); http.begin(client, url); responseCode = http.GET(); if (responseCode != 200) { Serial.print("HTTPClient error:"); Serial.println(responseCode); http.end(); return -1; } JsonDocument doc; deserializeJson(doc, http.getStream()); target.clear(); dow_item_t dow_item; uint32_t i = 0; for (JsonObject item : doc.as()) { i++; if (!item.containsKey("x") || !item.containsKey("y") || !item.containsKey("t")) { Serial.print("Invalid item at index "); Serial.println(i - 1); continue; } // These are required dow_item.x = item["x"].as(); dow_item.y = item["y"].as(); dow_item.type = item["t"].as(); // Reset to default values dow_item.verticalAlign = 0; dow_item.horizontalAlign = 0; dow_item.font = 0; dow_item.radius = 0; dow_item.contents = ""; if (item.containsKey("x2")) dow_item.x2 = item["x2"].as(); if (item.containsKey("y2")) dow_item.y2 = item["y2"].as(); if (item.containsKey("r")) dow_item.radius = item["r"].as(); if (item.containsKey("f")) dow_item.font = item["f"].as(); if (item.containsKey("va")) dow_item.verticalAlign = item["va"].as(); if (item.containsKey("ha")) dow_item.horizontalAlign = item["ha"].as(); if (item.containsKey("c")) dow_item.contents = item["c"].as(); /* Serial.print("x: "); Serial.print(dow_item.x); Serial.print(" y: "); Serial.print(dow_item.y); Serial.print(" x2: "); Serial.print(dow_item.x2); Serial.print(" y2: "); Serial.print(dow_item.y2); Serial.print(" r: "); Serial.print(dow_item.radius); Serial.print(" t: "); Serial.print(dow_item.type); Serial.print(" f: "); Serial.print(dow_item.font); Serial.print(" va: "); Serial.print(dow_item.verticalAlign); Serial.print(" ha: "); Serial.print(dow_item.horizontalAlign); Serial.print(" c: "); Serial.println(dow_item.contents); */ target.push_back(dow_item); } http.end(); return 0; }