Google OAuth and Contacts API - PHP Curl Examples
This code uses Zend Framework’s Zend_Json::decode method, however you can use json_decode if it is available on your version of PHP.
Create the authorization link
When this link is clicked, the site visitor is presented with a page from Google asking if they would like to allow your application access to their data. If they accept, Google will give them a code, which can then be used on the next request. This is run as an installed application, because there are times when data will be requested without user interaction.
$sAuthURL=AUTH_URL;
$aParms=array('response_type'=>RESPONSE_TYPE,
'client_id'=>CLIENT_ID,
'redirect_uri'=>REDIRECT_URI,
'scope'=>SCOPE);
$sLink=$sAuthURL.'?'.http_build_query($aParms);
Request an access and refresh token
require_once 'Zend/Json.php';
$sTokenURL=TOKEN_URL;
$aParms=array(
'code'=>$_POST['code'],
'client_id'=>CLIENT_ID,
'client_secret'=>CLIENT_SECRET,
'redirect_uri'=>REDIRECT_URI,
'grant_type'=>AUTHORIZATION_CODE);
$cURL=curl_init();
curl_setopt($cURL,CURLOPT_URL,$sTokenURL);
curl_setopt($cURL,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($cURL,CURLOPT_POST, TRUE);
curl_setopt($cURL,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($cURL,CURLOPT_POSTFIELDS,$aParms);
$cResponse=Zend_Json::decode(trim(curl_exec($cURL)));
curl_close($cURL);
$sAccessToken=$cResponse['access_token'];
$sRefreshToken=$cResponse['refresh_token'];
Use the refresh_token to request a new access_token
$sTokenURL=TOKEN_URL;
$aParms=array(
'refresh_token'=>$sRefreshToken,
'client_id'=>CLIENT_ID,
'client_secret'=>CLIENT_SECRET,
'grant_type'=>REFRESH_TOKEN);
$cURL=curl_init();
curl_setopt($cURL,CURLOPT_URL,$sTokenURL);
curl_setopt($cURL,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($cURL,CURLOPT_POST, TRUE);
curl_setopt($cURL,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($cURL,CURLOPT_POSTFIELDS,$aParms);
require_once 'Zend/Json.php';
$cResponse=Zend_Json::decode(trim(curl_exec($cURL)));
$sError=curl_error($cURL);
curl_close($cURL);
$sAccessToken=$cResponse['access_token'];
Request the contact data
$sContactsURL=CONTACTS_URL.'?access_token='.$sAccessToken;
$cURL=curl_init();
curl_setopt($cURL,CURLOPT_URL,$sContactsURL);
curl_setopt($cURL,CURLOPT_RETURNTRANSFER, TRUE);
$cResponse=trim(curl_exec($cURL));
$sError=curl_error($cURL);
curl_close($cURL);
Parse the data from Google
This code also Zend_Gdata to handle the parsing.
$phone_only=false;
include 'Zend/Gdata.php';
$gdata=new Zend_Gdata();
$feed=$gdata->importString($cResponse);
foreach ($feed as $entry) {
// Thanks to: http://www.ibm.com/developerworks/opensource/library/x-phpgooglecontact/index.html
$xml = simplexml_load_string($entry->getXML());
$obj = new stdClass;
$obj->id = $entry->id->text;
if (false===($iSlash=strpos($entry->title->text,'/')))
$obj->name=$entry->title->text;
else
$obj->name = substr($entry->title->text,0,$iSlash);
if (empty($obj->name)) continue;
$name = explode(' ',$obj->name,3);
$obj->first_name = $obj->middle_name = $obj->last_name = '';
switch (count($name))
{
case 1:
$obj->first_name = $obj->name;
break;
case 2:
$obj->first_name = $name[0];
$obj->last_name = $name[1];
break;
case 3:
$obj->first_name = $name[0];
$obj->middle_name = $name[1];
$obj->last_name = $name[2];
break;
}
$obj->phoneNumber = array();
$obj->phone = array();
foreach ($xml->phoneNumber as $p)
{
$type = preg_replace('/^[^#]+#(.*)$/','\1',(string) $p['rel']);
$obj->phoneNumber[] = (string) $p.' ('.$type.')';
$obj->phone[$type] = array ('phone' => preg_replace('/\D/','',(string) $p), 'type' => strtolower($type) );
}
if (empty($obj->phone) && $phone_only) continue;
$results[$obj->last_name] = $obj;
}
ksort($results);
This post courtesy of Lyrix, Inc. http://mobiso.com
Print article | This entry was posted by elvis on 04/26/12 at 05:02:00 pm . Follow any responses to this post through RSS 2.0. |