我终于让这个脚本工作了(谷歌应用脚本和json的新手,对javascript比较熟悉)。它适用于小型数据集,但一旦我跳转到包含 20,000 个项目的大型数据集,它就会超时!我想不出另一种方法来提高效率。这些价格每 3 分钟更新一次,因此我只想将其缓存 10 分钟。我觉得 ScriptDb 不适合这个。本质上,我必须将信息存储在缓存中,因为我有大约 500 个使用简单的非缓存版本的方程,testing()
并且 google/api 不允许那么多调用。我想一通电话,从缓存中拉出约 500 次会更好。有什么方法可以提高我没有想到的效率吗?
每 10 分钟运行一次以存储信息。本片超时。
function updateCache() {
var cache = CacheService.getPublicCache();
var myUrl = "http://www.gw2spidy.com/api/v0.9/json/all-items/all"
var jsonData = UrlFetchApp.fetch(myUrl);
var jsonArray = JSON.parse(jsonData).results;
for (var i =0; i < jsonArray.length; i++) {
cache.put(jsonArray[i].data_id + 'sell', jsonArray[i].min_sale_unit_price, 1500);
}
return cache.get(itemID + 'sell')
}
这是使用缓存并返回数据的函数。
function testing(itemID) {
var cache = CacheService.getPublicCache();
return cache.get(itemID + 'sell')
}
更新 我更新了代码以使用分页。请参阅 Jon 评论中的后续问题。
//these are all four of the selling functions, cache for 35 min, run every 30 min
function updateSellCacheQ1() {
var cache = CacheService.getPublicCache();
for (var page = 0; page < 56; page++) {
Logger.log('Sell Page #' + page);
var myUrl = 'http://www.gw2spidy.com/api/v0.9/json/items/all/' + page
var jsonData = UrlFetchApp.fetch(myUrl);
var jsonArray = JSON.parse(jsonData).results;
for (var i = 0; i < jsonArray.length; i++) {
cache.put(jsonArray[i].data_id + 'sell', jsonArray[i].min_sale_unit_price, 2100);
}
}
}