Résolu Définir la longueur d'un UrlFetchApp

  • Auteur de la discussion BEBER1212
  • Date de début

BEBER1212

Expert
Bonjour à tous,

Dans un code d'une Google Spreadsheet, je récupère des informations sur un site où sont stockées des informations provenant de mes panneaux solaires.

Je récupère des informations sur cette page (lien avec le visualiseur Json) :

qui ne contient qu'une catégorie de données, avec ce code :

JavaScript:
function getTimeData(year, month, day) {
  // Obtenir l'url
  var url = "http://www.suntrol-portal.com/fr/plant/graph-json/day/p/1/pid/14895/date/" 
  url += year+"-"+month+"-"+day;
  url += "/size/page/chart/Area2D/axis/dynamic/output/real";      
  // Récupérer les données json
  var data_json = UrlFetchApp.fetch(url).getContentText();
  var data = JSON.parse(data_json);

  // Extraire les données utiles 
  var values = new Array();
  for(var i=0; i<data.data.length; i++) {      
    values[i+1] = data.data[i].value; }
      Logger.log(i);
  // Renvoyer le résultat
  return values;  
}



Maintenant je souhaite récupérer d'autres informations sur une autre page du même site (celle-ci : )

mais où il y a trois catégories d'informations. Et là, ça plante.

J'utilise quasiment le même code, mais j'ai l'erreur suivante : "TypeError: Impossible de lire la propriété "length" depuis undefined. "

Le code :
JavaScript:
function getOnduleurData(year, month, day) {
  // Obtenir l'url
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var currentSheet = ss.getSheetByName("Test");  
  var url = "http://www.suntrol-portal.com/fr/plant/graph-json/day/p/1/pid/14895/date/" 
  Logger.log(year);
  url += year+"-"+month+"-"+day;
  url += "/size/page/chart/Column3D/axis/static/output/real/p/1/m/43542_1%2C43542_2/chart/MSArea";      
  // Récupérer les données json
  var data_json = UrlFetchApp.fetch(url).getContentText();

  var data = JSON.parse(data_json);
 
  // Extraire les données utiles 
  var values = new Array();

  for(var i=0; i<data.data.length; i++) {      
    values[i+1] = data.data[i].value; }

  // Renvoyer le résultat
  return values;  
   
}

Est-ce dû au fait qu'il y ait 3 catégories au lieu d'une, et qu'il faut décomposer cela avant ?

Merci de votre aide.
 

BlackPage

Grand Maître
Salut,
Difficile de répondre comme ca vu qu'on ne sait pas à quel moment ca plante.
Tu peux faire un :

console.log(unescape(Object.toJSON(data)))

Ca te donnera dans la console JS la structure de ton objet data. A partir de là tu pourras voir si il contient bien un tableau data unique sur lequel tu peux boucler. En fonction de la structure il faudra adapter ton code.

Au pire, balance le résultat du console.log et je jetterai un oeil.
 

BEBER1212

Expert
Meilleure réponse
ça plantait sur
JavaScript:
for(var i=0; i<data.data.length; i++) {

J'ai réussi à passer ça, en enlevant un "data" de la ligne, ce qui devient
JavaScript:
for(var i=0; i<data.length; i++) {

Par contre je ne comprends pas pourquoi sur le premier code ça fonctionne avec i<data.data.length, et pas sur le deuxième...

Maintenant je dois réussir à exploiter les données que je souhaite récupérer. Je pense revenir faire un tour par ici ;-)

Ah oui, j'oubliais. Le code étant sur un Google Script, la syntaxe n'est pas tout à fait la même qu'en JavaScript.
Ex : console.log est en réalité Logger.log

et forcément, Object.toJSON() n'a pas l'air de fonctionner avec cette syntaxe non plus...

Bref, pour le moment j'ai résolu mon problème. A bientôt ;-)
 

BlackPage

Grand Maître
Si ca fonctionne avec data.data.length c'est que l'objet data renvoyé a un tableau qui s'appelle data...
Sinon tu peux éventuellement essayer de logger sans le Object.toJSON mais ca risque de pas aimer... A tester et bravo pour ta correction solo^^
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 079
Membres
1 586 395
Dernier membre
franckorus
Partager cette page
Haut