Мой скрипт отлично работает и может возвращать данные из моей таблицы, когда я запускаю сценарий из редактора, но он терпит неудачу, когда я пытаюсь использовать cURL или Postman.GAS - GET не работает, но POST делает
I Способно выдать POST для вызова doPost(e)
и добавить дополнительную строку в таблицу из заданных параметров. Я хотел бы иметь возможность отправить запрос GET для вызова метода doGet(e)
, который возвращает строки моей таблицы в виде JSON (я проверил, что doGet работает в редакторе).
Однако, когда я пытаюсь оформить GET с помощью CURL или Почтальон я получаю TypeError: Cannot call method "getRange" of null.
Я смущен, потому что я не называю метод getRange()
в всех в моем сценарии, так что я не знаю откуда эта ошибка. Я жестко закодировал ключ электронной таблицы и имя рабочего листа в скрипте для тестирования, и я все равно получаю ту же ошибку.
Я развернул веб-приложение, чтобы оно выполнялось с моей учетной записью Google, и я разрешаю Anyone, even anonymous
для доступа к скрипту. Я запустил функцию настройки для авторизации моей учетной записи в скрипте.
Это link в моей таблице.
Вот мой код:
function doGet(e) {
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE");
var sheet = ss.getSheetByName("Clouds");
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var json = JSON.stringify(values);
Logger.log(json);
return json;
};
function doPost(e) {
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE");
//var sheet = ss.getSheetByName(e.parameter["sheetID"]);
var sheet = ss.getSheetByName("Clouds");
//Logger.log("sheetId: " + e.parameter["sheetID"]);
Logger.log("request: " + e);
//check if sheet exists, if not add sheet
if (sheet == null) {
Logger.log("Creating new sheet...");
//inserts sheet with specified ID, updates sheet var, appends a header row and then locks it
ss.insertSheet(e.parameter["sheetID"]);
sheet = ss.getSheetByName(e.parameter["sheetID"]);
sheet.appendRow(["ID","Coverage","Date", "Time", "Comments", "kWhr", "mL Water"]);
sheet.setFrozenRows(1);
}
//Append the 3 inputs to the sheet
//If statement takes care of whether the user is using the GET or POST functions, GET will have different parameter id's
if (e == null || e.parameter["id"] == undefined){
Logger.log("getting data");
return ContentService.createTextOutput("Successful GET");
//doPost(e);
}
else {
Logger.log("Appending row...");
sheet.appendRow([
e.parameter["id"],
e.parameter["coverage"],
e.parameter["date"],
e.parameter["time"],
e.parameter["comments"],
e.parameter["kwhr"],
e.parameter["ml"]
]);
}
//Returns a string to be displayed (If nothing is return you get a Google page saying the script worked and nothing was returned)
return ContentService.createTextOutput("Successfully Submitted. You may close the application");
}