使用javascript google calendar api v3从某一天获取活动

时间:2013-04-09 23:50:50

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

您好我的主要目标是从谷歌日历中获取所有活动,并在下方显示其日期(如果可用的话)的名称。我正在使用javascript google calendar api v3并且遇到了抓住每个事件的日期的麻烦。在我进一步解释我的问题之前,这里是当前的代码:

var clientId = '200816328603.apps.googleusercontent.com';
var apiKey = 'AIzaSyD3rbV__d8u6r9u5GioBU0oVwa-53YXRqM';
var scopes = 'https://www.googleapis.com/auth/calendar';

function handleClientLoad() {
  gapi.client.setApiKey(apiKey);
  window.setTimeout(checkAuth,1);
  checkAuth();
}

function checkAuth() {
  gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true},
      handleAuthResult);
}

function handleAuthResult(authResult) {
  var authorizeButton = document.getElementById('authorize-button');
  if (authResult) {
    authorizeButton.style.visibility = 'hidden';
    makeApiCall();
  } else {
    authorizeButton.style.visibility = '';
    authorizeButton.onclick = handleAuthClick;
   }
}

function handleAuthClick(event) {
  gapi.auth.authorize(
      {client_id: clientId, scope: scopes, immediate: false},
      handleAuthResult);
  return false;
}

//document.createTextNode(resp.items[i].summary)

function makeApiCall() {

  gapi.client.load('calendar', 'v3', function() {
    var request = gapi.client.calendar.events.list({
      'calendarId': 'pvhs.k12.nj.us_r6jaor04o80hpsaldf17civeio@group.calendar.google.com'
    });

    request.execute(function(resp) {
      for (var i = 0; i < resp.items.length; i++) {

        //---------nodes for html elements
        var title = document.createTextNode(resp.items[i].summary); //titles are undefined so I'm using the summary as title instead
        //var description = document.createTextNode(resp.items[i].description); //there are no descriptions apparently
        var date = document.createTextNode('Start: ' + resp.items[i].start.date + ' End: ' + resp.items[i].end.date); //resp.items[i].date returns undefined

        //---------html elements
        var div = document.createElement('div');
        div.className = resp.items[i].summary;

        var h1 = document.createElement('h1');
        h1.appendChild(title);
        div.appendChild(h1);

        //loop is to filter out all the undefined
        if (date.textContent != 'Start: undefined End: undefined') {
          var p = document.createElement('p');
          p.appendChild(date);
          div.appendChild(p);
        }

        document.body.appendChild(div);
      }
    });
  });
}

var clientId = '200816328603.apps.googleusercontent.com'; var apiKey = 'AIzaSyD3rbV__d8u6r9u5GioBU0oVwa-53YXRqM'; var scopes = 'https://www.googleapis.com/auth/calendar'; function handleClientLoad() { gapi.client.setApiKey(apiKey); window.setTimeout(checkAuth,1); checkAuth(); } function checkAuth() { gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult); } function handleAuthResult(authResult) { var authorizeButton = document.getElementById('authorize-button'); if (authResult) { authorizeButton.style.visibility = 'hidden'; makeApiCall(); } else { authorizeButton.style.visibility = ''; authorizeButton.onclick = handleAuthClick; } } function handleAuthClick(event) { gapi.auth.authorize( {client_id: clientId, scope: scopes, immediate: false}, handleAuthResult); return false; } //document.createTextNode(resp.items[i].summary) function makeApiCall() { gapi.client.load('calendar', 'v3', function() { var request = gapi.client.calendar.events.list({ 'calendarId': 'pvhs.k12.nj.us_r6jaor04o80hpsaldf17civeio@group.calendar.google.com' }); request.execute(function(resp) { for (var i = 0; i < resp.items.length; i++) { //---------nodes for html elements var title = document.createTextNode(resp.items[i].summary); //titles are undefined so I'm using the summary as title instead //var description = document.createTextNode(resp.items[i].description); //there are no descriptions apparently var date = document.createTextNode('Start: ' + resp.items[i].start.date + ' End: ' + resp.items[i].end.date); //resp.items[i].date returns undefined //---------html elements var div = document.createElement('div'); div.className = resp.items[i].summary; var h1 = document.createElement('h1'); h1.appendChild(title); div.appendChild(h1); //loop is to filter out all the undefined if (date.textContent != 'Start: undefined End: undefined') { var p = document.createElement('p'); p.appendChild(date); div.appendChild(p); } document.body.appendChild(div); } }); }); }

现在resp.items [i] .start.date和resp.items [i] .end.date会偶尔返回日期,但有时只返回undefined。我怎么能抓住事件的日期呢?

我想解决这个问题的方法是在每个月的每一天进行循环,并抓住当天的所有活动。但是,当我尝试使用RFC3339时间戳添加timeMax和timeMin参数时,它没有返回任何内容。有人能为我提供一个完成此事的例子吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

为了使用timeMin或timeMax,你需要将'singleEvents'设置为true,我相信它会返回重复事件的个别实例而不是事件组。

var request = gapi.client.calendar.events.list({
        'calendarId': 'pvhs.k12.nj.us_r6jaor04o80hpsaldf17civeio@group.calendar.google.com',
        'singleEvents': true, /* required to use timeMin */ 
        'timeMin': '2013-02-01T11:43:22.000Z'
    });
希望有所帮助。