@ScottLox

Как избавится от лимитов, чтобы постоянно не отправлять запрос?

Ситуация простая. Мне нужно по запросу API, получить на выходе список всех авто в базе данных. Ответ мне приходит JSON формата, с кучей данных, но они повторяются, условно "Number" = Номер машины и учитывая сколько машин, столько и будет этих ключей.

Вот ответ от API для понимания:
[
{
"Number": "Рћ668РќРђ198",
"STSSeries": "9930",
"STSNumber": "935697",
"Model": "Skoda Rapid",
"Activity": false,
"IcorrectData": false,
"LastInspectionDate": null,
"LastInspectionMileage": null,
"INN": "0000000000",
"KPP": "0000000000",
"Department": "",
},
{
"Number": "Рћ514РђРњ32",
"STSSeries": "9922",
"STSNumber": "622704",
"Model": "Datsun On-Do",
"Activity": false,
"IcorrectData": false,
"LastInspectionDate": null,
"LastInspectionMileage": null,
"INN": "0000000000",
"KPP": "0000000000",
"Department": "ЮДБ ",
},


Вот мой код:
var USERNAME = 'USERNAME ';
var PASSWORD = 'PASSWORD';

  var url = `https://taksi.0nalog.com:00000/BALALAYKA/hs/Car/v1/Get`

  var headers = {
    "Authorization" : "Basic " + Utilities.base64Encode(USERNAME + ':' + PASSWORD)
  };

  var params = {
    "method":"GET",
    "headers":headers
  };


function get_Number(num) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[num]['Number']
}

function get_Model(mod) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[mod]['Model']
}

function get_Status(sta) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[sta]['Status']
}

function get_Driver(drv) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[drv]['Driver']
}

function get_Department(dep) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[dep]['Department']
}

function get_Reason(res) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[res]['Reason']
}

function get_Comment(come) {

var response_text = UrlFetchApp.fetch(url, params);
return JSON.parse(response_text)[come]['Comment']
}


А теперь о ситуации, как вы видите мой код вечно обращается к API и создает уйму запросов, хотелось бы понять, как мне сделать так, что бы после 1го запроса раз в 5 минут, он собирал весь JSON-ответ в условный КЭШ и уже из него собирал данные для функций.

Данные функции мне нужно для заполнения Google Таблицы. Именно в нее я и произвожу парсинг всей базы авто, для того, что бы в дальнейшем в автоматическом режиме отслеживать их статусы.

А вот как выглядит таблица (в каждой ячейке функция, в идеале понять бы как сделать так, что бы со стороны скрипта без ввода текста было автозаполнение массива данных.)
64649f80d0b2c610935956.png
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Замените
UrlFetchApp.fetch(url, params);
на кэшированный вариант. Примерно так(не проверял, но должно работать):
/**
 * Функция для получения данных из кэша или из сети.
 * @author Boew Grigory (Telegram @ProgrammerForever)
 *
 * @param {string} url - URL для запроса.
 * @param {Object} params - Параметры для запроса. 
 *
 * @return {sting} Возвращает текст ответа из кэша или из сети.
 */
function cachedFetch(url, params) {
  let cache =  CacheService.getScriptCache();
  let key = `${url}-${JSON.stringify(params)}`;
  let cachedResponse = cache.get(key);
  if (cachedResponse){
    return cachedResponse;
  };
  let response = UrlFetchApp.fetch(url, params);
  cache.put(key, JSON.stringify(response.getContentText()));
  return response;
}

Возможно лучше будет получить данные за раз, собрать в таблицу и заполнить её.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы