Javascript Google Calendar API将日历设置为公开

时间:2016-01-08 22:38:30

标签: javascript calendar google-calendar-api

我使用谷歌日历的API来显示公司日历的精简版本。我想让任何人在我的网站上查看我的日历版本。目前,只有我可以查看日历页面,如果我要与任何人共享页面URL,它不起作用 - 他们无法查看任何内容。

我在这里使用谷歌的起始代码:

var CLIENT_ID = 'MYID**';
var SCOPES = ["https://www.googleapis.com/auth/calendar.readonly"];

function checkAuth() {
    gapi.auth.authorize(
      {
        'client_id': CLIENT_ID,
        'scope': SCOPES,
        'immediate': true
      }, handleAuthResult);
}

function handleAuthResult(authResult) {
    var authorizeDiv = document.getElementById('authorize-div');
  loadCalendarApi();
}

function handleAuthClick(event) {
    gapi.auth.authorize({
        client_id: CLIENT_ID, 
        scope: SCOPES, 
        immediate: false
    }, handleAuthResult); 
    return false;
}

function loadCalendarApi() {
    gapi.client.load('calendar', 'v3', listUpcomingEvents);
}

function listUpcomingEvents() {
    var request = gapi.client.calendar.events.list({
        'calendarId': 'iorbmkj57ee8ihnko0va1snif8@group.calendar.google.com',
        'timeMin': '2011-06-03T10:00:00-07:00',
        'showDeleted': false,
        'singleEvents': true,
        'maxResults': 1000,
        'orderBy': 'startTime'
});

但我似乎无法找到将这个日历公之于众的地方。 stackoverflow上的两个例子并没有解释太多,我似乎无法连接Google的API文档。

3 个答案:

答案 0 :(得分:1)

如果您只想分享日历,可以将其公开,然后将日历分享给所有人。这就是。

要公开您的日历,您可以按照本网站https://support.google.com/calendar/answer/37083?hl=en的步骤进行操作。

  

公开您的日历

     
      
  1. 在计算机上,打开Goog​​le日历。

  2.   
  3. 点击右上角的设置设置齿轮按钮>设置。

  4.   
  5. 打开“日历”标签。

  6.   
  7. 单击要共享的日历的名称。

  8.   
  9. 打开“共享此日历”标签。

  10.   
  11. 选中将此日历设为公开选项。

  12.   
  13. 如果不希望其他人查看您的活动详情,请选择仅查看空闲/忙碌(隐藏详细信息)。

  14.   
  15. 点击保存。

  16.   

然后您可以在日历选项中与iframe共享日历。 https://support.google.com/calendar/answer/41207?hl=en

  

在您的网站上嵌入日历

     
      
  1. 在计算机上,打开Goog​​le日历。您只能从计算机而不是移动应用程序中获取嵌入您网站的代码。

  2.   
  3. 点击右上角的设置设置齿轮按钮>设置。

  4.   
  5. 打开“日历”标签。

  6.   
  7. 单击要嵌入的日历的名称。

  8.   
  9. 在“嵌入此日历”部分中,复制显示的iframe代码。

  10.   
  11. 打开网站编辑器,然后将此代码粘贴到您希望显示日历的位置。

  12.   

答案 1 :(得分:0)

Calendars资源没有任何关于可见性的属性。但是,由于您使用的是Events list,因此其资源具有可见性属性,您可以在其中过滤掉(尽管是手动)公开的项目。

  

public ItemTouchHelper

答案 2 :(得分:0)

您不需要像示例那样启动OAuth 2.0授权流程(已弃用)。实际上,您可以使用浏览器API密钥和日历ID

加载日历
  function checkAuth() {
    //gapi.auth.authorize(
    //  {
    //    'client_id': CLIENT_ID,
    //    'scope': SCOPES.join(' '),
    //    'immediate': true
      //  }, handleAuthResult);
      gapi.client.setApiKey('browser API key');
      handleAuthResult({ error: false });
  }

  function listUpcomingEvents() {
    var request = gapi.client.calendar.events.list({
        'calendarId': 'your calendar id',
      'timeMin': (new Date()).toISOString(),
      'showDeleted': false,
      'singleEvents': true,
      'maxResults': 10,
      'orderBy': 'startTime'
    });

    request.execute(function(resp) {
      var events = resp.items;
      appendPre('Upcoming events:');

      if (events.length > 0) {
        for (i = 0; i < events.length; i++) {
          var event = events[i];
          var when = event.start.dateTime;
          if (!when) {
            when = event.start.date;
          }
          appendPre(event.summary + ' (' + when + ')')
        }
      } else {
        appendPre('No upcoming events found.');
      }

    });
  }