'Bandwidth quota exceeded. Limit the data transfer speed

I received the following error on a script that we run time-based.

Exception: Bandwidth quota exceeded: https://app.enzyme.finance/api/vault-performance?vault=0x95fca2e84556443c1bc0c6416ee17be0e6844cd0&currency=eur&network=ethereum. Limit the data transfer speed.

I have no clue which quota I'm exceeding. So how fixing this issue is quite a mystery.

In the code below I'm doing the following:

  1. Delete any existing triggers deleteTriggers()
  2. Schedule a trigger via function on time: 00:00 scheduledTrigger(0,0)
  3. Fetch data from URL and parse that data into Google Sheets function_Triggered()
  4. In run this code time-driven day timer at: 11 pm to midnight.

The code below:

function setTrigger() {
  deleteTriggers();  
  scheduledTrigger(0,0);
}

function scheduledTrigger(hours,minutes){
  var today_D = new Date();
  var year = today_D.getFullYear();
  var month = today_D.getMonth();
  var day = today_D.getDate();
  pars = [year,month,day,hours,minutes];
  
  var scheduled_D = new Date(...pars);
  scheduled_D.setDate(scheduled_D.getDate() + 1);

  var hours_remain=Math.abs(scheduled_D - today_D) / 36e5;
  ScriptApp.newTrigger("function_Triggered")
  .timeBased()
  .after(hours_remain * 60 * 60 * 1000)
  .create()
}

function deleteTriggers() {
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    if (   triggers[i].getHandlerFunction() == "function_Triggered") {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}

function function_Triggered() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var raw = ss.getSheetByName('raw');
  var current = ss.getSheetByName('nav.current');
  var database = ss.getSheetByName('nav.database');

  var url = "https://app.enzyme.finance/api/vault-performance?vault=0x95fca2e84556443c1bc0c6416ee17be0e6844cd0&currency=eur&network=ethereum";
  var response = UrlFetchApp.fetch(url); // get feed
  var dataAll = JSON.parse(response.getContentText());

  var rows = [Object.keys(dataAll)]; // Retrieve headers.
  var temp = [];

  for (var i = 0; i < rows[0].length; i++) {
    temp.push(dataAll[rows[0][i]]); // Retrieve values.
  }
  
  rows.push(temp);

  raw.getRange(1,1,rows.length,rows[0].length).setValues(rows); // Put values to Spreadsheet.
  
  // count rows to snap
  var current_rows = current.getLastRow();
  var database_rows = database.getLastRow() + 1;
  var rows_new = current.getRange("A2:B" + current_rows).getValues();

  // snap rows, can run this on a trigger to be timed
  database.getRange("A" + database_rows + ":B" + database_rows).setValues(rows_new);
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source