Прошу прощения за этот вопрос заранее. Я знаю, что это немного повсюду, но я просто потерян до такой степени, что я больше не уверен в том, что я спрашиваю. Не стесняйтесь задавать любые вопросы, если вам нужны разъяснения!
В настоящее время я работаю с вашим API Календаря Google. Мне нужна помощь, с моей интеграцией NodeJS. Мне нужно вытащить некоторые данные, касающиеся календаря, содержащего информацию о датах отпусков.
Кажется, я получаю сообщение об ошибке: "The API returned an error: Error: Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
Я попытался найти четкий ответ на эту проблему и способы ее решения. Но ни руководства StackOverflow, ни руководства Googles не помогают мне понять, что мне нужно делать, и какова / где на самом деле связь между моим приложением и API календаря Google.
Я также попытался провести рефакторинг кода примера из руководства по быстрому старту NodeJS на ваших страницах, чтобы я мог вернуть массив, содержащий объекты календаря с именем и описанием даты. Это дает неопределенный. Поэтому мне в основном нужна помощь в рассмотрении ошибок в моем коде и повторной оценке процедуры аутентификации, поскольку у меня настроены секретные учетные данные и токен из вашего API сохранен на моей машине.
Итак, у меня есть код, который при вызове контроллера календаря для получения данных я получаю undefined
назад и ошибку
Код быстрого запуска: https://developers.google.com/calendar/quickstart/nodejs
Мой класс контроллера календаря:
const fs = require('fs');
const readline = require('readline');
const {google} = require('googleapis');
const SCOPES = ['https://www.googleapis.com/auth/calendar.readonly'];
const TOKEN_PATH = __dirname + '/token.json';
class CalendarController {
/**
* Create an OAuth2 client with the given credentials.
* @param {Object} credentials The authorization client credentials.
*/
getOAuth2Client(credentials) {
const {client_secret, client_id, redirect_uris} = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]);
fs.readFile(TOKEN_PATH, (err, token) => {
if (err) return this.getNewAccessToken(oAuth2Client);
oAuth2Client.setCredentials(JSON.parse(token));
return oAuth2Client;
});
}
/**
* Get and store new token after prompting for user authorization.
* @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for.
*/
getNewAccessToken(oAuth2Client) {
const authUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES
});
console.log('Authorize this app by visiting this url: ', authUrl);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Enter the code from the webpage here: ', (code) => {
rl.close();
oAuth2Client.getToken(code, (err, token) => {
if (err) return console.error('Error retrieving access token', err);
oAuth2Client.setCredentials(token);
// Store the token to disk for later program executions
fs.writeFile(TOKEN_PATH, JSON.stringify(token), (err) => {
if (err) console.error(err);
console.log('Token stored to: ', TOKEN_PATH);
});
});
return oAuth2Client;
});
}
/**
* Lists the next maxResults events on the user's primary calendar.
* @param {google.auth.OAuth2} auth An authorized OAuth2 client.
*/
listEvents(auth) {
const calendar = google.calendar({version: 'v3', auth});
let vacation_events = [];
calendar.events.list({
calendarId: 'CALENDAR.ID.IS.OMITTED.CUZ.DUH',
timeMin: (new Date()).toISOString(),
maxResults: 250,
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) {
events.map((event, i) => {
const start = event.start.dateTime || event.start.date;
const end = event.end.dateTime || event.end.date;
let vacation = {
event_title: event.summary,
event_description: event.description,
dt_start: start,
dt_end: end,
}
vacation_events.push(vacation);
});
console.log(vacation_events);
return vacation_events;
} else {
console.log('No upcoming events found.');
}
});
}
getData() {
fs.readFile(__dirname + '/credentials.json', (err, content) => {
if (err) return console.error('Error loading client secrect file: ', err);
console.log(
this.listEvents(this.getOAuth2Client(JSON.parse(content)))
);
// return this.listEvents(this.getOAuth2Client(JSON.parse(content)));
})
}
}
module.exports = CalendarController;
Чтобы было ясно. У меня есть файлы credentials.json
и token.json
в моем проекте, и они были сохранены на моем компьютере.