我创建了一些Google日历活动,现在我想以编程方式对它们进行一些操作。
麻烦的是我没有他们的身份证。
当我进入日历并点击该活动时,我无处可以看到该ID。
有谁知道我能在哪里找到它?
答案 0 :(得分:7)
因为他最初询问如何点击进入日历并找到特定事件的ID,因为这也是我需要知道如何做的事情:
点击Google日历中的活动。
它将带您进入包含https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-
在网址中查找“eid”。
在eid-
和下一个-
之间选择并复制字符串。 (在我的例子中,它是NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
。)
现在您需要从Base64格式解码。您可以将该字符串粘贴到https://www.base64decode.org/等工具中。
结果将是由空格分隔的两个字符串。第一个字符串是您的事件ID。
答案 1 :(得分:6)
还有另一种查看事件ID的方法。
答案 2 :(得分:1)
还有另一种快速简便的方法。
答案 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。
如果要使用编程解决方案,请注意,由于CalendarApp
上getId()
的文档规定:
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
,这使事情变得更加复杂。
要证明这是一个问题:
CalendarApp.getEventById(parsedId1).getId()
,注意返回的值。CalendarApp.getEventById(parsedId2).getId()
,注意返回的值。尽管parsedId1
和parsedId2
是不同的字符串(指的是特定实例),但是在这两个字符串上返回的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'])