私はついにこのスクリプトを機能させるために血を流しました(Google Appsスクリプトとjsonには初めてで、javascriptには比較的慣れています)。小さなデータ セットでは問題なく機能しますが、20,000 項目の大きなデータ セットにジャンプするとすぐにタイムアウトになります。これをより効率的にする別の方法は考えられません。これらの価格は 3 分ごとに更新されるため、10 分間だけキャッシュしたいと考えています。ScriptDb はこれには適していないように感じます。基本的に、単純な非キャッシュ バージョンのtesting()
google/api を使用して最大 500 の方程式があり、それほど多くの呼び出しが許可されなかったため、情報をキャッシュに保存する必要がありました。呼び出しは 1 回で、キャッシュからのプルは 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);
}
}
}