如何构建指向 Google 日历活动的链接?

Sen*_*ful 1 google-calendar-api google-apps-script

如果我有 Google Calendar event 的 event ID,例如:

4htgpmm1hmak744r0kbkdcodar@google.com

如何构建 URL 以在 Google 日历界面中查看事件详细信息?

例如,如果我去参加一个谷歌日历活动,我会看到一个像这样的 URL:

https://calendar.google.com/calendar/r/eventedit/NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw

什么功能/算法可我跑从去4htgpmm1hmak744r0kbkdcodar@google.comNGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw

奖励:如果还有一个通过 Google Apps Script 处理CalendarEvent的快捷方法,那就太棒了。例如,如果有一个方法,getUrl()就像有一个getId()方法一样。

Sen*_*ful 6

由于同一个事件可以存在于多个日历中(例如通过邀请其他人加入),事件 ID 不是足够的信息。

要构建一个 URL,您需要事件 ID(如何查找它的复习)和日历 ID(有关如何查找它的说明,请参见下文)。然后您需要将两者都编码为 base64,最后您将拥有一个有效的 Google 日历事件链接。

对于以下说明,假设我们有一个事件 Event1,它同时存在于日历 A 和日历 B 中。

在 Google 日历界面中,您可以查看以下任意组合:

  • 日历A中的事件1
  • 日历 B 中的事件 1

让我们分配以下 ID:

  • 事件 1 ID:4htgpmm1hmak744r0kbkdcodar@google.com
  • 日历A ID:eugu9kan1ddi1pmi6sk3ib56g@group.calendar.google.com
  • CalendarB ID:afd3zeuguoepmi32s5i56g@group.calendar.google.com

要构建事件 URL:

  1. 获取event-id,这是没有的事件ID@google.com

    例如,对于 Event1,我们有 4htgpmm1hmak744r0kbkdcodar

  2. 获取calendar-id,这是@group.calendar.google.com替换为的日历 ID@g

    例如对于 CalendarA 我们有 eugu9kan1ddi1pmi6sk3ib56g@g

  3. 将两个值连接起来,中间有一个空格。

    <event-id> <calendar-id>
    
    Run Code Online (Sandbox Code Playgroud)

    例如,对于 Event1 + CalendarA,我们有:

    4htgpmm1hmak744r0kbkdcodar eugu9kan1ddi1pmi6sk3ib56g@g
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将值编码为 base64(例如在https://www.base64decode.org 上):

    NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw==
    
    Run Code Online (Sandbox Code Playgroud)
  5. 删除训练==

    NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
    
    Run Code Online (Sandbox Code Playgroud)
  6. 您现在可以将此值附加到https://www.google.com/calendar/event?eid=(查看事件页面)或https://calendar.google.com/calendar/r/eventedit/(编辑事件页面):

    https://www.google.com/calendar/event?eid=NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
    
    or
    
    https://calendar.google.com/calendar/r/eventedit/NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
    
    Run Code Online (Sandbox Code Playgroud)
  7. 你完成了!该 URL 会将您带到 Google 界面中的日历活动。


如何查找日历 ID

如果您需要有关如何查找日历 ID 的说明...

要查找日历 ID:

  1. 转到日历设置
  2. 向下滚动,直到找到日历 ID 字段。

    这可能是以@group.calendar.google.com、您的电子邮件地址或其他一些值结尾的值。

如果您在查找日历 ID 时遇到问题,另一个可能有帮助的工具是eventdeb=1参数添加到 URL,转到事件的故障排除信息,然后查找organizerparticipant值,这两个值都包含日历 ID。


在 Apps 脚本中

var eventUrl = "https://www.google.com/calendar/event?eid=" +
                  Utilities.base64Encode(event.getId().split('@')[0] +
                  " " + 
                  event.getOriginalCalendarId())
                  .replace(/\=/g, '');
Run Code Online (Sandbox Code Playgroud)