Tamam, benim sorunum Google'ın garip bir şekilde davranması gibi görünüyor - komut dosyası parametreleri benzer olduğu sürece komut dosyasını yeniden çalıştırmıyor, önceki çalıştırmalardan önbelleğe alınmış sonuçları kullanıyor. Dolayısıyla, API'ye yeniden bağlanmaz ve fiyatı yeniden getirmez, yalnızca önbelleğe alınmış önceki komut dosyası sonucunu döndürür.
Daha fazla bilgiyi burada bulabilirsiniz: https://code.google.com/p/google-apps-script-issues/issues/detail?id=888
ve burada: Güncellenmeyen verileri özetleyen komut dosyası
Çözümüm betiğime kullanmadığım başka bir parametre eklemekti. Şimdi, işlevi önceki çağrılardan farklı bir parametre ile çağırdığınızda, bu parametrelerin sonucu önbellekte olmayacağından betiği yeniden çalıştırması gerekecektir.
Bu yüzden fonksiyonu ne zaman çağırsam, ekstra parametre için "$ A $ 1" i geçiyorum. Ayrıca yenileme adında bir menü öğesi oluşturdum ve çalıştırdığımda, geçerli tarih ve saati A1'e koyuyor, bu nedenle komut dosyasına yapılan tüm aramalar $ A $ 1 ile ikinci parametre olarak yeniden hesaplanacak. Komut dosyamdan bazı kodlar:
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();
}
Ve kimliği 5 olan öğenin fiyatını bir hücreye koymak istediğimde, aşağıdaki formülü kullanıyorum:
=getPrice(5, $A$1)
Fiyatları yenilemek istediğimde, sadece "Yenile" -> "Yenile" menü öğesini tıklıyorum. onOpen()
Komut dosyasını değiştirdikten sonra elektronik tabloyu yeniden yüklemeniz gerektiğini unutmayın .