Nouvelle donnée, nouvelle colonne

bonjour !

je me pose une petite question aujourd'hui.

admettons que je dispose d'un tableau provenant d'une API avec des données du type Article / Prix

Comment mettre en évidence un changement de valeurs lorsque je mets a jours mon API ?

par exemple avoir la colonne de base, et la mise en évidence d'un changement de prix.

image

Je n'ai aucunes idée de la façon de faire, mais j'aimerai bien garder l'historique d'un changement de valeur sur une plage généré par une API en gros.

j'ai rien creusé encore car je ne sais pas comment je vais faire alors je cherche la lumière auprès de vous

sans devoir faire une écriture manuel lorsque je détecte un changement

bon week-end !

Bonjour,

Comment est activée l'API, à quelle fréquence ?

manuellement pour le moment après activation du script

Dans ce cas, tu peux sauvegarder les dernières valeurs et les stocker ... j'avais réalisé cela en ne gardant que les 10 dernières valeurs, mais je ne retrouve plus le fichier. En voici un autre où la fonction était lancée via un déclencheur (que j'ai arrêté).

https://docs.google.com/spreadsheets/d/18l4EJ4FmKfvUeEt56kYZcoQVRRYiA6Kbm6U4xoHC-CQ/edit?usp=sharing

Ok merci, je vais regarder ton doc !

tu peux sauvegarder les dernières valeurs et les stocker

Du coup je viens de regarder.

C'est une sorte de fonction pour archiver en faite ? l'idée de mon coté étant d'enregistrer une nouvelle valeur QUE si elle est différente de la valeur présente.

( ce n'est peut-être pas possible en soit)

la base de donnée sur laquelle j'aimerai l'appliquer représentera beaucoup d'article mais les prix ne peuvent évoluer que 2 ou 3 fois dans l'année.

je peux activer le script pour la mise a jour de mon API régulièrement, mais les valeurs présentes dessus peuvent être constantes sur une longue durée.

Merci ;)

l'idée de mon coté étant d'enregistrer une nouvelle valeur QUE si elle est différente de la valeur présente.

( ce n'est peut-être pas possible en soit)

tout à fait possible ... si tu as un embryon de feuille, même sans l'api, qui donne où sont les données et où tu veux enregistrer leurs antécédents, ce sera simple

un exemple

https://docs.google.com/spreadsheets/d/1lfjIxZtoq6heVJQfIqePbi6R91r1mN7A7HevChNgZ0w/copy

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('MonMenu')
    .addItem('Lancer API', 'myFunction')
    .addToUi();
}
function myFunction() {
  var f = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  var data = f.getRange(2,2,26).getValues()
  var result = []

  // ici mon API qui déverse les valeurs dans la variable myAPI
  var myAPI = []
  for (var i = 0;i < 26;i++){
    var valeur=Math.floor(Math.random()*3 + 1)
    myAPI.push([valeur])
  }
  // fin API

  for (var i = 0;i < 26;i++){
    if (data[i][0] == myAPI[i]){
      result.push([myAPI[i],''])
    }
    else {
      result.push([myAPI[i],data[i][0]])
    }
  }
  f.getRange(2,2,result.length,result[0].length).setValues(result)
}

Merci,

je vais essayer d'adapter avec les données qu'on connait et sur lesquels nous avions déjà travailler ( maison + prix ) !

car je ne peux pas partager les données de mon entreprises sur lesquelles je vais l'appliquer ensuite, mais je devrais facilement pouvoir l'adapter dans le futur

j'ai des petites idées/suggestions en tête, mais en effet je vais faire un spreadsheet avant ! je fais ça dans la matinée

Bonjour.

je n'ai pas eu le temps d'avancer encore, pas mal de boulot.

