Обновлю информацию в связи с новом Pro-API на CoinMarketCap. Пока не буду затрагивать как сделать триггер для автообновление и т.д. Все что нужно знать, что после как загрузите двух скриптах (File: New / Script file, Rename, Save all), нужно нажать на JSONLOAD.gs (окно активное) и потом сверху на плей-иконку (срипт закончит с ошибка из за нулевых параметров, но не важно) – откроется окно для авторизации скрипта (чтобы скрипт смог менять таблицу). В этом окне выбираете ваш аккаунт, а потом внизу слева с мельком шрифте Advanced и появится еще внизу Go to <имя скрипта> (unsafe), и в конечное окно подтверждаете. Все!
Замечания: В ваш гугл профил в раздел безопасности надо/сможете подтвердить/удалить статус доступа, иначе в страница поиска внизу будет иконка с предупреждение о безопасности аккаунта (доступ третья сторона). Все будет работать хорошо и без этого (информативно пояснил). Также смотрите в почту – иногда приходят оповещения об ошибки скрипта (более часто, если прикрутите триггер для автоматизации).ImportJSON.gs –
https://github.com/bradjasper/ImportJSON (это оригинальный проект)
ImportJSON-git852565b-patched.gs –
https://drive.google.com/open?id=10Xfg4sggU7POQi9GsGyeiehhW8Hz-PgY--- ImportJSON-git852565b.gs 2019-05-08 17:28:29.737736133 +0300
+++ ImportJSON-git852565b-patched.gs 2019-05-08 17:31:03.965516139 +0300
@@ -377,7 +377,7 @@
}
}
}
- } else if (isObject_(value)) {
+ } else if (value != null && isObject_(value)) {
for (key in value) {
if (parseData_(headers, data, path + "/" + key, state, value[key], query, options, includeFunc)) {
dataInserted = true;
Пач нужен из за оформление JSON-а который возвращает CoinMarketCap – ячейки с стоимости null. Из за них колонки начинающих с пустая ячейка не отображается. Что-то в этом духе (исправлял год назад и не помню), но добавление "value != null" в проверку на 380 строка решает проблема и все верно отображается в таблицу.
// REQUIRE: https://github.com/bradjasper/ImportJSON
/**
* Imports a JSON feed and returns the results to be inserted
* into a Google Spreadsheet. The JSON feed is flattened to
* create a two-dimensional array. The first row contains the
* headers, with each column header indicating the path to
* that data in the JSON feed. The remaining rows contain the
* data.
*
* @customfunction
* @param {"https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"} url
* A full REST API url with endpoint path and parameters.
* @param {"/data"} query
* A comma-separated list of JSON paths. Any path starting
* with one of these paths gets imported.
* @param {"noInherit,noTruncate,noHeaders"} options
* A comma-separated list of options that alter processing of
* the data: noInherit, noTruncate, rawHeaders, noHeaders,
* allHeaders, debugLocation.
* @param {"X-CMC_PRO_API_KEY"} apikey
* An additional HTTP header by the script property key if
* needed (add appropriate key/value pair to the properties).
* @return A two-dimensional array containing the data.
**/
function JSONLOAD(url, query, options, apikey) {
const timeout = 1000;
var scriptLock = LockService.getScriptLock();
while (! scriptLock.tryLock(timeout)) {
Utilities.sleep(timeout / 10);
}
var params = {
'headers': {
'Accept': "application/json",
'Accept-Charset': "utf-8",
'Accept-Encoding': "identity",
'Cache-Control': "public, max-age=60, must-revalidate"
},
'followRedirects': false,
'muteHttpExceptions': false
};
if (apikey && isNaN(apikey) && apikey !== true) {
var scriptProperties = PropertiesService.getScriptProperties();
apikey = apikey.toString();
params['headers'][apikey] = properties.getProperty(apikey);
}
var timer = new Date().getTime();
var dataArray = ImportJSONAdvanced(url, params, query, options,
includeXPath_, defaultTransform_);
timer = new Date().getTime() - timer;
Utilities.sleep(Math.max(0, timeout - timer));
return dataArray;
}
Help информацию для функцию JSONLOAD не обновлял, но годится... Если будете использовать скрипта для доступ к биржи, то надо удалить строкой с параметром X-CMC_PRO_API_KEY и эвентуально поменять верхней с Cache-Control (сейчас там поставлен кешь на 5 мин * 60 сек = 300 сек). LockService нужен тогда, когда делаете много запросов в одной таблице и они будут исполняются в очереди, а не все сразу в один момент.