从Node服务器访问Google Calendar API

lvmkulzt  于 2023-08-04  发布在  Node.js
关注(0)|答案(3)|浏览(93)

出于某种原因,我有一个真正的困难时间访问谷歌日历。
我希望能够从我的Node.js服务器中添加和删除日历中的事件。
我从这些文件中发现了相互矛盾的信息。
我遵循了-https://developers.google.com/identity/protocols/OAuth2ServiceAccount,它给出了一个很好的指南,就如何获得访问令牌,但在最后,它似乎只是访问驱动器。
然后,我按照Google Calendar API v3 Access Not Configured,它说,你只需要一个API密钥,但这似乎是从客户端完成的,所以也许它是不同的?
我也看过https://developers.google.com/google-apps/calendar/quickstart/nodejs,但仅仅对日历进行简单的API调用似乎非常复杂。示例代码引用的文件不清楚它们来自何处或如何构造它们。例如,var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';
我将非常感谢关于如何实现这一点的简单指南。
谢啦,谢啦

hwamh0ep

hwamh0ep1#

我和你的情况一样。Google没有nodejs客户端API的server-to-server身份验证文档。太荒谬了最后我找到了解决方案here。基本上,您需要一个服务帐户密钥(通常是JSON文件)和google.auth.JWTserver-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!");
 }
});

字符串
现在就像这样调用日历API:

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

});

7d7tgy0s

7d7tgy0s2#

我相信你想使用Node.js在日历中添加和删除事件。
关于quickstart.js使用日历API,为了使用日历API,首先,用户必须使用客户端ID,客户端密钥等检索client_secret.json,并在API控制台启用日历API。
下一步,必须使用client_secret.json从Google检索访问令牌和刷新令牌。Quickstart中的大部分quickstart.js都用于检索它们。var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';包括使用client_secret.json检索的访问令牌和刷新令牌。可以从不具有到期时间的刷新令牌中检索具有到期时间的访问令牌。在quickstart.js中,每次运行脚本时都会使用刷新令牌检索访问令牌。
quickstart.js中除listEvents(auth)以外的函数用于授权。在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
}

字符串

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);
  });
}

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");
  });
}

f2uvfpb9

f2uvfpb93#

日历API在此处记录https://developers.google.com/calendar/api/guides/overview
Google有各种环境的快速入门API,可以在这里找到代码示例https://developers.google.com/calendar/api/quickstart/nodejs

相关问题