Reputation: 2850
I need to find attendee list for a meeting using Google Calendar API. To extract attendee email, I have below code:
eventsResult = service.events().list(calendarId='primary',timeMin=tmin,timeMax=tmax,singleEvents=True,orderBy='startTime').execute()
events = eventsResult.get('items', [])
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
end = event['end'].get('dateTime', event['end'].get('date'))
attendees = event['attendees'].get('email', event['attendees'].get('email'))
print(attendees)
But getting error
attendees = event['attendees'].get('email', event['attendees'].get('email'))
AttributeError: 'list' object has no attribute 'get'
What am I missing? Any suggestion on how to do it?
Upvotes: 1
Views: 2747
Reputation: 182
I hope this i solution, this function to get attendee by email or calendar ID of attendee, result list event of attendees email
def get_events_by_attendee(service, calendarId, attendee_email):
now = datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
timeMin = datetime.utcnow() - timedelta(days=3) #you can change
timeMax = datetime.utcnow()+ timedelta(days=3)#you can change
print(timeMin, now)
timeMin = timeMin.isoformat() + 'Z'
timeMax = timeMax.isoformat() + 'Z'
print(timeMin)
events_result = service.events().list(calendarId=calendarId,
timeMin=timeMin,
timeMax = timeMax,
singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
if not events:
print('No upcoming events found.')
list_events = []
for event1 in events:
element_list = []
eventId = event1['id']
event = service.events().get(calendarId=calendarId, eventId=eventId).execute() #check this event have attendee or not
try:
if event['attendees']:
for attendee in event['attendees']:
if (attendee['email']==attendee_email)and(attendee['responseStatus']=='accepted'): #responseStatus 'accept' mean attendee accept your invitation
print(event['attendees'])
element_list.append(eventId)
htmlLink = event['htmlLink']
element_list.append(htmlLink)
summary = event['summary']
element_list.append(summary)
try: #this code belong to my sytems, you can pass it
description = event['description']
description = description.replace('\n', '<br>')
description = description.split('####', 1)
if description == []:
description = event['description']
except Exception as e:
description = 'Không có mô tả####'
description = description.split('####', 1)
element_list.append(description)
created = event['created']
created = dateutil.parser.parse(created) + timedelta(hours=7) #change the timezone
created = datetime(created.year, created.month, created.day, created.hour, created.minute)
element_list.append(created)
updated = event['updated']
updated = dateutil.parser.parse(updated) + timedelta(hours=7)#change the timezone
updated = datetime(updated.year, updated.month, updated.day, updated.hour, updated.minute)
element_list.append(updated)
start = event['start'].get('dateTime', event['start'].get('date'))
start = dateutil.parser.parse(start) + timedelta(hours=7)#change the timezone
start = datetime(start.year, start.month, start.day, start.hour, start.minute)
element_list.append(start)
end = event['end'].get('dateTime', event['end'].get('date'))
end = dateutil.parser.parse(end) + timedelta(hours=7)
end = datetime(end.year, end.month, end.day, end.hour, end.minute)
element_list.append(end)
status = event['status']
element_list.append(status)
attendees = event['attendees']
element_list.append(attendees)
list_events.append(element_list)
else:
pass
except Exception as e:
pass
return list_events
Upvotes: 0
Reputation: 201338
If you are looking for the solution yet, how about this? The structure of attendees
is as follows.
{
"items": [
{
"attendees": [
{
"email": "### email ###",
"displayName": "### name ###",
"responseStatus": "#####"
}
]
}
]
}
So how about this modification?
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
end = event['end'].get('dateTime', event['end'].get('date'))
attendees = event['attendees'].get('email', event['attendees'].get('email'))
print(attendees)
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
end = event['end'].get('dateTime', event['end'].get('date'))
print("{0}, {1}".format(start, end))
for attendee in event['attendees']:
attendees = attendee.get('email', attendee.get('email'))
print(attendees)
If I misunderstand your question and you already have the solution, I'm sorry.
Upvotes: 2