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

问题描述 投票:0回答:3

如果我有 Google 日历事件的事件 ID,例如:

[电子邮件受保护]

如何构建 URL 来查看 Google 日历界面中的活动详细信息?

例如,如果我去参加 Google 日历活动,我会看到如下 URL:

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

我可以运行什么函数/算法来从

[email protected]
NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw

奖励:如果还有一个通过 Google Apps 脚本在 CalendarEvent 上运行的快捷方法,那就更好了。例如,如果有一个诸如

getUrl()
的方法,就像有一个 getId() 方法一样。

google-apps-script google-calendar-api
3个回答
13
投票

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

要构建 URL,您需要事件 ID(了解如何查找它)和日历 ID(有关如何查找它的说明,请参阅下文)。 然后您需要将编码为base64,最后您将获得有效的Google日历活动链接。

对于以下说明,假设我们有一个事件 Event1,并且它存在于日历 CalendarA 和 CalendarB 中。

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

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

让我们分配以下 ID:

构建事件 URL:

  1. 获取

    event-id
    ,即不带
    @google.com

    的事件 id

    例如对于事件 1,我们有

    4htgpmm1hmak744r0kbkdcodar

  2. 获取

    calendar-id
    ,即日历 ID,其中
    @group.calendar.google.com
    替换为
    @g

    例如对于 CalendarA,我们有

    eugu9kan1ddi1pmi6sk3ib56g@g

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

    <event-id> <calendar-id>
    

    例如对于事件 1 + 日历 A,我们有:

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

    NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw==
    
  5. 删除训练

    ==

    NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
    
  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
    
  7. 你完成了!该 URL 将带您进入 Google 界面中的日历活动。


如何查找日历ID

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

要查找日历 ID:

  1. 进入日历设置
  2. 向下滚动直至找到日历 ID 字段。

    这可能是以

    @group.calendar.google.com
    结尾的值、您的电子邮件地址或其他值。

如果您在查找日历 ID 时遇到问题,另一个可能有帮助的工具是

eventdeb=1
参数添加到 URL,转到事件的 故障排除信息,然后查找
organizer
participant
值,两者都包含日历 ID。


在应用程序脚本中

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

1
投票

@Senseful 是一个非常有帮助的答案,而且它有效!

在上述内容中添加一些需要注意的重要事项。首先,当base64编码时,最后会出现一个==,删除它

其次,当事件所属的日历不属于用户登录的主帐户时,基本日历 URL 将不起作用。例如,如果您登录了 3 个帐户,则每个帐户都会有一个不同的 URL,例如

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

https://calendar.google.com/calendar/b/2/r/...

https://calendar.google.com/calendar/b/3/r/...

等等...我认为没有解决方案可以帮助解决这种情况,因为无法预测特定用户随时登录的帐户。


0
投票

如果您的日历 ID 是

[email protected]
,那么您可以创建链接,例如
https://calendar.google.com/u/0/r/[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.