get("user@gmail.com","password");
echo "Numero totale contatti: ". $mycontacts->ncontacts ."
" ;
echo "Nome: ".$mycontacts->contacts[1]->title . "
" ;
echo "Email: ".$mycontacts->contacts[1]->email[0]->address . "
" ; //email numero 0
echo "Indirizzo: ". $mycontacts->contacts[1]->postaladdress[0]->{'$t'} ."
"; // (*) indirizzo
echo "Tel: ". $mycontacts->contacts[1]->phonenumber[0]->{'$t'} . "
"; // (*) tel numero 0
//(*) dato che il nome dell'elemento comincia con $ si usa la sintassi {'$t'}
// E'possibile sbirciare nell'array stampandolo per intero.
//var_dump($mycontacts->contacts[1]);
?>
==== Mostrare per intero la lista dei contatti ====
include("sgcontacts.php");
$mycontacts = new sGCONTACS();
$mycontacts->get("user@gmail.com","password");
echo "Numero totale contatti: ". $mycontacts->ncontacts ."
" ;
echo '
Nome Email Telefono Indirizzo ';
for ($i=0;$i<=$mycontacts->ncontacts ; $i++)
{
// per evitare di stampare record vuoti
if (! isset($mycontacts->contacts[$i])) continue;
echo '
'.$mycontacts->contacts[$i]->title.'
'.$mycontacts->contacts[$i]->email[0]->address.'
'.$mycontacts->contacts[$i]->phonenumber[0]->{'$t'}.'
'.$mycontacts->contacts[$i]->postaladdress[0]->{'$t'}.'
';
}
echo '
';
===== Principi di funzionamento =====
Per poter utilizzare le API di google bisogna prima di tutto ricevere un token di autorizzazione, ovvero un identificativo di sessione aperta correttamente con i servizi di google. ( http://code.google.com/intl/it-IT/apis/accounts/docs/AuthForInstalledApps.html ) . \\
In pratica se il login va a buon fine ottengo una risposta (header) http del genere:
$user,
'Passwd' => $password,
'service' => 'cp', // <== codice per ottenere la lista contatti
'source' => 'test',
'accountType' => 'GOOGLE',
);
//Inizializzo la libreria CURL e setto le opzioni
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL,$login_url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS,$fields); //invio campi POST
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// Invio i dati tramite CURL e ricevo la risposta(con i dati per l'autenticazione)
// nella variabile $result
$result = curl_exec($curl);
// Elaboro la risposta rsult contenente i dati di autenticazione nella forma
// SID=DQA...oUE
// LSID=DQA...bbo
// Auth=DQA...Sxq
// e creo un array $returns['Auth'] con i nomi dei campi della risposta ovvero:
// $returns['SID'], $returns['LSID'], $returns['Auth']. A noi interessera' solo $returns['Auth']
$returns = array();
foreach (explode("\n",$result) as $line)
{
$line = trim($line);
if (!$line) continue;
list($k,$v) = explode("=",$line,2);
$returns[$k] = $v;
}
// chiudo la sessione curl che ci ha permesso di prelevare il token per l'autozzazione $returns['Auth'] .
curl_close($curl);
// Adesso scarichiamo finalmente la lista dei contatti, e per prima cosa quindi creiamo l'header http
// da inviare per tale scopo.
$feed_url = "http://www.google.com/m8/feeds/contacts/$user/full?alt=json&max-results=".$this->max;
$header = array(
'Authorization: GoogleLogin auth=' . $returns['Auth'],
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $feed_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//Riceviamo la lista dei contatti nella variabile $result
$result = curl_exec($curl);
curl_close($curl);
// Convertiamo l' ogetto json in una varibile php
$data = json_decode($result);
// Estraiamo di dati dalla variabile $data e li travasiamo in un array ($this->contacts[]).
// A questo punto possiamo accedere all'arary per prelevare i contatti.
foreach ($data->feed->entry as $entry)
{
// Possiamo includere altri campi della lista contatti nella struttura. Vedere:
// http://code.google.com/intl/it-IT/apis/gdata/docs/2.0/elements.html#gdEmail
$contact = new stdClass();
$contact->title = $entry->title->{'$t'};
$contact->email = $entry->{'gd$email'};
$contact->phonenumber = $entry->{'gd$phoneNumber'};
$contact->postaladdress = $entry->{'gd$postalAddress'};
$this->contacts[] = $contact;
//incremento il numero totale di contatti
$this->ncontacts++;
}
} //end get()
}//end class
===== Includere altri campi nella classe =====
Attualmente la classe include solo alcuni dei numerosi campi che google mette a disposizione. Ma includerne altri non e' affatto un'impresa difficile. Basta infatti aggiungere i campi nella seguente parte di codice:
...
foreach ($data->feed->entry as $entry)
{
$contact = new stdClass();
$contact->title = $entry->title->{'$t'};
$contact->email = $entry->{'gd$email'};
$contact->phonenumber = $entry->{'gd$phoneNumber'};
$contact->postaladdress = $entry->{'gd$postalAddress'};
/*Aggiungere qui altri campi*/
$this->contacts[] = $contact;
}
...
Per una **lista dei campi** consultare: http://code.google.com/intl/it-IT/apis/gdata/docs/2.0/elements.html