如何查找Google日历活动的活动ID?

时间:2015-09-24 07:09:58

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

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

麻烦的是我没有他们的身份证。

当我进入日历并点击该活动时,我无处可以看到该ID。

有谁知道我能在哪里找到它?

7 个答案:

答案 0 :(得分:7)

在Google日历网站上

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

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

  2. 它将带您进入包含https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-

  3. 等网址的网页
  4. 在网址中查找“eid”。

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

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

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

答案 1 :(得分:6)

还有另一种查看事件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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

如果要使用编程解决方案,请注意,由于CalendarAppgetId()的文档规定:

,因此不能使用标准API(CalendarEvent

  

获取事件的唯一iCalUID。请注意,Calendar v3 API和Calendar Advanced服务使用的iCalUID和事件ID不相同,因此不能互换使用。它们在语义上的差异是,在重复事件中,一个事件的所有出现都具有不同的ID,而它们都共享相同的iCalUID。

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


以下是有关getId()为何因重复发生事件而中断的更多详细信息:这是因为当您在重复的事件上调用event.getId()时,会获得相同的ID。无法使用简单的Calendar API引用日历事件的特定实例。通过附加诸如_20190626T000000Z之类的格式,URL仍然能够引用事件的特定实例。但是,尚不清楚在那里需要提供哪些值。在某些情况下,_替换为_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将使您的生活更加轻松。

答案 4 :(得分:0)

  • 得到卡尔
  • 在有问题的时间段内循环所有事件
function myFunction() {
  var cal = CalendarApp.getCalendarById(id);
  var events = cal.getEvents(startTime, endTime);
  for ( var i in events ) {
    var id = events[i].getId();
  }
}

答案 5 :(得分:0)

简单的答案是eventId = event.get('id')。 您没有询问事件对象,但作为其他人的指南,这就是我为Google Calendar 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')

答案 6 :(得分:0)

创建时可以直接获取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'])