首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Node服务器访问Google Calendar API

从Node服务器访问Google Calendar API
EN

Stack Overflow用户
提问于 2017-07-07 11:25:17
回答 2查看 11.6K关注 0票数 11

由于某些原因,我很难访问Google日历。

我希望能够从我的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';

我对如何实现这一点的简单指导将不胜感激。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-07 15:45:33

我相信您想要使用Node.js在日历中添加和删除事件。

关于日历接口的使用,要使用日历接口,首先需要通过客户端ID、客户端密钥等信息来检索client_secret.json,并在接口控制台开启日历接口。

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

使用quickstart.js中除listEvents(auth)以外的函数进行授权。在listEvents(auth)中,可以通过使用授权检索到的访问令牌来使用日历API。

示例脚本

以下示例脚本用于添加和删除事件。这假设快速入门中的步骤1和步骤2已经完成,并且使用了quickstart.js

对于Node.js Quickstart sample,它修改了listEvents()。使用此示例脚本时,请复制粘贴Node.js快速入门示例,并按如下方式更改listEvents(),并添加以下addEvents()removeEvents()

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
function removeEvents(auth, calendar){
  calendar.events.delete({
    auth: auth,
    calendarId: 'primary',
    eventId: "#####",
  }, function(err) {
    if (err) {
      console.log('Error: ' + err);
      return;
    }
    console.log("Removed");
  });
}
票数 7
EN

Stack Overflow用户

发布于 2017-10-27 07:58:54

我和你的情况一样。谷歌没有nodejs client API的server-to-server身份验证文档。太荒谬了。最后我找到了解决方案here。基本上,您需要一个服务帐户密钥(通常是JSON文件)和google.auth.JWT server-to-server OAuth 2.0客户端。

代码语言:javascript
复制
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:

代码语言:javascript
复制
let calendar = google.calendar('v3');
calendar.events.list({
   auth: jwtClient,
   calendarId: 'primary'//whatever
}, function (err, response) {

});
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44962062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档