2013-04-09 1 views
2

안녕하세요. 내 주요 목표는 Google 캘린더의 모든 일정을 잡아서 날짜와 시간 (사용 가능한 경우 시간)과 함께 표시하는 것입니다. 자바 스크립트 구글 캘린더 api v3을 사용하고 있으며 각 이벤트의 날짜를 잡는 데 어려움을 겪고 있습니다. 내가 더 여기 내 문제를 설명하기 전에 현재의 코드입니다 :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': '[email protected]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 가끔하지만 때로는 날짜를 반환합니다 그냥 정의되지 않은 값을 반환합니다. 그러면 그 사건의 날짜를 어떻게 알 수 있습니까?

이 문제를 해결하기위한 아이디어는 매월 매일 반복하고 그날 모든 이벤트를 가져 오는 것입니다. 그러나 원하는 시간에 대한 RFC3339 타임 스탬프가있는 timeMax 및 timeMin 매개 변수를 추가하려고 시도했지만 아무 것도 반환하지 않았습니다. 누군가가 이것을 달성하기위한 모범을 보여줄 수 있습니까?

도움을 주시면 대단히 감사하겠습니다.

답변

4

timeMin 또는 timeMax를 사용하려면 'singleEvents'를 true로 설정하여 이벤트 그룹 대신 개별 이벤트 인스턴스를 반환해야합니다.

var request = gapi.client.calendar.events.list({ 
     'calendarId': '[email protected]com', 
     'singleEvents': true, /* required to use timeMin */ 
     'timeMin': '2013-02-01T11:43:22.000Z' 
    }); 

희망이 있습니다.