【问题标题】:How can I find the Event Id of my Google Calendar event?如何找到我的 Google 日历活动的活动 ID?
【发布时间】:2015-09-24 07:09:57
【问题描述】:

我创建了一些 Google 日历活动,现在我想以编程方式对它们进行一些操作。

问题是我没有他们的 ID。

当我进入日历并单击事件时,我看不到 ID。

有人知道我在哪里可以找到它吗?

【问题讨论】:

标签: google-apps-script google-calendar-api


【解决方案1】:

在 Google 日历网站上

因为他最初询问如何单击进入日历并找到特定事件的 ID,因为这也是我需要知道的:

  1. 点击您的 Google 日历中的活动。

  2. 它会带你到一个带有诸如https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-之类的URL的页面

  3. 在 URL 中查找“eid”。

  4. 选择并复制eid- 和下一个- 之间的字符串。 (在我这里的例子中,它是NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw。)

  5. 现在您需要从 Base64 格式解码。您可以将该字符串粘贴到诸如https://www.base64decode.org/ 之类的工具中。

  6. 结果将是由空格分隔的两个字符串。第一个字符串是您的事件 ID。

【讨论】:

  • 现在点击事件会打开一个对话框,但是可以通过“︙”>发布事件>链接到事件来获得链接
【解决方案2】:

还有另一种查看事件 ID 的方法。

  1. 转到https://www.google.com/calendar/render?gsessionid=OK&eventdeb=1 的事件调试 URL
  2. 双击查看受影响的事件。
  3. 选择下拉菜单“更多操作”。
  4. 点击“故障排除信息”。
  5. 复制显示的文本并将其粘贴到您对支持人员的回复中。

来源:http://googleappstroubleshootinghelp.blogspot.com/2012/09/how-to-find-troubleshooting-information.html

【讨论】:

  • 某些用法要求您将@google.com 附加到事件ID 的末尾。有关详细信息,请参阅this question
  • 这太棒了!如果您希望以编程方式获取 id,请参阅 this answer
【解决方案3】:

还有另一种快速简便的方法。

  • 单击日历中的事件。它不需要处于调试模式。
  • 从 URL 中,复制最后一个斜杠和问号之间的字符串。
  • 将此字符串粘贴到 base64 编码器中。 (https://www.base64decode.org/)
  • 您将获得活动 ID 和日历所有者(您?)的电子邮件。
  • (eventId是第一个字符串。)

【讨论】:

    【解决方案4】:
    • 获取电话
    • 循环遍历相关时间段内的所有事件
    function myFunction() {
      var cal = CalendarApp.getCalendarById(id);
      var events = cal.getEvents(startTime, endTime);
      for ( var i in events ) {
        var id = events[i].getId();
      }
    }
    

    【讨论】:

      【解决方案5】:

      TL;DR

      您应该为此使用高级 API。

      Calendar.Events.list(calendarId).items[0].id; // returns the id of the first event
      

      如果您只需要特定事件的事件 ID 并且可以使用手动方法,then eventdeb=1 is your best bet

      如果您需要编程解决方案,请注意您不能使用标准 API (CalendarApp),因为 CalendarEvent 上的 getId() 文档指出:

      获取事件的唯一 iCalUID。请注意,日历 v3 API 和日历高级服务使用的 iCalUID 和事件 ID 不相同,不能互换使用。它们语义上的一个区别是,在重复事件中,一个事件的所有出现都有不同的 id,而它们都共享相同的 iCalUID。

      这意味着如果您想为重复事件构建 URL,您会遇到问题,因为您无法正确使用 getId(),尤其是对于重复事件。最好的解决方法是使用高级日历 API。 (另请注意,如果您尝试使用 construct a link to the calendar event,高级 API 甚至有一个 htmlLink 属性,其中包含编码的 calendarId + realEventId。


      以下是关于为什么getId() 会因重复事件而中断的更多详细信息:这是因为当您在重复的事件上调用event.getId() 时,您会得到相同的 id。无法使用简单的日历 API 来引用日历事件的特定实例。 URL 仍然可以通过附加格式(例如_20190626T000000Z)来引用事件的特定实例。但是,尚不清楚那里需要提供哪些值。也有将_替换为_R,将Z替换为@google.com的情况,使事情更加复杂化。

      为了证明这是一个问题:

      1. 查找重复的日历事件。
      2. 解析其 URL(保证引用具体实例)。
      3. 调用CalendarApp.getEventById(parsedId1).getId()注意返回值。
      4. 现在为不同的事件实例解析 URL。
      5. 调用CalendarApp.getEventById(parsedId2).getId() 注意返回的值。虽然parsedId1parsedId2 是不同的字符串(指具体的实例),但两者的getId() 的返回值是相同的。该事件实际上是对特定实例的引用,但您不能再序列化它们的 ID。

      如果您真的想使用简单的日历 API,您可能需要某种同步过程,并将元数据/标签存储在日历事件的每个实例上,如 alluded to in this answer。不过,the Advanced API 会让您的生活轻松很多。

      【讨论】:

        【解决方案6】:

        简单的答案是 eventId = event.get('id')。 您没有询问事件对象,但作为对其他人的指导,这就是我为我的 Google 日历 python 脚本创建它的方式:

        creds = get_credentials()
        http = creds.authorize(httplib2.Http())
        calendar_service = discovery.build('calendar', 'v3', http=http)
        event = calendar_service.events().insert(calendarId='primary', 
        body=event).execute()
        

        然后

        eventId = event.get('id')
        

        【讨论】:

          【解决方案7】:

          创建时可以直接获取id,需要导入base64:

           event = {
            'summary': 'Google I/O 2015',
            'location': '800 Howard St., San Francisco, CA 94103',
            'description': 'A chance to hear more about Google\'s developer products.',
            'start': {
              'dateTime': '2015-05-28T09:00:00-07:00',
              'timeZone': 'America/Los_Angeles',
            },
            'end': {
              'dateTime': '2015-05-28T17:00:00-07:00',
              'timeZone': 'America/Los_Angeles',
            },
            'recurrence': [
              'RRULE:FREQ=DAILY;COUNT=2'
            ],
            'attendees': [
              {'email': 'lpage@example.com'},
              {'email': 'sbrin@example.com'},
            ],
            'reminders': {
              'useDefault': False,
              'overrides': [
                {'method': 'email', 'minutes': 24 * 60},
                {'method': 'popup', 'minutes': 10},
              ],
            },
          }
          
          event = service.events().insert(calendarId='primary', body=event).execute()
          
          print(event['id'])
          
          

          【讨论】:

            【解决方案8】:

            转到日历并单击事件,它会显示如下弹出窗口

            现在点击edit图标,它会重定向到一个页面,然后从url中找到eventedit这个参数之后你可以看到事件ID。网址如下所示

            https://calendar.google.com/calendar/u/0/r/eventedit/OGM1dnRlODY4azBzMWtjdThzMmo3NmM2OWNfMjAyMTEwMjhUMTYwMDAwWiBuNXUzMTk5NTFyYjI18555FsdZwdWE4dWExb0Bn?pli=1
            

            【讨论】:

              猜你喜欢
              • 2014-06-30
              • 1970-01-01
              • 2012-04-22
              • 2023-04-04
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-06-12
              相关资源
              最近更新 更多