Table of Contents
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 <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> // la librairie suivante fait partie de la librairie ESP8266HTTPClient (appremment ?) #include <WiFiClientSecureBearSSL.h> 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_ptr<BearSSL::WiFiClientSecure>client(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); }