Hi Paul, Thanks for posting your solution! This looks like a good candidate for the Tips and Tricks page http://groups.google.com/group/google-calendar-help-dataapi/web/tips-and-tricks. Then people may post how this can be done using the other client libraries.
Cheers, Lane On May 7, 10:25 am, Andrew <[EMAIL PROTECTED]> wrote: > I had problems with this for a long time and was finally able to > figure it out by skimming a lot of other posts...maybe having this > code all in one place will help others too! > > The basic method is this: > - Authenticate and get a valid Zend_Http_Client object > - Use the client object to get a Zend_Gdata_Calendar object > - Call getCalendarListFeed to get a list of calendars > - Retrieve the user id of the calendar you wish to query (The user id > is a part of the calendar's "id" field in the list feed...it's the > part at the end, after "http://www.google.com/calendar/feeds/ > default/". For your default calendar, it is your email address. Other > calendars have randomly generated user id's) > - Use the functions setUser (with the user id of the desired > calendar), setVisibility, setProjection, setOrderBy, and possibly > setStartMin and setStartMax, to prepare the calendar object > - Call getCalendarFeed() to get a feed from the calendar you > specified! > > <code> > /** > * Get a list of user's calendars > * > * @author Andrew Richardson (http://pc.byethost10.com) > * @param Zend_Http_Client $client > * @return array associative array of calendars (title => user_id) > */ > function gcal_EnumCalendars($client) { > $cal = new Zend_Gdata_Calendar($client); > $calFeed = $cal->getCalendarListFeed(); > > $calendars = array(); > foreach ($calFeed as $calendar) { > # Get the calendar's actual name > $title = $calendar->title(); > > # Look for an override name (if user has renamed a > calendar that > was shared with them) > $override = > $calendar->getDOM()->getElementsByTagName('overridename'); > > foreach($override as $o) { > $title = $o->getAttribute('value'); > } > > # Add this calendar to the array > $feed = explode('/', $calendar->id()); > $calendars[$title] = urldecode($feed[6]); > } > return $calendars; > } > > /** > * Get events from a calendar > * > * @author Andrew Richardson (http://pc.byethost10.com) > * @param Zend_Http_Client $client > * @param string $id user_id of calendar to use (defaults to > 'default') > * @param integer $first in epoch seconds, the minimum date to list > (defaults to today) > * @param integer $last in epoch seconds, the maximum date to list > (defaults to infinity) > * @return array associative array of events (title => ('start' => > start, 'end' => end)) > */ > function gcal_GetEvents($client, $id, $first, $last) { > $cal = new Zend_Gdata_Calendar($client); > if(isset($id)) $cal->setUser($id); > else $cal->setUser('default'); > $cal->setVisibility('private'); > $cal->setProjection('full'); > $cal->setOrderby('starttime'); > > # Default range is from today until the end of time > if(!isset($first)) $first = time(); > $firstdate = getdate($first); > $cal->setStartMin($firstdate['year'] . '-' . > $firstdate['mon'] . > '-1'); > > if(isset($last)) { > $lastdate = getdate($last); > $cal->setStartMax($lastdate['year'] . '-' . > $lastdate['mon'] . > '-1'); > } > > # Parse the date of each event > $eventFeed = $cal->getCalendarFeed(); > $events = array(); > foreach ($eventFeed as $eventFeed) { > $start = strtotime( > $eventFeed->{'gd:when'}['startTime'] ); > $end = strtotime( > $eventFeed->{'gd:when'}['endTime'] ); > > $event = array("start" => $start, "end" => $end); > $events[ $eventFeed->title() ] = $event; > } > > return $events; > } > </code> > > An example use of the code, assuming I have a valid client object > already, and assuming my Google Calendar account includes a non- > default calendar entitled "Work Schedule": > <code> > $calendars = gcal_EnumCalendars($client); > $events = gcal_GetEvents( $client, $calendars['Work Schedule'] ); > foreach($events as $title => $event) { > print $title; > print_r( $event );} > > </code> > > On Apr 24, 8:12 pm, Paul <[EMAIL PROTECTED]> wrote: > > > I posted this tohttp://www.nabble.com/Zend-gdata-f16698.htmlbut > > didn't get a response. I searched the net and this group's archives > > but met a similarly unproductive fate. > > > I've managed to write a command-line PHP program that uses > > ClientLogin to access my users'sdefaultcalendar("A"). When I do a > > $eventFeed = $gdataCal->getCalendarFeed(), I get back a feed > > ($eventFeed) happily listing all of the events in mydefaultcalendar > > ("A"). When I $myCalendarList = $gdataCal->getCalendarListFeed(), I > > get back a feed listing all of 5 of calendars ("A", "B", "C", "D" and > > "E")... but there are no events in the $myCalendarList object, as you > > might (correctly) infer from the name of the getCalendarListFeed > > function. > > > How do I combine these two ideas (1-getting acalendar'sevents and 2- > > getting a listing of my calendars) to access the events in my > > non-defaultcalendar? > > > Thanks for any assistance, > > > --Paul --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Calendar Data API" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/google-calendar-help-dataapi?hl=en -~----------~----~----~----~------~----~------~--~---
