У меня есть этот javascript для извлечения таблицы html, а затем передать массивы в скрипт приложений Google в качестве параметров.403 ошибка при выполнении скрипта Google Apps из другой учетной записи google
var CLIENT_ID = 'some ID';
var SCRIPT_ID = 'some ID';
var SCOPES = ['https://www.googleapis.com/auth/drive.file'];
function handleAuthClick(event) {
gapi.auth.authorize(
{'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': true},
handleAuthResult);
}
function handleAuthResult(authResult) {
if (authResult) {
// Access token has been successfully retrieved, requests can be sent to the API
} else {
// No access token could be retrieved, force the authorization flow.
gapi.auth.authorize(
{'client_id': CLIENT_ID, 'scope': SCOPES, 'immediate': false},
handleAuthResult);
}
}
function exportGsheet() {
var myTableArray = [];
$("table#fin tr").each(function() {
var arrayOfThisRow = [];
var tableData = $(this).find('td');
if (tableData.length > 0) {
tableData.each(function() { arrayOfThisRow.push($(this).text()); });
myTableArray.push(arrayOfThisRow);
}
});
var params = JSON.stringify(myTableArray);
var request = {
'function': 'setData',
'parameters': params,
'devMode': true // Optional.
};
var op = gapi.client.request({
'root': 'https://script.googleapis.com',
'path': 'v1/scripts/' + SCRIPT_ID + ':run',
'method': 'POST',
'body': request
});
op.execute(function(resp){opensheet(resp)});
}
Ниже приведен сценарий приложений. Это использует API-интерфейс Drive API и исполняемый API.
var DOC_ID = 'some id';
var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
var folder = DriveApp.getFolderById('some id');
function setData(parameters) {
var getFile = DriveApp.getFileById(DOC_ID);
var file = getFile.makeCopy(formattedDate, folder);
var ss = SpreadsheetApp.open(file);
var ssId = ss.getId();
ss.getSheets()[0].getRange(5,1,50,24).clear();
var e = JSON.parse(parameters);
var outerArray = [];
for(var i = 0; i < e.length; i++) {
outerArray.push(e[i]);
}
ss.getSheets()[0].getRange(5, 2, outerArray.length, outerArray[0].length).setValues(outerArray);
return {"url":ssId};
Logger.log(ssId);
}
Все отлично работает, когда я разрешаю используя GMAIL ID, которому принадлежит скрипт приложения и проекта (мой собственный Gmail счета). Но когда я аутентификация с использованием другой учетной записи GMAIL я получаю ошибку ниже:
error: {code: 403, message: "The caller does not have permission", status: "PERMISSION_DENIED"}
code: 403
message: "The caller does not have permission"
status: "PERMISSION_DENIED"
Я намерен сделать эту общественность приложений и каждый должен иметь возможность аутентификации с помощью своего аккаунта Gmail и выполнить сценарий. Как мне это сделать? Пожалуйста помоги.
файл с id docid должен быть общедоступным читать –
Его уже публично. Позже я понял, что должен предоставить разрешение в Project Console Project. Перейдите к «Разрешения-разрешения для проекта« xxx »- добавьте участников, а затем добавьте домены или идентификаторы электронной почты. Добавленные идентификаторы/домены электронной почты смогут выполнять сценарий. Тем не менее, я не смог использовать домен gmail. Я поднял [вопрос] (https://code.google.com/p/google-apps-script-issues/issues/detail?id=5930&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component% 20Owner) с поддержкой Google – Maddy