"Missing scope type" 错误通常是由于在使用 Google Calendar API 时,授权范围(scope)没有正确设置导致的。以下是一些建议和解决方法:
首先,确保你已经安装了 google-auth-library
和 googleapis
这两个库:
npm install google-auth-library googleapis
在使用 Google Calendar API 时,你需要指定正确的授权范围。常见的授权范围包括:
https://www.googleapis.com/auth/calendar.readonly
:只读访问日历https://www.googleapis.com/auth/calendar
:完全访问日历(读取、创建、更新、删除)在你的代码中,确保你已经正确设置了授权范围。例如:
const { google } = require('googleapis');
const calendar = google.calendar('v3');
const SCOPES = ['https://www.googleapis.com/auth/calendar'];
async function main() {
const auth = new google.auth.JWT({
email: 'your-service-account-email@example.com',
key: require('./path/to/your/private-key.json'),
scopes: SCOPES,
});
calendar.events.list({
auth,
calendarId: 'primary',
timeMin: (new Date()).toISOString(),
maxResults: 10,
singleEvents: true,
orderBy: 'startTime',
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
const events = res.data.items;
if (events.length) {
console.log('Upcoming 10 events:');
events.map((event, i) => {
const start = event.start.dateTime || event.start.date;
console.log(`${start} - ${event.summary}`);
});
} else {
console.log('No upcoming events found.');
}
});
}
main().catch(console.error);
确保你的服务账户密钥文件(通常是 JSON 格式)路径正确,并且文件内容有效。你可以在 Google Cloud Console 中创建一个新的服务账户并下载密钥文件。
确保在 Google Cloud Console 中已经启用了 Google Calendar API。你可以在 Google Cloud Console
中进行设置。
如果问题仍然存在,仔细检查控制台输出的详细错误信息。错误信息通常会提供更多关于问题的线索。
以下是一个完整的示例代码,展示了如何使用 Google Calendar API 获取即将到来的事件:
const { google } = require('googleapis');
const calendar = google.calendar('v3');
const SCOPES = ['https://www.googleapis.com/auth/calendar'];
async function main() {
const auth = new google.auth.JWT({
email: 'your-service-account-email@example.com',
key: require('./path/to/your/private-key.json'),
scopes: SCOPES,
});
try {
const res = await calendar.events.list({
auth,
calendarId: 'primary',
timeMin: (new Date()).toISOString(),
maxResults: 10,
singleEvents: true,
orderBy: 'startTime',
});
const events = res.data.items;
if (events.length) {
console.log('Upcoming 10 events:');
events.forEach((event, i) => {
const start = event.start.dateTime || event.start.date;
console.log(`${start} - ${event.summary}`);
});
} else {
console.log('No upcoming events found.');
}
} catch (err) {
console.error('The API returned an error:', err);
}
}
main().catch(console.error);
领取专属 10元无门槛券
手把手带您无忧上云