【问题标题】:Google calendar API do not return events list谷歌日历 API 不返回事件列表
【发布时间】:2014-09-19 21:27:47
【问题描述】:

最近在 Google 日历中添加新事件并尝试从 Google 日历 API 中获取它后,我从未获得我帐户的主 calendarId 的新事件列表。

我还尝试从开发者控制台获取: https://developers.google.com/google-apps/calendar/v3/reference/events/list#try-it 即使未来事件存在,它也会给出与响应相同的空项目列表。

但我可以获取其他日历列表的事件列表。例如。假期、朋友分享的日历等。

【问题讨论】:

  • 您通过了身份验证吗?你有什么错误吗?您能否尝试通过#try-it 在您的主日历上执行插入事件操作并查看该事件是否被列出?
  • 是的,从我的主 calendarId 的 API 创建事件不是问题。我看到在日历中创建了事件。但是当我尝试从 API 中获取这些事件时,我在响应中什么也得不到。
  • 更多问题:您能否对刚刚插入的事件执行 get 并查看它是否存在?你能在 Web UI 中看到这些事件吗?
  • @SuhasGiriraj 这个问题解决了吗?
  • 这里有同样的问题。具有大量重复事件(在 Web GUI 中可见)但使用 python API 的辅助日历, events().list() 不返回任何事件。设置 singleEvents=True 返回实例,但该列表太大,因此不是正确的解决方案。谷歌日历 API 中的错误?

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


【解决方案1】:

我还有events().list(calendarId=<calendar_id>, singleEvents=False) 不返回任何事件的问题(使用python API)。我使用带有一个重复事件的辅助日历进行了测试。通过添加参数maxResults=9999 解决。事实证明,返回事件需要 maxResults 值 1413 或更高。奇怪,好像是个bug。

【讨论】:

  • 有问题,singleEvents=True 缺少一次性事件,用 maxResults=9999 修复它。
  • 另外,使用 .NET API 和官方 google NuGet 包也有这个问题。一切都很好,但在一瞬间,事件消失了。当我添加 'maxResults = 2500' 因为这是最大值时,会出现事件。谢谢!
  • 只添加 singleEvents=true 为我解决了。如果我使用 maxResults 不起作用
【解决方案2】:

尝试将singleEvents:true 添加到您的请求中。

我遇到了同样的问题。在我的情况下,使用 Javascript,这是有效的(返回几个单一的、非重复的事件):

  var calendar = googleapis.calendar('v3');
  calendar.events.list({
    auth: auth,
    calendarId: 'primary',
    timeMin: (new Date()).toISOString(),
    maxResults: 10,
    singleEvents: true,
    orderBy: 'startTime'
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return callback(err);
    }
    console.log(response); 
    var events = response.items;
    if (events.length == 0) {
      console.log('No upcoming events found.');
    } else {
      console.log('Upcoming 10 events:');
      for (var i = 0; i < events.length; i++) {
        var event = events[i];
        var start = event.start.dateTime || event.start.date;
        console.log('%s - %s', start, event.summary);
      }
      return callback(null, events); 
    }
  });

但这不会(不返回任何事件,包括那些在“主要”日历上并且是单一的、非重复事件的事件)。与上面代码的唯一区别是singleEvents 参数被注释掉了,所以它的值将默认为false

  var calendar = googleapis.calendar('v3');
  calendar.events.list({
    auth: auth,
    calendarId: 'primary',
    timeMin: (new Date()).toISOString(),
    maxResults: 10,
    //singleEvents: true,
    orderBy: 'startTime'
  }, function(err, response) {
    if (err) {
      console.log('The API returned an error: ' + err);
      return callback(err);
    }
    console.log(response); 
    var events = response.items;
    if (events.length == 0) {
      console.log('No upcoming events found.');
    } else {
      console.log('Upcoming 10 events:');
      for (var i = 0; i < events.length; i++) {
        var event = events[i];
        var start = event.start.dateTime || event.start.date;
        console.log('%s - %s', start, event.summary);
      }
      return callback(null, events); 
    }
  });

【讨论】:

  • singleEvents 设置为true 不会改变我的输出。它仍然没有列出任何事件。
  • 我希望有人能说明原因。它们是我解释 singleEvents 的方式:(“是否将重复事件扩展为实例并仅返回单个一次性事件和重复事件的实例,而不返回底层重复事件本身。可选。默认值为 False。”)不管无论是真还是假,都会返回单个(非重复)事件,但似乎并非如此。如果仅查询私有扩展属性(无 timeMin,timeMax),它会在相同情况下返回单个事件 w/singleEvents=false。
  • 将 singleEvents 设置为 True 不是解决方案,因为它会分别返回所有实例。 singleEvents = False 也应该有效。这是谷歌日历 API 中的错误吗?
  • @Micrified 你能解决这个问题吗?
  • 它确实对我有用,我从特定日历中获取事件列表,它只给了我几个事件的列表,而不是所有事件。在查询参数中添加了singleEvents:true,它给了我所有的事件
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 2012-10-10
  • 1970-01-01
  • 2021-12-22
  • 2012-01-22
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多