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

Javascript Google Calendar API Set Calendar to Public

本文关键字:设置 日历 Google Calendar API Javascript      更新时间:2023-09-26

我正在使用谷歌日历的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文档中的任何内容联系起来。

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

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

将您的日历公开

  1. 在电脑上,打开谷歌日历。

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

  3. 打开日历选项卡。

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

  5. 打开"共享此日历"选项卡。

  6. 选中"公开此日历"选项。

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

  8. 单击"保存"。

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

在您的网站上嵌入日历

  1. 在电脑上,打开谷歌日历。你只能从电脑上获得嵌入网站的代码,而不能从移动应用程序上获得。

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

  3. 打开日历选项卡。

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

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

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

日历资源没有任何关于可见性的属性。但是,由于您使用的是"事件"列表,它的资源具有可见性属性,您可以在其中筛选出(尽管是手动的)公共项目。

公共The event is public and event details are visible to all readers of the calendar.

您不需要像示例那样启动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.');
      }
    });
  }