从Google Apps脚本重复调用Calendar.Events.list会产生不同的结果

时间:2019-02-25 09:57:21

标签: google-apps-script google-calendar-api

每次我从附加到Google表单的Google App脚本运行以下代码时,我都会不断得到不同的结果:

library(dplyr)
# add a column with the name of the taxonomy
taxo.spA$tax <- "taxo.spA"
taxo.spB$tax <- "taxo.spB"

# bind the rows together (an alternative to do.call(rbind, .) would be data.table::rbindlist())
# this would also work if you have more than two taxonomies 
result <- list(taxo.spA, taxo.spB) %>% 
  do.call(rbind, .) %>% 
  reshape2::dcast(tax ~ rank, value.var = "name") 

# choose the columns and the order you want
orderd_classes <- c("Kingdom", "Phylum", "Subphylum", "Superclass", "Class", "Subclass", "Order")
result[orderd_classes]

在每次运行脚本时,返回的日历事件是在上一次运行脚本时返回的事件之后的下一个日历事件!有什么方法可以重置会话,以便# Kingdom Phylum Subphylum Superclass Class Subclass Order # Animalia Arthropoda Chelicerata <NA> Arachnida Acari <NA> # Animalia Chordata Vertebrata Gnathostomata Actinopterygii <NA> Perciformes 总是引用 var calendarId = 'a_valid_calendar_ID'; var eventTime = '2019-03-05T07:00:00.000Z'; var results = Calendar.Events.list(calendarId, {'singleEvents': true, 'timeMin': eventTime, 'maxResults': 1}); Logger.log(JSON.stringify(results, null, 4)) 或之后的第一个日历事件?

1 个答案:

答案 0 :(得分:0)

您必须添加orderBy选项,否则返回的事件是在timeMin或之后具有开始时间的事件,但该事件是最早的进行修改。因此,代码应为:

  var calendarId = 'a_valid_calendar_ID';
  var eventTime = '2019-03-05T07:00:00.000Z';
  var optionalArgs = {'singleEvents': true, 'timeMin': eventTime, 'maxResults': 1, 'orderBy': 'startTime'};
  var results = Calendar.Events.list(calendarId, optionalArgs);
  Logger.log(JSON.stringify(results, null, 4))

当我发现返回的JSON具有一个nextPageToken字段(尽管我只想要一个结果-'maxResults': 1

)时,我发现了这一点

每次运行自己的代码都会得到不同的结果的原因是,我将使用事件的id来修改该事件。如果然后我使用完全相同的参数运行相同的代码,则已编辑事件不再是最早的timeMin之后使用startTime进行编辑的事件,因此,在该事件之后我将得到下一个事件!

此API的行为有点违反直觉,可以通过以下方法进行改进:

  1. 将默认行为设为使用可选参数{'singleEvents': true, 'orderBy': 'startTime'}
  2. maxResults选项的名称更改为maxResultsPerPage,以明确显示max所指的内容

同时,应该对文档进行编辑以引起人们对这种无法预测的行为的注意。