Google Calendar Events API for Insert throw 400

时间:2017-02-14 03:48:57

标签: javascript google-calendar-api http-status-code-400

我查看了与此问题相关的其他帖子,但它们不一样:我正在使用"回复",我从google api网站复制了日期/时间,因此格式正确,并且我已经玩过标题了。为什么这不起作用的任何其他想法?

我收到以下错误:

Error: failed [400] {  "error": {   "errors": [    {     "domain": "global",     "reason": "required",     "message": "Missing end time."    }   ],   "code": 400,   "message": "Missing end time."  } } [object Object]

我的代码分解为以下步骤:我要进入POST的网址,用户访问令牌,插入日历事件的选项(包括标题)以及包含开始,结束和事件摘要的事件以及实际http post和callback函数:

calendarSchedule() {
    if(Meteor.user() && moment(Meteor.user().services.google.expiresAt) > moment()._d) {
      var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events";
      var userAccessToken = Meteor.user().services.google.accessToken;

      var options = {
        headers : {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + userAccessToken,
          'X-JavaScript-User-Agent': "Google APIs Explorer",
        },
        calendarId: 'primary',
        resource : {
          start: { dateTime: "2016-05-03T18:03:58+02:00" },
          end: { dateTime: "2016-05-03T18:03:58+02:00" },
          summary: "testSummar",
        }
      };

      HTTP.post(url, options,
        function(error,result) {
          console.log("posted to calendar? "+ error+ result);
        });
    }
  }

1 个答案:

答案 0 :(得分:0)

我想通了,我想我应该在这里发布答案。

出于某种原因,在这种情况下,您使用数据而不是资源。我不确定为什么万一其他人想在这一点上插话,但这与谷歌API日历网站上的内容不同。

我的最终代码有效:

  calendarSchedule() {
    if(Meteor.user() && moment(Meteor.user().services.google.expiresAt) > moment()._d) {
      var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events";
      var userAccessToken = Meteor.user().services.google.accessToken;

      var currentEvent = {
        'summary': this.props.text,
        // 'location': this.refs.location.textContent,
        'start': {
          'dateTime': moment()._d,
          'timeZone': this.refs.timeZone,
        },
        'end': {
          'dateTime': moment(moment()._d).add(1, 'hours'),
          'timeZone': this.refs.timeZone,
        },
        'attendees': [],
        'reminders': {
          'useDefault': true,
        }
      };

      var options = {
        headers : {
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ' + userAccessToken,
          'X-JavaScript-User-Agent': "Google APIs Explorer",
        },
        calendarId: 'primary',
        data: currentEvent,
      };

      var searchResult = HTTP.post(url, options,
        function(error,result) {
          console.log("posted to calendar? "+ error+ result);
        });
    }
  }