使用 Google 的 Python 客户端库删除日历事件
Deleting a calendar event using Google's Python client library
这似乎是一件很简单的事情,但我似乎无法使用库删除 Google 日历中的事件。
在我的代码中,我注释掉了 "delete event" 代码和 运行,它插入了一个事件,然后列出了该事件。我还检查以确保我可以在 UI 中看到它。然后我从创建的事件中获取 id,然后将其作为 eventId
放入 "delete event" 调用中。然后我取消注释删除代码并注释掉插入代码并再次运行它。
这种方法似乎不起作用:我仍然看到 events().list
输出中列出的事件,我仍然在 UI.
中看到它
# Delete Event
resp = service.events().delete(calendarId='primary', eventId='9c9ppp94isp15103t54mtjss8s')
pprint(vars(resp))
print('Event Deleted')
# Inserts Event
GMT_OFF = '-07:00' # PDT/MST/GMT-7
EVENT = {
'summary': 'Test Event2',
'start': {'dateTime': '2018-09-15T19:00:00%s' % GMT_OFF},
'end': {'dateTime': '2018-09-15T22:00:00%s' % GMT_OFF},
}
e = service.events().insert(calendarId='primary', sendNotifications=True, body=EVENT).execute()
print('''*** %r event added:
Start: %s
End: %s''' % (e['summary'].encode('utf-8'),
e['start']['dateTime'], e['end']['dateTime']))
# Read Events
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
print('Getting the upcoming 10 events')
events_result = service.events().list(calendarId='primary', timeMin=now,
maxResults=10, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
if not events:
print('No upcoming events found.')
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
print(start, event['id'], event['summary'])
当我打印出删除响应 (pprint(vars(resp))
) 时,它看起来像这样:
{'_in_error_state': False,
'_rand': <built-in method random of Random object at 0x7f9ac007e420>,
'_sleep': <built-in function sleep>,
'body': None,
'body_size': 0,
'headers': {'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'user-agent': 'google-api-python-client/1.7.4 (gzip)'},
'http': <httplib2.Http object at 0x1051cd250>,
'method': u'DELETE',
'methodId': u'calendar.events.delete',
'postproc': <bound method RawModel.response of
<googleapiclient.model.RawModel object at 0x1052e9290>>,
'response_callbacks': [],
'resumable': None,
'resumable_progress': 0,
'resumable_uri': None,
'uri': u'https://www.googleapis.com/calendar/v3/calendars/primary/events/9c9ppp94isp15103t54mtjss8s?'}
如果我从上面的删除响应中复制 uri
并使用 Postman,事件将被毫无问题地删除。想法?
根据 Python API 客户端文档,calling an API endpoint does not submit the call, but rather constructs the relevant HttpRequest
object:
Every collection has a list of methods defined by the API. Calling a collection's method returns an HttpRequest
object. If the given API collection has a method named list
that takes an argument called cents
, you create a request object for that method like this:
request = collection.list(cents=5)
Creating a request does not actually call the API. To execute the request and get a response, call the execute()
function:
response = request.execute()
Alternatively, you can combine previous steps on a single line:
response = service.stamps().list(cents=5).execute()
因此,对于您的代码,您需要将 .execute()
添加到删除行。例如:
kwargs = {calendarId: 'primary',
eventId: '9c9ppp94isp15103t54mtjss8s',
sendNotifications: False}
rq = service.events().delete(**kwargs)
resp = rq.execute()
这似乎是一件很简单的事情,但我似乎无法使用库删除 Google 日历中的事件。
在我的代码中,我注释掉了 "delete event" 代码和 运行,它插入了一个事件,然后列出了该事件。我还检查以确保我可以在 UI 中看到它。然后我从创建的事件中获取 id,然后将其作为 eventId
放入 "delete event" 调用中。然后我取消注释删除代码并注释掉插入代码并再次运行它。
这种方法似乎不起作用:我仍然看到 events().list
输出中列出的事件,我仍然在 UI.
# Delete Event
resp = service.events().delete(calendarId='primary', eventId='9c9ppp94isp15103t54mtjss8s')
pprint(vars(resp))
print('Event Deleted')
# Inserts Event
GMT_OFF = '-07:00' # PDT/MST/GMT-7
EVENT = {
'summary': 'Test Event2',
'start': {'dateTime': '2018-09-15T19:00:00%s' % GMT_OFF},
'end': {'dateTime': '2018-09-15T22:00:00%s' % GMT_OFF},
}
e = service.events().insert(calendarId='primary', sendNotifications=True, body=EVENT).execute()
print('''*** %r event added:
Start: %s
End: %s''' % (e['summary'].encode('utf-8'),
e['start']['dateTime'], e['end']['dateTime']))
# Read Events
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
print('Getting the upcoming 10 events')
events_result = service.events().list(calendarId='primary', timeMin=now,
maxResults=10, singleEvents=True,
orderBy='startTime').execute()
events = events_result.get('items', [])
if not events:
print('No upcoming events found.')
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
print(start, event['id'], event['summary'])
当我打印出删除响应 (pprint(vars(resp))
) 时,它看起来像这样:
{'_in_error_state': False,
'_rand': <built-in method random of Random object at 0x7f9ac007e420>,
'_sleep': <built-in function sleep>,
'body': None,
'body_size': 0,
'headers': {'accept': '*/*',
'accept-encoding': 'gzip, deflate',
'user-agent': 'google-api-python-client/1.7.4 (gzip)'},
'http': <httplib2.Http object at 0x1051cd250>,
'method': u'DELETE',
'methodId': u'calendar.events.delete',
'postproc': <bound method RawModel.response of
<googleapiclient.model.RawModel object at 0x1052e9290>>,
'response_callbacks': [],
'resumable': None,
'resumable_progress': 0,
'resumable_uri': None,
'uri': u'https://www.googleapis.com/calendar/v3/calendars/primary/events/9c9ppp94isp15103t54mtjss8s?'}
如果我从上面的删除响应中复制 uri
并使用 Postman,事件将被毫无问题地删除。想法?
根据 Python API 客户端文档,calling an API endpoint does not submit the call, but rather constructs the relevant HttpRequest
object:
Every collection has a list of methods defined by the API. Calling a collection's method returns an
HttpRequest
object. If the given API collection has a method namedlist
that takes an argument calledcents
, you create a request object for that method like this:
request = collection.list(cents=5)
Creating a request does not actually call the API. To execute the request and get a response, call the
execute()
function:
response = request.execute()
Alternatively, you can combine previous steps on a single line:
response = service.stamps().list(cents=5).execute()
因此,对于您的代码,您需要将 .execute()
添加到删除行。例如:
kwargs = {calendarId: 'primary',
eventId: '9c9ppp94isp15103t54mtjss8s',
sendNotifications: False}
rq = service.events().delete(**kwargs)
resp = rq.execute()