Google api Google Calendar v3 API[事件:列表]请求返回空列表
我正在使用python urllib在Google日历(API V3)上发出请求 现在的问题是,当我请求“”时,虽然日历中有事件,但响应中没有任何项目 示例Google api Google Calendar v3 API[事件:列表]请求返回空列表,google-api,google-calendar-api,Google Api,Google Calendar Api,我正在使用python urllib在Google日历(API V3)上发出请求 现在的问题是,当我请求“”时,虽然日历中有事件,但响应中没有任何项目 示例 { "kind": "calendar#events", "nextPageToken": "CigKGm83a292ZzZ2YXBsNXRsMHJhZnV2cGprdHVvGAEggIDA97TfuYYUGg0IABIAGOjEqd_6q7kC"
{ "kind": "calendar#events",
"nextPageToken": "CigKGm83a292ZzZ2YXBsNXRsMHJhZnV2cGprdHVvGAEggIDA97TfuYYUGg0IABIAGOjEqd_6q7kC",
"items": [ ]
}
如果我在下一个请求中使用“nextpGetOken”,则工作正常(但我不想提出任何额外请求)
这个问题并非每次都会发生。如果我创建了一个新的email\u id,这就可以了。但一两个月后,这个问题又开始了
这是谷歌日历API中的一个bug吗
或
是否有任何解决方案可以在一个请求中获取任何日历的事件列表
提前谢谢。我一直在努力解决同样的问题,我相信我已经找到了答案 这里的问题是,当Google计算要返回的事件“页面”时,它会在该计算中包含已删除的事件,并且您的第一个页面中充满了已删除的事件,除非您的请求为“showDeleted=True”,否则您将看不到这些事件 我为用户提供了一种“清除”他们的日历并重新填充的方法,并且遇到了这个问题。考虑这种情况:
- 用户的日历中有250个事件,为了便于讨论,让我们假设谷歌的“页面”大小相同
- 当用户运行流程重新填充时,将删除这250个事件并创建250个“新”事件
- 当我们下一步在重新填充进程之前删除事件时,第一页返回时没有任何事件-这是因为列表中的前250个是最初删除的事件。(我已通过使用验证)
- 使用nextPageToken获得下一页的结果是有效的——正如您所注意到的
- 这就是为什么创建一个新的日历会在一段时间内起作用,即直到您超过“页面”限制并开始返回0个事件,这就是我们遇到问题的原因
- 随着时间的推移,如果用户经常使用此重新填充功能,他们的 删除事件的列表可能会变得庞大,并且需要许多 请求返回所有事件。(我知道没有办法清除所有已删除的 事件完全来自Google Cal-它们似乎永远不会消失)
- 据我所知,无法在一次调用中返回所有事件。您需要在每次获取页面的过程中循环,直到不再返回“NextPageToken”。这是有道理的,因为对于拥有1000个约会的巨大日历的用户来说,在一个请求中返回所有内容是低效的
将showDeleted=false和pageToken=next_page_token添加到url并再次调用api。这是C版本
我有一个类似的问题(在格伦的回答中有完整的描述)。我找到的唯一解决方案现在仍在使用:只需在请求中添加一个参数(
singleEvents=true
)。这将从日历API中删除空响应。祝你好运。事实上我也做了同样的事情:p那么“showDeleted=False”和“maxResults”代表什么,如果它将返回空的“items”:[]”并且浪费了一个请求。顺便说一句,谢谢你的回复:)我完全同意-如果“showDeleted=False”“然后,我希望第一个请求包含‘已确认’事件。我绝对没想到它会一无所获!
Private Sub ClearAllEvents()
Dim pageToken As String = Nothing
Dim events As Events
Dim qry As New ListRequest(Service, GCalId)
Do
qry.PageToken = pageToken
events = qry.Execute()
For Each ev As [Event] In events.Items
Dim dr As New DeleteRequest(Service, GCalId, ev.Id)
dr.Execute()
Next
pageToken = events.NextPageToken
Loop While Not IsNothing(pageToken)
End Sub
private void ClearAllEvents()
{
string pageToken = null;
Events events;
EventsResource.ListRequest qry = service.Events.List(CALENDAR_ID);
do
{
qry.PageToken = pageToken;
events = qry.Execute();
foreach(Event ev in events.Items)
{
service.Events.Delete(CALENDAR_ID, ev.Id).Execute();
}
pageToken = events.NextPageToken;
} while (pageToken != null);
}