我正在尝试使用NodeJS Google API包访问私人Google日历,但收到错误"Error: Not Found":
Error: Not Found
at createError (/Users/devacc/myproject/node_modules/axios/lib/core/createError.js:16:15)
at settle (/Users/devacc/myproject/node_modules/axios/lib/core/settle.js:18:12)
at Unzip.handleStreamEnd (/Users/devacc/myproject/node_modules/axios/lib/adapters/http.js:201:11)
at emitNone (events.js:111:20)
at Unzip.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1056:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
通过Google Developer Console拥有“service to service”密钥的用户拥有私人日历的完全权限 . 在权限中,已指定角色'project - > viewer'和'project - > owner' . 如果有另一个角色要使用,那么我没有找到它 .
我正在使用的代码如下,'apiKey'参数是解析的JSON文件,从创建'service to service'帐户和'calendarId'是日历ID .
function authorize (key) {
return new Promise((resolve, reject) => {
var jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
['https://www.googleapis.com/auth/calendar.readonly'],
null
);
const calendar = google.calendar({
version: 'v3',
auth: jwtClient
});
jwtClient.authorize((err) => {
if (err) {
reject(err);
} else {
resolve(calendar);
}
});
});
}
function listEvents(calendarId, apiKey, days = 2) {
return authorize(apiKey)
.then((calendar) => {
return new Promise((resolve, reject) => {
var minTime = moment();
var maxTime = minTime.clone().add((days ? days : defaultDays), 'days');
calendar.events.list({
calendarId: calendarId,
orderBy: 'startTime',
showDeleted: 'false',
singleEvents: 'true',
timeMin: minTime.toISOString(),
timeMax: maxTime.toISOString()
}, (err, response) => {
if (err) {
reject(err);
} else {
const data = response.data;
resolve(data.items);
}
});
});
});
}
我应该注意,使用上面的代码与公共日历工作正常 . 这只是导致我这个问题的私人日历 . 日历是与具有密钥的用户相同的GSuite组织的一部分 .
1 回答
结果我需要在日历上添加服务帐户作为用户 . 这是形式之一: