====== Envoyer des données vers une feuille de calcul google ======
Adresse de l'éditeur de script : https://script.google.com/
Doc google sur les web app avec google script : https://developers.google.com/apps-script/guides/web
ID de la feuille de calcul : dans l'url genre https://docs.google.com/spreadsheets/d/**ici-il-y-a-l-id-de-la-feuille-de-calcul**/edit
Il est à noter qu'on utilise ici un format d'url avec ''url?data=donnée-1&data=données-2&data=donnée-3'' pour obtenir une séquence ''{ data:['donnée-1','donnée-2','donnée-3'] }'' (voir dans la doc google ci-dessus ''e.queryString'' et ''e.parameters''.
==== déploiement et autorisations ====
En haut à droite de l'éditeur, il y a un bouton déploiement > nouveau déploiement > web app
Bien penser à autoriser « tout le monde » et à vérifier en faisant déploiement > gérer les déploiement, sinon il y a risque de redirection vers la page de connexion à google.
===== Google script =====
function doGet(e) {
/* Une des deux fonctions possibles pour une web app,
ici celle pour une requête get vers la web-app */
// on essaie d'exécuter ce qui suit :
try {
// on sélectionne le classeur
var doc = SpreadsheetApp.openById('ID-DU-DOCUMENT-A-INSERER-ICI');
// la feuille de calcul
var feuille = doc.getSheetByName("NOM-DE-LA-FEUILLE-DE-CALCUL");
// on les insère
feuille.appendRow( e.parameters.data );
// Pour pouvoir déployer sous forme de web app il faut retourner une sortie HTML
// Ici on indique juste que tout est ok.
return HtmlService.createHtmlOutput('ok');
// en cas d'erreur on affiche l'erreur dans la sortie HTML
} catch (e) {
// Pour pouvoir déployer sous forme de web app il faut retourner une sortie HTML
return HtmlService.createHtmlOutput('erreur : ' + e);
}
}
===== code Lolin d1 mini =====
/*
* source : https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266HTTPClient/examples/BasicHttpsClient/BasicHttpsClient.ino
* attention, normalement il faudrait le « fingerprint » du certificat ssl de la page à charger dans le code
* ici on utilise le mode insecure qui ne vérifie pas le certificat en face
*/
#include
#include
// la librairie suivante fait partie de la librairie ESP8266HTTPClient (appremment ?)
#include
const char* ssid = "ssid-de-votre-reseau";
const char* mot_de_passe = "mot-de-passe-wifi";
const char* url = "url-de-l-app-web"
WiFiClient wifiClient;
void setup() {
Serial.begin(115200);
delay(10);
// Connect WiFi
Serial.println();
Serial.println();
Serial.print("Tentative de connexion à ");
Serial.println(ssid);
WiFi.hostname("D1MINI"); // le nom sur le réseau ?
WiFi.begin(ssid, mot_de_passe);
// tant qu'on est pas connecté
while (WiFi.status() != WL_CONNECTED) {
// un « . » dans le monteur toutes les 0.5 secondes
delay(500);
Serial.print(".");
}
// une fois connecté
Serial.println("");
Serial.println("connexion WiFi établie");
// impression de l'adresse IP
Serial.print("Adresse IP : ");
Serial.print(WiFi.localIP());
}
void loop() {
// on attend la connexion WiFi
if (WiFi.status() == WL_CONNECTED) {
// ?
std::unique_ptrclient(new BearSSL::WiFiClientSecure);
// on ne vérifie pas l'empreinte (fingerprint)
// l'exemple source le fait, mais cela veut dire qu'il faut chercher à l'avance l'empreinte du site
// et la mettre ici, la changer quand elle change
client->setInsecure();
HTTPClient https;
Serial.print("[HTTPS] début de la requête...\n");
if (https.begin(*client, "https://script.google.com/macros/s/ici-mettre-l-id-/exec?data=je&data=suis&data=une&data=d1mini")) { // HTTPS
Serial.print("[HTTPS] GET...\n");
// on début la connexion et on envoie l'en-tête HTTP
int httpCode = https.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY ) {
String payload = https.getString();
Serial.println(payload);
// ici du code que j'avais mis pour comprendre ce qu'affichait la page alors que j'avais un code 302 car mon application n'était pas accessible à tous et donc me redirigeait vers la page de login de google
} else if ( httpCode == 302 ) {
Serial.println("--------");
Serial.println("code 302");
Serial.println("--------");
Serial.println("headers");
//rien
for(int i = 0; i< https.headers(); i++){
Serial.println( https.header(i) );
}
Serial.println("--------");
Serial.println("content");
Serial.println(https.getString());
Serial.println("--------");
}
} else {
Serial.printf("[HTTPS] GET... failed, error: %s\n", https.errorToString(httpCode).c_str());
}
https.end();
} else {
Serial.printf("[HTTPS] Impossible de se connecter\n");
}
}
Serial.println("30 secondes avant le prochain essai...");
delay(30000);
}