pour le moment j'ai juste reconstruit l'API avec les données réels pour faire l'exemple et une mini construction de l'attente ( je n'ai pas encore intégré ton script )

je suppose également que je vais devoir mettre une sorte de "getlastcolumn" pour prendre en compte le dernier prix relevé et enregistré

en tout cas, cela me semblerai logique car tout les prix n'évolueront pas ensemble en même temps.

autre petite subtilité a laquelle je pense...

les données de l'API sont triée par ordre alphabétique, mais ne sont pas fixe car des nouvelles données peuvent arriver dans le listing et les lignes ne plus correspondre du coup.... ou bien en cas de nouvelles lignes, nous devons bouger la ligne complète ( Oui ça rajoute une difficulté ah ah ).

bonne journée

https://docs.google.com/spreadsheets/d/16IcXVVdwXn_ftuQcPf0UiXAjgRlueBYvFC8k39GPPhc/edit?usp=sharing

no problem ...

L'identifiant, c'est bien le shortname ?

L'identifiant, c'est bien le shortname ?

il vaut mieux prendre le fullname

merci

ok, il faut que je mijote un peu ...

que fait-on des items qui ne sont pas repris dans une nouvelle interrogation ? on laisse en l'état ? on efface le lien hypertexte ? on mets 0 ?

Je suis pas sur d'avoir compris..

Concernant la 1ere colonne, on peux l'enlever sans problème et conserver que la colonne "fullname" et le prix

ok,

donc, après suppression de la première colonne (cela simplifie !)

remets la valeur de

"X-AUTH-REALT-TOKEN"
function api2() {
  var classeurAPI = SpreadsheetApp.getActiveSpreadsheet();
  var feuilleAPI = classeurAPI.getSheetByName('Data');

  // je sauvegarde ici toutes les données
  var derLigne = feuilleAPI.getLastRow()
  var valeurs = feuilleAPI.getRange('A2:H'+derLigne).getValues();

  // j'identifie tous les items en leur donnant leur n° de ligne
  var myDico = new Map();
  for (var i = 0; i < valeurs.length; i++) {
    myDico.set(valeurs[i][0],i)
  };

  // ton interrogation sans changement
  var urlAPI = "https://api.realt.community/v1/token";
  var response = UrlFetchApp.fetch(urlAPI, {
    "method": "GET",
    "headers": {
      "accept":"<*/*>",
      "X-AUTH-REALT-TOKEN": "___________________",
      "Content-Type": "application/json"
    }
  });
  var json = response.getContentText();
  var data = JSON.parse(json);
  for (let i in data) {
    var tokenPrice = data[i].tokenPrice
    var fullname = data[i].fullName 

    // l'item existe-t-il déjà ?
    if (myDico.has(fullname) == true){
      var ligne = myDico.get(fullname)
      // sa valeur a-t-elle évolué ?
      if(tokenPrice != valeurs[ligne][1]) {
        // on décale alors l'historique des valeurs
        for (var j=7;j>1;j--){
          valeurs[ligne][j] = valeurs[ligne][j-1]
        }
        valeurs[ligne][1] = tokenPrice
      }
    }
    // nouvel item
    else {
      valeurs.push([fullname, tokenPrice, '', '', '', '', '', '']);
    }

  }
  feuilleAPI.getRange(2, 1, valeurs.length, valeurs[0].length).setValues(valeurs).sort({column: 1, ascending: false});
}

Je suis pas sur d'avoir compris..

le problème est que, si un item disparaît de l'api, il restera ad vitam æternam dans ta liste ... peut-être faut-il adjoindre une colonne avec la date à laquelle la valeur a été relevée la dernière fois ?

Bon....

je crois que c'est parfait ! ( comme d'habitude )

merci !

le problème est que, si un item disparaît de l'api, il restera ad vitam æternam dans ta liste ... peut-être faut-il adjoindre une colonne avec la date à laquelle la valeur a été relevée la dernière fois ?

ah oui je vois. et non ce ne sera pas la peine car cela me servira d'historique même si un produit n'est plus disponible

et si vraiment cela me gêne, je ferais une suppression manuelle de la ligne

Re-bonjour,

je déterre pour une petite question.

c'est possible de mettre en évidence les nouvelles données qui apparaisse lorsque j'active le script ? pour discerner les données "ancienne" des nouvelles écritures du jour.

car rajouter des dates avec les updates rajouterai un paquet de colonnes... et j'ai pas vraiment d'idée de comment mettre les nouvelles data en évidence..

par ex :

J1 :

image

J2 : ( avec en rouges les nouvelles Data en exemple, ne pas tenir compte de la cohérence des chiffres )

image

et dès qu'il y de nouvelles ecriture, revenir sur une police d'ecriture "normale" pour ce qui est deja present etc.. etc..

je ne sais pas si c'est compréhensible et faisable

bonne journée

Rechercher des sujets similaires à "nouvelle donnee colonne"