JavaScript谷歌日历API将日历设置为公开

17

我正在使用谷歌日历的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文档中找到相关内容。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - ntgCleaner
你能否使用私有 API 密钥从服务器获取日历数据,对其进行处理,然后将其提供给 JS?你甚至不需要数据库(尽管这样更有效率)。 - Jesse Farmer
3个回答

1
如果您只想分享您的日历,您可以将其设为公开,并向所有人分享。以下是具体步骤。
要将您的日历设为公开,请按照此网站https://support.google.com/calendar/answer/37083?hl=en上的步骤进行操作。
使您的日历公开:
  1. 在电脑上打开Google日历。
  2. 在右上角,点击设置按钮>设置。
  3. 打开“日历”选项卡。
  4. 单击要共享的日历名称。
  5. 打开“共享此日历”选项卡。
  6. 勾选“将此日历设为公开”选项。
  7. 如果不希望其他人查看您事件的详细信息,请选择“仅查看空闲/忙碌时间(隐藏详细信息)”。
  8. 点击“保存”。

然后,您可以在日历选项中使用iframe共享您的日历。 https://support.google.com/calendar/answer/41207?hl=zh-Hans

在网站上嵌入日历

  1. 在计算机上打开Google日历。您只能从计算机而非移动应用获取要嵌入到您的网站中的代码。

  2. 在右上角,单击“设置”齿轮按钮>“设置”。

  3. 打开“日历”选项卡。

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

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

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


1
很遗憾,我不需要谷歌的即插即用 iFrame。我想知道是否可以使用他们的 API 来实现这个功能。 - ntgCleaner
你应该能够使用从公开API生成的URL来访问日历。 - kgiff

0

日历资源没有关于可见性的属性。但是,由于您正在使用事件列表,它的资源具有可见性属性,您可以手动过滤掉公共项目。

公共 该事件是公共的,事件详细信息对日历的所有读者可见。


所以我已经尝试将整个日历设为公开,但仍然没有结果。 - ntgCleaner

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

    });
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接