将事件插入Google日历Node.js [英] Insert event to google calendar nodejs

查看:78
本文介绍了将事件插入Google日历Node.js的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在阅读有关将事件插入到Google日历api中的文档,但没有成功.我能够按照快速入门指南从Google日历中提取事件列表,但现在我无法使插入内容起作用.我保持环境设置不变,只是添加了insert方法,但是我的错误是There was an error contacting the Calendar service: Error: Insufficent Permission

I'm reading through the docs on inserting events in to the google calendar api but not having any success. I was able to follow the quick start guide and pull a list of events from my google calendar but now I cant get the insert to work. I've kept the enviroment set up the same and just added the insert method but My error is There was an error contacting the Calendar service: Error: Insufficent Permission

const fs = require('fs');
const readline = require('readline');
const { google } = require('googleapis');
const SCOPES = ['https://www.googleapis.com/auth/calendar'];
const TOKEN_PATH = 'credentials.json';

// Load client secrets from a local file.
try {
  const content = fs.readFileSync('client_secret.json');
  authorize(JSON.parse(content), insertEvents);
} catch (err) {
  return console.log('Error loading client secret file:', err);
}

/**
 * Create an OAuth2 client with the given credentials, and then execute the
 * given callback function.
 * @param {Object} credentials The authorization client credentials.
 * @param {function} callback The callback to call with the authorized client.
 * @return {function} if error in reading credentials.json asks for a new one.
 */
function authorize(credentials, callback) {
  const { client_secret, client_id, redirect_uris } = credentials.installed;
  let token = {};
  const oAuth2Client = new google.auth.OAuth2(
    client_id,
    client_secret,
    redirect_uris[0]
  );

  // Check if we have previously stored a token.
  try {
    token = fs.readFileSync(TOKEN_PATH);
  } catch (err) {
    return getAccessToken(oAuth2Client, callback);
  }
  oAuth2Client.setCredentials(JSON.parse(token));
  callback(oAuth2Client);
}
/**
 * Get and store new token after prompting for user authorization, and then
 * execute the given callback with the authorized OAuth2 client.
 * @param {google.auth.OAuth2} oAuth2Client The OAuth2 client to get token for.
 * @param {getEventsCallback} callback The callback for the authorized client.
 */
function getAccessToken(oAuth2Client, callback) {
  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 that page here: ', code => {
    rl.close();
    oAuth2Client.getToken(code, (err, token) => {
      if (err) return callback(err);
      oAuth2Client.setCredentials(token);
      // Store the token to disk for later program executions
      try {
        fs.writeFileSync(TOKEN_PATH, JSON.stringify(token));
        console.log('Token stored to', TOKEN_PATH);
      } catch (err) {
        console.error(err);
      }
      callback(oAuth2Client);
    });
  });
}



function insertEvents(auth) {
  const calendar = google.calendar({ version: 'v3', auth });
  var event = {
    summary: 'Google I/O 2015',
    location: '800 Howard St., San Francisco, CA 94103',
    description: "A chance to hear more about Google's developer products.",
    start: {
      dateTime: '2015-05-28T09:00:00-07:00',
      timeZone: 'America/Los_Angeles'
    },
    end: {
      dateTime: '2015-05-28T17:00:00-07:00',
      timeZone: 'America/Los_Angeles'
    },
    recurrence: ['RRULE:FREQ=DAILY;COUNT=2'],
    attendees: [{ email: 'lpage@example.com' }, { email: 'sbrin@example.com' }],
    reminders: {
      useDefault: false,
      overrides: [
        { method: 'email', minutes: 24 * 60 },
        { method: 'popup', minutes: 10 }
      ]
    }
  };

  calendar.events.insert(
    {
      auth: auth,
      calendarId: 'primary',
      resource: event
    },
    function(err, event) {
      if (err) {
        console.log(
          'There was an error contacting the Calendar service: ' + err
        );
        return;
      }
      console.log('Event created: %s', event.htmlLink);
    }
  );
}

推荐答案

我认为您的范围对于使用calendar.events.insert()是正确的.那修改呢?

I think that your scope is correct for using calendar.events.insert(). So how about this modification?

  1. 我认为范围可能尚未反映到访问令牌中.因此,请删除一次credentials.json,然后再次授权范围.这样,它再次创建credentials.json.反映范围的访问令牌和刷新令牌可以被检索.
  2. 在您的脚本中,console.log('Event created: %s', event.htmlLink)中的event.htmlLink变为undefined.因此,对于您的脚本,请修改为console.log('Event created: %s', event.data.htmlLink).
  1. I thought that the scope might be not reflected to the access token yet. So please remove credentials.json once, and authorize the scopes again. By this, it creates credentials.json again. And the access token and refresh token reflected the scope can be retrieved.
  2. In your script, event.htmlLink of console.log('Event created: %s', event.htmlLink) becomes undefined. So in the case of your script, please modify to console.log('Event created: %s', event.data.htmlLink).

如果这些对您的情况没有帮助,对不起.

If these are not useful for your situation, I'm sorry.

这篇关于将事件插入Google日历Node.js的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