【问题标题】:Google Calendar API stopped returning eventsGoogle Calendar API 停止返回事件
【发布时间】:2018-02-20 03:21:17
【问题描述】:

从今天开始,我对 Google Calendar API v3 的 2 个类似调用之一遇到了问题:

calendar.events.list

两个调用都请求分配列表并使用 privateExtendedProperty 过滤它们,但 key=Value 对不同。

当我将 privateExtendedProperty 设置为 myStatus=READY 时,它会返回我需要的事件, 但是当我将 privateExtendedProperty 设置为 myId=agxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVVkaWEuY29tDAsSBENhc2UYkcHA3wgM 它不返回任何事件,但我确信这个 myId 有几个事件......

当使用 90 个字符长的 privateExtendedProperty 查询时,日历 API 列表似乎返回一个空列表。

多年来一切正常,但今天早上我的一些用户突然崩溃了......

这是我的要求:

GET googleapis.com/calendar/v3/calendars/****/events?privateExtendedProperty=myId%3Dagxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYwauk6QgM&key={YOUR_API_KEY} 

这是我在 API Explorer 中看到的结果:

{
 "kind": "calendar#events",
 "etag": "\"*****\"",
 "summary": "*****",
 "description": "*****",
 "updated": "2018-02-20T03:18:35.098Z",
 "timeZone": "Asia/Tokyo",
 "accessRole": "owner",
 "defaultReminders": [
 ],
 "nextSyncToken": "CJDv1KDEs9kCEJDv1KDEs9kCGAU=",
 "items": [
 ]
}

更新 1: 我的 privateExtendedProperty 看起来像这样:

{
  "myStatus": "READY",
  "myId": "agxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYkcHA3wgM",
  "another": "Another value",
  "another2": "Another value2"
}

当我使用“myStatus=READY”查询事件时 - 返回事件,但当我对“myId=agxzfm1...”执行相同操作时 - 它返回 emtpy 列表。

更新 2: 对于那些有同样问题的人。根据建议,我创建了一个新日历,然后复制了一些测试数据并在 privateExtendedProperty 查询中尝试了 long 值,它按预期返回了事件。这意味着,如果这是一个错误 - 并非所有日历都会受到影响,将事情转移到新日历可能是一种方法。

【问题讨论】:

    标签: google-api google-calendar-api google-api-explorer


    【解决方案1】:

    The document for Extended Properties 表示限制如下。

    1. 属性键的最大长度为 44 个字符,具有较长键的属性将被静默删除。
    2. 属性值的最大大小为 1024 个字符,值较长的属性将被静默截断。
    3. 一个事件最多可以有 300 个共享属性,总大小高达 32kB(键大小 + 值大小)。
    4. 一个事件最多可以有 300 个私有属性,总大小为 32kB(键大小 + 值大小),跨越事件的所有“副本”。

    由此看来,您的情况似乎超出了上述限制。在我的环境中,我也试过你的情况。结果发现myId=agxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYkcHA3wgM可以使用。

    那么你能再次确认以下几点吗?

    1. 您的 API 资源管理器检索到的结果似乎未将 extendedProperties 包含在 items 的属性中。设置extendedProperties,就可以看到了。如果你使用fields,它可能无法被看到。
    2. 你能再把extendedPropertiesmyId=agxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYkcHA3wgM 一起设置吗?
      • 您可以使用calendar.events.patch 进行设置。
    3. 当您使用calendar.events.list检索带有myId=agxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYkcHA3wgM的事件时,如果您使用myId%3dagxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYkcHA3wgM的URL编码值,请尝试使用没有URL编码的值。

    如果这对您没有用并且我误解了您的问题,我很抱歉。

    编辑:

    • 如果使用calendar.events.get检索事件,是否可以看到您设置的extendedProperties?如果看不到,请重新插入extendedProperties。
      • 端点是GET https://www.googleapis.com/calendar/v3/calendars/### calendar Id ###/events/### event Id ###?fields=extendedProperties%2Fprivate
    • 在我的环境中,您的同一个端点可以正常工作。因此,作为测试,您可以尝试创建新日历并运行该查询吗?因为我担心最近更新日历会不会影响到这种情况。

    【讨论】:

    • 谢谢,我想我已经找到了问题,有人已经将其报告为错误:issuetracker.google.com/issues/73128573 Google API 返回项目:[ ] 对于超过 69 个字符的值...
    • myId 为 4 个字符 --> 44 个字符以下。我的值是 92 个字符 --> 1024 个字符以下。这是我的请求:GET googleapis.com/calendar/v3/calendars****/events?privateExtendedProperty=myId%3Dagxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYwauk6QgM&key={YOUR_API_KEY}
    • @Evgeny Vostok 感谢您提供更多信息。我更新了我的答案。请证实。我希望这个问题不取决于每个用户帐户。
    • 我尝试了您的请求,它返回了扩展属性/私有罚款。如果 privateExtendedPropery 值小于 70 个字符,它还会返回所有扩展属性的项目列表...
    • @Evgeny Vostok 感谢您的尝试。在您的情况下,可以使用 calendar.events.get 确认 privateExtendedProperty。但是calendar.events.list 找不到privateExtendedProperty 的key 和value。比如当myStatus=READYmyId=agxzfm1haWxmb29nYWVyNQsSDE9yZ2FuaXphdGlvbiIVYWN0aXZlZ2FtaW5nbWVkaWEuY29tDAsSBENhc2UYkcHA3wgM for privateExtendedProperty都安装了,myStatus=READY检索到的事件还有另一个privateExtendedProperty?很抱歉耽误您的时间。
    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 2022-08-03
    • 2014-06-18
    • 2016-07-18
    • 2020-08-07
    • 1970-01-01
    • 2023-04-01
    • 2018-11-18
    相关资源
    最近更新 更多