Ok, il semble que mon problème était que Google se comporte d'une manière étrange - il ne réexécute pas le script tant que les paramètres du script sont similaires, il utilise les résultats mis en cache des exécutions précédentes. Par conséquent, il ne se reconnecte pas à l'API et ne récupère pas le prix, il renvoie simplement le résultat du script précédent qui a été mis en cache.
Pour plus d'informations, cliquez ici: https://code.google.com/p/google-apps-script-issues/issues/detail?id=888
et ici: Script pour résumer les données non actualisées
Ma solution était d'ajouter un autre paramètre à mon script, que je n'utilise même pas. Désormais, lorsque vous appelez la fonction avec un paramètre différent des appels précédents, elle devra réexécuter le script car le résultat de ces paramètres ne sera pas dans le cache.
Donc, chaque fois que j'appelle la fonction, pour le paramètre supplémentaire je passe "$ A $ 1". J'ai également créé un élément de menu appelé refresh, et lorsque je l'exécute, il met la date et l'heure actuelles dans A1, par conséquent tous les appels au script avec $ A $ 1 comme deuxième paramètre devront recalculer. Voici du code de mon script:
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Refresh",
functionName : "refreshLastUpdate"
}];
sheet.addMenu("Refresh", entries);
};
function refreshLastUpdate() {
SpreadsheetApp.getActiveSpreadsheet().getRange('A1').setValue(new Date().toTimeString());
}
function getPrice(itemId, datetime) {
var headers =
{
"method" : "get",
"contentType" : "application/json",
headers : {'Cache-Control' : 'max-age=0'}
};
var jsonResponse = UrlFetchApp.fetch("http://someURL?item_id=" + itemId, headers);
var jsonObj = eval( '(' + jsonResponse + ')' );
return jsonObj.Price;
SpreadsheetApp.flush();
}
Et quand je veux mettre le prix de l'article avec l'ID 5 dans une cellule, j'utilise la formule suivante:
=getPrice(5, $A$1)
Lorsque je souhaite actualiser les prix, je clique simplement sur l'élément de menu "Actualiser" -> "Actualiser". N'oubliez pas que vous devez recharger la feuille de calcul après avoir modifié le onOpen()
script.