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
-~----------~----~----~----~------~----~------~--~---

Reply via email to