Reputation: 23352
I created some Google Calendar events and now I would like to do some operations on them programmatically.
Trouble is I don't have their IDs.
When I go into the calendar and click on the event, there is nowhere where I can see the ID.
Does anyone know where I can find it?
Upvotes: 30
Views: 90827
Reputation: 8027
An easy way to get all event IDs for any calendar in any app is to just export your calendar to ICS. in the calendar.ics file, every entry will have a UID. This is your event ID! This even works if someone books a meeting with you using Google Calendar and you're using Outlook or Hotmail or anything else, you still get their event ID, you just need to export to ICS format to see it :)
Upvotes: 0
Reputation: 2436
Go to Calendar and click on event and it shows you popup like below
Now click on the edit icon, it redirects to a page then from the url find eventedit after this parameter you can see event id. URL looks likes below
https://calendar.google.com/calendar/u/0/r/eventedit/OGM1dnRlODY4azBzMWtjdThzMmo3NmM2OWNfMjAyMTEwMjhUMTYwMDAwWiBuNXUzMTk5NTFyYjI18555FsdZwdWE4dWExb0Bn?pli=1
Upvotes: 0
Reputation: 41
You can directly retrieve the id when you create it, you'll need to import 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': '[email protected]'},
{'email': '[email protected]'},
],
'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'])
Upvotes: 0
Reputation: 91911
TL;DR
You should use the advanced API for this.
Calendar.Events.list(calendarId).items[0].id; // returns the id of the first event
If you just want the event ID for a specific event and are fine using a manual approach, then eventdeb=1
is your best bet.
If you want a programmatic solution, note that you cannot use the standard API (CalendarApp
) because the documentation for getId()
on a CalendarEvent
states:
Gets the unique iCalUID of the event. Note that the iCalUID and the event id used by the Calendar v3 API and Calendar advanced service are not identical and cannot be used interchangebly. One difference in their semantics is that in recurring events all occurrences of one event have different ids while they all share the same iCalUIDs.
This means if you want to construct a URL for a recurring event, you'll run into issues because you can't use getId() properly, especially for recurring events. The best fix is to use the Advanced Calendar API. (Also note that if you're trying to construct a link to the calendar event, the advanced API even has an htmlLink
property with the encoded calendarId + realEventId.
Here are some more details as to why getId()
it breaks for recurring events: This is because when you call event.getId()
on an event that is repeating, you get the same id. There is no way to reference a specific instance of the calendar event using the simple Calendar API. The URL is still able to reference a specific instance of the event by appending a format such as _20190626T000000Z
. However, it's not clear what values need to be provided there. There are also cases where _
is replaced with _R
and Z
replaced with @google.com
, further complicating matters.
To prove this is a problem:
CalendarApp.getEventById(parsedId1).getId()
notice the value that is returned.CalendarApp.getEventById(parsedId2).getId()
notice the value that is returned. Although parsedId1
and parsedId2
are different strings (referring to the specific instances), the returned value of getId()
on both of those is the same. The event is actually a reference to the specific instances, but you can't serialize their IDs anymore.If you really want to use the simple calendar API, you'll likely need some kind of synchronization process and to store metadata/tags on each instance of the calendar events during as alluded to in this answer. However, the Advanced API will make your life a lot easier.
Upvotes: 1
Reputation: 303
There is one other quick and easy approach.
Upvotes: 12
Reputation: 1942
There is another way to see that Event Id.
Upvotes: 44
Reputation: 24083
Since he originally asked how to click into the calendar and find the ID of a particular event, and since that's what I needed to know how to do too:
Click the event in your Google Calendar.
It will take you to a page with a URL such as https://calendar.google.com/calendar/render?pli=1#eventpage_6%7Ceid-NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw-1-0-
Look for "eid" in the URL.
Select and copy the string between eid-
and the next -
. (In my example here, it is NGh0Z3BtbTFobWFrNzQ0cjBrYmtkY29kYXIgZXVndTlrYW4xZGRpMXBtaTZzazNpYjWoNmdAZw
.)
Now you need to decode from Base64 format. You could paste that string into a tool such as https://www.base64decode.org/.
The result will be two strings separated by a space. The first string is your Event ID.
Upvotes: 43
Reputation: 141
The simple answer is eventId = event.get('id'). You didn't ask about the event object but as a guide to others this is how I created it for my Google Calendar python script:
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()
then
eventId = event.get('id')
Upvotes: 0
Reputation: 5051
function myFunction() {
var cal = CalendarApp.getCalendarById(id);
var events = cal.getEvents(startTime, endTime);
for ( var i in events ) {
var id = events[i].getId();
}
}
Upvotes: 1