Я написал собственный скрипт Google Script, который выводит для меня объект, и я хотел бы иметь возможность вызывать его и назначать его переменной, которая затем используется для отображения данных на веб-сайте.
В настоящее время Я решил получить доступ к данным с помощью другого проекта Google Scripts, однако я не могу найти способ сделать это, используя что-то вроде JS файла на моем компьютере или сервере DreamHost.
Это то, что я пробовал:
var infected_data = getData();
function getData() {
var URL = 'https://script.google.com/macros/s/AKfycbzsyQNJwDvQc5SvNGEDZZOoNI3XxNar9PA9sRucZx7mgzfWpFQ/exec';
var response = UrlFetchApp.fetch(URL);
return response;
}
на что-то вроде playcode.io выдает следующую ошибку:
ошибка: Uncaught ReferenceError: UrlFetchApp не определено
Я получаю то же самое, просто вставив его на свой компьютер и запустив его там с Chrome:
Похоже, UrlFetchApp
только для Google Scripts. Есть ли какой-то другой способ получить доступ к выходным данным за пределами среды Google.
* Я не знаю, как здесь происходит авторизация и все такое (потому что Google Scripts, кажется, запускает его как мой пользователь. Верно?)
HTML Заголовок:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>JQVMap - World Map</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<link href="../dist/jqvmap.css" media="screen" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="../dist/jquery.vmap.js"></script>
<script type="text/javascript" src="../dist/maps/jquery.vmap.world.js" charset="utf-8"></script>
<script type="text/javascript" src="js/jquery.vmap.sampledata.deaths.js"></script>
<script type="text/javascript" src="js/jquery.vmap.sampledata.infected.js"></script>
<script>
jQuery(document).ready(function () {
jQuery('#vmap').vectorMap({
map: 'world_en',
backgroundColor: '#333333',
color: '#ffffff',
hoverOpacity: 0.8,
selectedColor: '#3498DB',
enableZoom: true,
showTooltip: true,
scaleColors: ['#F3A291', '#FF4F3B'],
values: infected_data,
normalizeFunction: 'polynomial',
onLabelShow: function (event, label, code) {
label.html('<div class="map-tooltip"><h1 class="header"> ' + label.html() + '</h1><p class="description">Infected: ' + infected_data[code] + '</p><p class="description">Deaths: ' + death_data[code] + '</p></div>');
}
});
});
</script>
</head>
Файл Google Scripts:
function doGet() {
var result = {};
var infected = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();
var death = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();
result = makeObject(infected);
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}
function makeObject(multiArr) {
var obj = {};
var countrystats = {};
var headers = multiArr.shift();
for (var i = 0; i < headers.length; i++) {
countrystats[i] = multiArr.map(function (app) {
return app[i];
})
}
for (var m = 0; m < countrystats[1].length; m++) {
obj[countrystats[1][m]] = 0;
}
for (var j = 0; j < countrystats[1].length; j++) {
var TempVar;
TempVar = obj[countrystats[1][j]];
obj[countrystats[1][j]] = TempVar + countrystats[3][j];
}
return obj;
}
Вывод Google Scripts (с использованием расширение JSON View chrome):
{
cn: 8134,
th: 23,
mo: 7,
us: 5,
jp: 11,
kr: 4,
sg: 10,
vn: 2,
fr: 5,
np: 1,
my: 8,
ca: 3,
ci: 1,
lk: 1,
au: 9,
de: 4,
fn: 1
}
Это общедоступная c ссылка с нужным мне объектом / данными (тот же объект, показанный выше): веб-приложение: https://script.google.com/macros/s/AKfycbzsyQNJwDvQc5SvNGEDZZOoNI3XxNar9PA9sRucZx7mgzfWpFQ/exec
Таким образом, любой, кто его использует, должен иметь к нему доступ. Мне просто нужен способ присвоить эти данные локальной переменной JS. Скрипт листов Google публикуется как веб-приложение. Если я не ошибаюсь, есть настройка, позволяющая кому-либо, даже анонимному, получить к ней доступ.
Вот моя попытка AJAX запроса: var url = " https://script.google.com/macros/s/AKfycbzsyQNJwDvQc5SvNGEDZZOoNI3XxNar9PA9sRucZx7mgzfWpFQ/exec ";
var infected_data = jQuery.ajax({
crossDomain: true,
url: url,
method: "GET",
//dataType: "jsonp"
});
Если я раскомментирую jsonp, я получаю сообщение об ошибке:
jquery -1.11.3.min. js: 5 Блокировка считывания перекрестного источника (CORB) заблокировала ответ перекрестного происхождения https://script.googleusercontent.com/macros/echo?user_content_key=JXkCjiJjhcjndRREjoGyVNkZNkD-HvKpEPkpicQBm9nR9OkxjGXdYuOPsLxbJf-B9Rgifl5NWMtzgjfVGuMdGxTJrjKnRpdcOJmA1Yb3SEsKFZqtv3DaNYcMrmhZHmUMWojr9NvTBuBLhyHCd5hHazTNYZyoqG0ZuVXpWSNdoeLErB4AfUCNPKJHgELe5WaAmN5SlwIhonlWkkbFzR8kUwjKrMtdq9u-YqreD7W_KJ_aVqKVBTehAuogPCoZCfVc4yJf5ieDCdMDbXQ8FZZq8iSedsk1Px1LnPBLM8W-ZRcknnbJNT8dS525XG1pNEBR&lib=Mw_Scq3iKhByBS86NJpd_CngcdEShCw7K с приложением типа MIME / json. См. https://www.chromestatus.com/feature/5629709824032768 для более подробной информации.
Я не получаю никаких ошибок, если я удалю его. Однако я все еще не вижу данные на своей интерактивной карте (Мое приложение).