从节点服务器访问Google Calendar API

Str*_*ch0 8 google-calendar-api node.js

出于某种原因,我很难访问Google日历.

我希望能够从我的Node.js服务器添加和删除日历中的事件.

我从文件中发现了非常矛盾的信息.

我关注了 - https://developers.google.com/identity/protocols/OAuth2ServiceAccount,它提供了有关如何获取帐户令牌的良好指南,但最后它似乎仅用于访问云端硬盘.

然后我按照谷歌日历API v3访问未配置,这表明你只需要一个API密钥,但这看起来好像它是从客户端完成所以可能它是不同的?

我也查看了https://developers.google.com/google-apps/calendar/quickstart/nodejs,但这对于对日历进行简单的API调用似乎非常复杂.示例代码引用的文件不清楚它们来自何处或如何构造它们.例如var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';

关于如何实现这一目标的简单指南将非常受欢迎.

谢谢

Zuz*_*zEL 17

我和你的情况一样.Google没有server-to-server针对nodejs客户端API 进行身份验证的文档.荒谬.最后我在这里找到了解决方案.基本上你需要一个服务帐户密钥(通常是JSON文件)和google.auth.JWT server-to-server OAuth 2.0客户端.

let google = require('googleapis');
let privatekey = require("./privatekey.json");
// configure a JWT auth client
let jwtClient = new google.auth.JWT(
       privatekey.client_email,
       null,
       privatekey.private_key,
       ['https://www.googleapis.com/auth/calendar']);
//authenticate request
jwtClient.authorize(function (err, tokens) {
 if (err) {
   console.log(err);
   return;
 } else {
   console.log("Successfully connected!");
 }
});
Run Code Online (Sandbox Code Playgroud)

现在只需调用日历API:

let calendar = google.calendar('v3');
calendar.events.list({
   auth: jwtClient,
   calendarId: 'primary'//whatever
}, function (err, response) {

});
Run Code Online (Sandbox Code Playgroud)

  • 哇,通过 Google 自己的文档的响应更好地理解如何从日历 API 获取事件的能力是荒谬的,谢谢。 (2认同)

Tan*_*ike 5

您想使用Node.js在日历中添加和删除事件。我的理解正确吗?如果我的理解是错误的,请告诉我。

关于quickstart.js使用日历API,首先要使用日历API,用户必须client_secret.json使用客户端ID,客户端密码等进行检索,并在API控制台上启用日历API。

下一步,必须使用从Google检索访问令牌和刷新令牌client_secret.jsonquickstart.js快速入门中的大多数用于检索它们。var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';包括访问令牌和使用检索的刷新令牌client_secret.json。可以从不具有到期时间的刷新令牌中检索具有到期时间的访问令牌。在quickstart.js,使用刷新令牌在每次运行脚本时检索访问令牌。

除了功能listEvents(auth)quickstart.js被用于授权。在listEvents(auth),可以通过使用授权检索的访问令牌来使用日历API。

样例脚本

以下示例脚本用于添加和删除事件。前提是Quickstart中的步骤1和步骤2已经完成并quickstart.js已使用。

对于Node.js Quickstart示例,它进行了修改listEvents()。当您使用此示例脚本,请复制并粘贴Node.js的快速入门样品和变化listEvents()如下,并添加以下addEvents()removeEvents()

function listEvents(auth) {
  var calendar = google.calendar('v3');

  addEvents(auth, calendar); // Add events
  removeEvents(auth, calendar); // Remove events
}
Run Code Online (Sandbox Code Playgroud)

1.添加事件

详细信息是https://developers.google.com/google-apps/calendar/v3/reference/events/insert

function addEvents(auth, calendar){
  calendar.events.insert({
    auth: auth,
    calendarId: 'primary',
    resource: {
      'summary': 'Sample Event',
      'description': 'Sample description',
      'start': {
        'dateTime': '2017-01-01T00:00:00',
        'timeZone': 'GMT',
      },
      'end': {
        'dateTime': '2017-01-01T01:00:00',
        'timeZone': 'GMT',
      },
    },
  }, function(err, res) {
    if (err) {
      console.log('Error: ' + err);
      return;
    }
    console.log(res);
  });
}
Run Code Online (Sandbox Code Playgroud)

2.删除事件

详细信息是https://developers.google.com/google-apps/calendar/v3/reference/events/delete

function removeEvents(auth, calendar){
  calendar.events.delete({
    auth: auth,
    calendarId: 'primary',
    eventId: "#####",
  }, function(err) {
    if (err) {
      console.log('Error: ' + err);
      return;
    }
    console.log("Removed");
  });
}
Run Code Online (Sandbox Code Playgroud)

对不起,我的英语水平很差。