Google Calendar API V3批量列表事件

时间:2014-04-09 18:50:30

标签: java api calendar google-calendar-api

我已成功实现(使用java客户端库)身份验证和日历检索。我的问题是,我想从多个日历中检索事件列表,但是为每个日历发送单独的API请求所花费的时间开始累加,如果我启用了大量日历,则会导致20秒的页面加载时间。我知道API没有提供从多个日历请求事件的方法,但是我可以使用BatchRequest类来分组我的请求吗?

我已经能够通过这个例子来批量插入多个日历。

https://code.google.com/p/google-api-java-client/source/browse/calendar-cmdline-sample/src/main/java/com/google/api/services/samples/calendar/cmdline/CalendarSample.java?repo=samples

但我无法将此扩展到列出事件。基本上,我想这样做:

for (int i=0; i < calendarIDs.length; i++) {
    client.events().list(calendarIDs[i]).queue(batch, callback);
}
batch.execute();

2 个答案:

答案 0 :(得分:1)

我终于用一种稍微不同的方法弄明白了。而不是使用队列函数为列表对象,使用客户端的batch.queue函数:

BatchRequest batch = client.batch();            
for (int i=0; i< calendarIDs.length; i++) {    
    List req = client.events().list( calendarIDs[i]);        
    batch.queue(req.buildHttpRequest(), Calendar.class, GoogleJsonErrorContainer.class, mycallback);
}           
batch.execute();

这似乎改善了很多性能。

答案 1 :(得分:0)

我做的事情看起来像你想要的,但我没有使用批处理,这里是我的代码示例:

CalendarEventFeed resultFeed = service.getFeed(calendarUrl, CalendarEventFeed.class); 

for (int i = 0; i < resultFeed.getEntries().size(); i++) { 
     CalendarEventEntry entry = resultFeed.getEntries().get(i); 
} 

因此,您需要更改以从不同日历获取活动的唯一事项是&#34; calendarUrl&#34;,这是您如何获取日历网址

calendarUrl = new URL(calendar.getLink(Link.Rel.ALTERNATE, Link.Type.ATOM).getHref()); 

其中&#34;日历&#34;是google lib的CalendarEntry。