Bonjour à tous,
Je cherche à adapter un programme d'accès à l'API openweathermap
pour accéder à l'API countrylayer :
Je n'arrive pas à reproduire la construction du String serverPath (copie ci dessous) pour l'adresse de la requête. Je me perd après le ? .
String serverPath = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&APPID=" + openWeatherMapApiKey;
Pour l'instant, j'arrive à me connecter et recevoir les données Json avec :
String serverPath = "http://api.countrylayer.com/v2/all?access_key=d8xxxxxxxxxxxxx16";
ou : String serverPath = "http://api.countrylayer.com/v2/capital/Kabul?access_key=d8xxxxxxxxxxxxx16";
pour avoir des données concernant la capitale Kabul
mais j'aimerais bien comprendre comment écrire la string serverPath avec des ? et + "access_key="API_KEY
Si quelqu'un pouvait m'aider à construire cette String pour ces deux cas, ça m'aiderait à comprendre la syntaxe ?
Ci dessous mon programme avec les Strings ServerPath qui fonctionnent et celle avec l'API_KEY commentée qui ne fonctionne pas.
/*
Rui Santos
Complete project details at Complete project details at https://RandomNerdTutorials.com/esp32-http-get-open-weather-map-thingspeak-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
const char* ssid = "Livebox-xxxx";
const char* password = "xxxxxx";
// Your Domain name with URL path or IP address with path
String API_KEY = "d86xxxxxxxxxxx516";
// Replace with your capital
String capital = "Kabul";
// THE DEFAULT TIMER IS SET TO 10 SECONDS FOR TESTING PURPOSES
// For a final application, check the API call limits per hour/minute to avoid getting blocked/banned
unsigned long lastTime = 0;
// Timer set to 10 minutes (600000)
//unsigned long timerDelay = 600000;
// Set timer to 20 seconds (20000)
unsigned long timerDelay = 20000;
String jsonBuffer;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println(); Serial.print ("Sketch : "); Serial.print ("countrylayer.ino"); Serial.println();
WiFi.begin(ssid, password);
Serial.println("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
Serial.println("Timer set to 10 seconds (timerDelay variable), it will take 10 seconds before publishing the first reading.");
}
void loop() {
// Send an HTTP GET request
if ((millis() - lastTime) > timerDelay) {
// Check WiFi connection status
if (WiFi.status() == WL_CONNECTED) {
//String serverPath = "http://api.countrylayer.com/v2/capital/Kabul?access_key=d86407a515e2b3d7915fb4426de9e516";
//String serverPath = "http://api.countrylayer.com/v2/all? + "access_key=" + API_KEY";
String serverPath = "http://api.countrylayer.com/v2/all?access_key=d86407a515e2b3d7915fb4426de9e516";
Serial.println(serverPath);
jsonBuffer = httpGETRequest(serverPath.c_str());
Serial.println(jsonBuffer);
JSONVar myObject = JSON.parse(jsonBuffer);
// JSON.typeof(jsonVar) can be used to get the type of the var
if (JSON.typeof(myObject) == "undefined") {
Serial.println("Parsing input failed!");
return;
}
/* Serial.print("JSON object = ");
Serial.println(myObject);
Serial.print("Temperature: ");
Serial.println(myObject["main"]["temp"]);
Serial.print("Pressure: ");
Serial.println(myObject["main"]["pressure"]);
Serial.print("Humidity: ");
Serial.println(myObject["main"]["humidity"]);
Serial.print("Wind Speed: ");
Serial.println(myObject["wind"]["speed"]);*/
}
else {
Serial.println("WiFi Disconnected");
}
lastTime = millis();
}
}
String httpGETRequest(const char* serverName) {
HTTPClient http;
// Your IP address with path or Domain name with URL path
http.begin(serverName);
// Send HTTP POST request
int httpResponseCode = http.GET();
J'utilise un ESP32 wroom
Merci de votre aide