google-api - Google 日历 v3 API [事件 : list] request return Empty List

标签 google-api google-calendar-api

我正在使用 python urllib 在 Google 日历(API V3)上提出请求。
现在,问题是当我请求' Events: list 时',然后我得到了零个项目作为响应,尽管该日历中有事件。
示例

   {  "kind": "calendar#events",
   "nextPageToken": "CigKGm83a292ZzZ2YXBsNXRsMHJhZnV2cGprdHVvGAEggIDA97TfuYYUGg0IABIAGOjEqd_6q7kC",
   "items": [  ] 
   }
如果我使用' nextPageToken ' 在下一个请求中它 工作正常 .(但我不想提出任何额外的要求。)
不是每次都会出现这个问题。如果我创建新的 email_id 这工作正常。但一两个月后,这个问题又开始了。

Is this a bug in Google Calendar API ?

or

Is there any solution to get event list of any calendar in just One Request ?


提前致谢。

最佳答案

我一直在试图找出同样的问题,我相信我有答案。

这里的问题是,当 Google 计算要返回的“页面”事件时,它会在该计算中包含已删除的事件,并且您的第一页充满了您看不到的已删除事件,除非您的请求具有“showDeleted = True” .

我为用户提供了一种方法来“清除”他们的日历并重新填充它并遇到了这个问题。考虑这个场景:

  • 用户在他们的日历中有 250 个事件,为了争论,假设 Google 的“页面”大小相同。
  • 当用户运行重新填充的过程时,这 250 个事件将被删除并创建 250 个"new"事件。
  • 当我们接下来在重新填充过程之前删除事件时,第一页返回时没有事件 - 这是因为列表中的前 250 个是最初删除的那些。 (我已经使用 API Explorer 验证了这一点)
  • 使用 nextPageToken 获取下一页结果有效 - 正如您所指出的。
  • 这就是为什么创建新日历会在一段时间内起作用 - 即直到您超过“页面”限制并开始返回 0 个事件,这就是我们遇到问题的地方。
  • 随着时间的推移,如果用户经常使用这个重新填充功能,他们的
    已删除事件的列表可能会变得很大,这将需要很多
    请求返回所有事件。 (我知道没有办法清除所有已删除的
    事件完全来自 Google Cal - 它们似乎永远存在)
  • 我不知道在一次调用中返回所有事件。您需要遍历一次获取页面的过程,直到不再返回“NextPageToken”。这是有道理的,因为对于拥有包含 1000 个约会的巨大日历的用户来说,在一个请求中返回所有内容是低效的。

  • 此处使用 Google Calendar API V3 是我在 VB.Net 中用于删除所有事件的示例。 (服务是 Google.Apis.Calendar.v3.CalendarService)
        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
    

    关于google-api - Google 日历 v3 API [事件 : list] request return Empty List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18566386/

    相关文章:

    .net - 如何通过 Google AdWords API v201309 检索每日费用?

    java - Google Drive API Java,身份验证仅在第一次时有效

    javascript - 使用网络机器人登录谷歌日历

    c# - Google API V 3.0 .Net 库和 Google OAuth2 如何处理刷新 token

    java - Android 转弯方向(不是导航)

    java - 谷歌网站和谷歌API之间的不同答案

    php - 使用 coreylib 显示 Google Calendar Feed 事件

    javascript - 在 Javascript 中使用 Google Calendar API 插入方法创建新日历返回错误 400 "Missing title"

    python - 使用适用于 Python 的 Google API - 我从哪里获取 client_secrets.json 文件?

    google-calendar-api - 如何将日历事件发布到参与者的特定日历