Google Calendar API with PHP

Installation

  • Download the latest release
  • copy library/Zend to your web folder

Connection

require_once 'Zend/Loader.php';
 
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
 
$user = 'username@gmail.com';
$pass = 'password';
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
 
try
{
	$client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service);			
}
catch(Exception $e)
{
	// prevent Google username and password from being displayed
	// if a problem occurs
	echo "Could not connect to calendar.";
	die();
}

Update $user and $pass.

List of events

Get events

// parameters
$calendar_user = '0470gkp8g7ftv8ov5nfvjplrdk%40group.calendar.google.com';
$calendar_visibility = 'private-50642f5681afbb525ed30d2b94b79b4b';
 
$start_date = '2010-06-01';
$end_date = '2010-06-30';
 
// build query
$gdataCal = new Zend_Gdata_Calendar($client);
 
$query = $gdataCal->newEventQuery();
 
$query->setUser($calendar_user);
$query->setVisibility($calendar_visibility);			
 
$query->setSingleEvents(true);
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
$query->setMaxResults(100);
 
 
$query->setStartMin($start_date);
$query->setStartMax($end_date);
 
// execute and get results
$event_list = $gdataCal->getCalendarEventFeed($query);
  • $calendar_user and $calendar_visibility: calendar dropdown -> Calendar settings -> Private Address -> “XML” link:
http://www.google.com/calendar/feeds/$calendar_user/$calendar_visibility/basic
$start_date = $start_date  . 'T00:00:00.000-07:00';
$end_date = $end_date  . 'T00:00:00.000-07:00';

Display events

foreach ($event_list as $event)
{
	// id
	print $event->id . '<br />';
 
	// title
	print $event->title . '<br />';
 
	// where
	print $event->where[0] . '<br />';
 
	// description
	print $event->content . '<br />';
 
	// when (ex: 2010-06-11T07:30:00.000-07:00)
	print $event->when[0]->startTime . '<br />';
	print $event->when[0]->endTime . '<br />';
 
	print '-----<br />';
}

Notes

  • $query->setSingleEvents(true): if set to false (default), when a single instance of a repeating event is modified, the original instance AND the modified version will be returned
  • convert date to SQL format
// from 	2010-06-11T07:30:00.000-07:00
// to 		2010-06-11 07:30:00
function date_google_to_sql($str)
{
	$t = explode('T', $str);
 
	$date = $t[0];
	$time = $t[1];
	$time = substr($time, 0, 8);
 
	$str = $date . ' ' . $time;
	return $str;
}

Create event

// parameters
$title = "French revolution celebration";
$where = "at my place";
$description = "only mineral water";
 
$start_date = "2010-07-14 07:00:00";
$end_date = "2010-07-14 07:00:00";
 
$calendar_user = 'h9s3qp5al1m5a9440n6ah8c7qs%40group.calendar.google.com';
$tzOffset = '-07'; // timezone offset
 
// build event
$start_date = str_replace(' ', 'T', $start_date);
$end_date = str_replace(' ', 'T', $end_date);
 
$gdataCal = new Zend_Gdata_Calendar($client);
$newEvent = $gdataCal->newEventEntry();
 
$newEvent->title = $gdataCal->newTitle($title);
$newEvent->where = array($gdataCal->newWhere($where));
$newEvent->content = $gdataCal->newContent($description);
 
$when = $gdataCal->newWhen();
$when->startTime = "{$start_date}.000{$tzOffset}:00";
$when->endTime = "{$end_date}.000{$tzOffset}:00";
$newEvent->when = array($when);
 
// insert event
$createdEvent = $gdataCal->insertEvent($newEvent, "http://www.google.com/calendar/feeds/$calendar_user/private/full");
 
// event id
$event_id = $createdEvent->id->text;
  • $calendar_user: same as above

Get event from id

// parameters
$event_id = 'http://www.google.com/calendar/feeds/h9s3qp5al1m5a9440n6ah8c7qs%40group.calendar.google.com/private-3056301e77adcd8d353a6ea7bc23a4d8/full/nk8jd3jnftoe46lm0sr2da23pk';
 
// get event
$gdataCal = new Zend_Gdata_Calendar($client);
$event = $gdataCal->getCalendarEventEntry($event_id);

Reference

 

Feedback