6 messages in com.googlegroups.google-calendar-help-dataapiRe: Displaying all events ascending| From | Sent On | Attachments |
|---|---|---|
| CreativeLlama | 24 Mar 2008 09:27 | |
| Austin (Google) | 25 Mar 2008 15:03 | |
| CreativeLlama | 26 Mar 2008 10:37 | |
| Ray Baxter | 26 Mar 2008 11:29 | |
| Austin (Google) | 26 Mar 2008 11:35 | |
| CreativeLlama | 26 Mar 2008 11:57 |
| Subject: | Re: Displaying all events ascending![]() |
|---|---|
| From: | Ray Baxter (ray....@gmail.com) |
| Date: | 03/26/2008 11:29:18 AM |
| List: | com.googlegroups.google-calendar-help-dataapi |
I don't use javascript, but the problems that you are seeing with the order and display of events are because you have 39 events in your calendar, created in order (at least approximately) from earliest event to latest event and only 25 events are being returned in the queries that you are making. When you query, and don't specify maxevents the default number of events returned is 25.
When you execute your original code, you receive the 25 last added, and coincidentally latest in time, events. These events just happen to all occur in this month and the future.
When you add set the sortorder to ascending, you receive the 25 events that are earliest in time, which all coincidentally occur before today.
If you specify a larger value for maxevents, or limit your events to only those events that occur in the currently displayed month if that works for your application, you will have better results.
Ray
CreativeLlama wrote:
var calendarUrl = 'http://www.google.com/calendar/feeds/ 3vm9...@group.calendar.google.com/public/full';
Here is the full code I'm using for getting the Google data. Maybe it'll help. I am so appreciative. Thanks:
<!-- Scripts for Google Calendar --> <script type="text/javascript" src="http://www.google.com/jsapi? key=ABQIAAAAuNSaa1AxpUwLQhcIE9YqgBQgCt9JjK4BaBX97-8b90ftWl1DexQbWCLHzcUjdELlx5VwP6YkS6Uf1w"></ script>
<script type="text/javascript">
<!--/* Loads the Google data JavaScript client library */ google.load("gdata", "1");function init() { // init the Google data JS client library with an error handler google.gdata.client.init(handleGDError); // load the code.google.com developer calendar loadDeveloperCalendar(); } /** * Loads the Google Developers Event Calendar */ function loadDeveloperCalendar() { loadCalendarByAddress('3vm9...@group.calendar.google.com'); } /** * Adds a leading zero to a single-digit number. Used for displaying dates. */ function padNumber(num) { if (num <= 9) { return "0" + num; } return num; } /** * Determines the full calendarUrl based upon the calendarAddress * argument and calls loadCalendar with the calendarUrl value. * * @param {string} calendarAddress is the email-style address for the calendar */ function loadCalendarByAddress(calendarAddress) { var calendarUrl = 'http://www.google.com/calendar/feeds/' + calendarAddress + '/public/full'; loadCalendar(calendarUrl); } /** * Uses Google data JS client library to retrieve a calendar feed from the specified * URL. The feed is controlled by several query parameters and a callback * function is called to process the feed results. * * @param {string} calendarUrl is the URL for a public calendar feed */ function loadCalendar(calendarUrl) { var service = new google.gdata.calendar.CalendarService('gdata-js-client-samples- simple'); var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl); query.setOrderBy('starttime'); query.setSingleEvents(true); service.getEventsFeed(query, listEvents, handleGDError); } /** * Callback function for the Google data JS client library to call when an error * occurs during the retrieval of the feed. Details available depend partly * on the web browser, but this shows a few basic examples. In the case of * a privileged environment using ClientLogin authentication, there may also * be an e.type attribute in some cases. * * @param {Error} e is an instance of an Error */ function handleGDError(e) { document.getElementById('jsSourceFinal').setAttribute('style', 'display:none'); if (e instanceof Error) { /* alert with the error line number, file and message */ alert('Error at line ' + e.lineNumber + ' in ' + e.fileName + '\n' + 'Message: ' + e.message); /* if available, output HTTP error code and status text */ if (e.cause) { var status = e.cause.status; var statusText = e.cause.statusText; alert('Root cause: HTTP error ' + status + ' with status text of: ' + statusText); } } else { alert(e.toString()); } } /** * Callback function for the Google data JS client library to call with a feed * of events retrieved. * * Creates an unordered list of events in a human-readable form. This list of * events is added into a div called 'events'. The title for the calendar is * placed in a div called 'calendarTitle' * * @param {json} feedRoot is the root of the feed, containing all entries */ function listEvents(feedRoot) { var entries = feedRoot.feed.getEntries(); var len = entries.length; //We then determine how many days are in the current month using PHP var limit = 32;
for (var n = 1; n < limit; n++){
var e = String(n); var eventDiv = document.getElementById(e); if (eventDiv.childNodes.length > 0) { eventDiv.removeChild(eventDiv.childNodes[0]); } /* create a new unordered list */ var ul = document.createElement('ul');
/* set the calendarTitle div with the name of the calendar document.getElementById('calendarTitle').innerHTML = "Calendar: " + feedRoot.feed.title.$t; */
/* loop through each event in the feed */ for (var i = 0; i < len; i++) { var entry = entries[i]; var title = entry.getTitle().getText(); //var locations = entry.getLocations()[i].getValueString(); var startDateTime = null; var startJSDate = null; var times = entry.getTimes(); if (times.length > 0) { startDateTime = times[0].getStartTime(); startJSDate = startDateTime.getDate(); } var entryLinkHref = null; if (entry.getHtmlLink() != null) { entryLinkHref = entry.getHtmlLink().getHref(); } var dateString = "";
//Get the month using PHP var f = 3; /* If the month that the user would like to see and the month that the event occurs in are the same, write out content */ if (f == (startJSDate.getMonth() + 1)){
/* If the date that we're on in the loop and the date that the event occurs in are the same, write out content */ if (e == startJSDate.getDate()){ /* Create a list element */ var li = document.createElement('li'); if (!startDateTime.isDateOnly()) { <!-- Format to include AM/PM --> var a_p = ""; var eventStart = startJSDate.getHours(); if(eventStart < 12){ a_p = "AM"; } else{ a_p = "PM"; } if (eventStart == 0){ eventStart = 12; } if (eventStart > 12){ eventStart = eventStart - 12; } dateString += eventStart + ":" + padNumber(startJSDate.getMinutes()) + " " + a_p; }
/* if we have a link to the event, create an 'a' element */ if (entryLinkHref != null) { entryLink = document.createElement('a'); entryLink.setAttribute('href', entryLinkHref); entryLink.setAttribute('target', '_blank'); entryLink.setAttribute('className', 'event'); entryLink.appendChild(document.createTextNode(title)); entryLink.appendChild(document.createElement('br')); /*if (locations != null){ entryLink.appendChild(document.createTextNode(' [ ' + dateString + ' - ' + locations + ' ] ')); }else {*/ entryLink.appendChild(document.createTextNode(' [ ' + dateString + ' ] ')); //} li.appendChild(entryLink); } else { li.appendChild(document.createTextNode(title + ' - ' + dateString)); } /* append the list item onto the unordered list */ ul.appendChild(li); var cid = n + 100; var cellID = String(cid); document.getElementById(cellID).className = "fulleventcell"; document.getElementById(cellID).style.cursor = "pointer"; } }
}//End the for loop for each event
ul.setAttribute('className','events'); eventDiv.appendChild(ul);
}//End the for loop for each day of the month } google.setOnLoadCallback(init); //-->
</script>
<script type="text/javascript"> loadCalendar('http://www.google.com/calendar/feeds/ 3vm9...@group.calendar.google.com/public/full'); </script>
On Mar 25, 6:04 pm, "Austin (Google)" <api....@google.com> wrote:
Hi,
Setting the orderby and singleevents param should retrieve future events as well, hmm, I am not sure why you are not getting future events. what is the calendarUrl you are using?
Thanks, Austin
On Mon, Mar 24, 2008 at 9:27 AM, CreativeLlama <alys...@gmail.com> wrote:
I'm trying to load ALL the Google calendar events into the calendar on my site. The following code only displays events for this month and the future, not all the events:
function loadCalendar(calendarUrl) { var service = new google.gdata.calendar.CalendarService('gdata-js-client-samples- simple'); var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl); query.setOrderBy('starttime'); query.setSingleEvents(true); service.getEventsFeed(query, listEvents, handleGDError); }
Also, I would like to order the events ascending, but if I add in the line "query.setSortOrder('ascending');", then it gives me all the events in the past.
Any suggestions?
Thanks.- Hide quoted text -
- Show quoted text -




