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.
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 ?
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
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});
}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 :
J2 : ( avec en rouges les nouvelles Data en exemple, ne pas tenir compte de la cohérence des chiffres )
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