1

私はついにこのスクリプトを機能させるために血を流しました(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);
      }
    }
   }
4

1 に答える 1