Google api Google Calendar v3 API[事件:列表]请求返回空列表

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"

我正在使用python urllib在Google日历(API V3)上发出请求

现在的问题是,当我请求“”时,虽然日历中有事件,但响应中没有任何项目

示例

   {  "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个约会的巨大日历的用户来说,在一个请求中返回所有内容是低效的

下面是我在VB.Net中使用的GoogleCalendarAPIv3删除所有事件的示例。(服务是一个Google.api.Calendar.v3.CalendarService)


将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);
 }