Artikelformat

stay connected – google contacts

Wer ein Android Mobiltelefon nutzt, synchronisiert sicher sein Addressbuch mit Google Contacts. Diese Kontaktliste kann man natürlich auch mit den verschiedenen Google Service nutzen. Nun möchte man aber auch aus einer PHP Applikation diese Daten nutzen und das wird im Folgenden beispielhaft beschrieben.

Um an die Google Daten zu gelangen benötigt man natürlich einen Account und könnte die Authentifizierung und das Auslesen der Daten selbst realisieren. Um den Account kommt man natürlich nicht herum, aber Authentifizierung und Zugriff auf die Daten ist mit Hilfe des Zend Frameworks sehr schnell realisiert.

Zuerst lädt man die notwendigen Klassen. Da nicht der Autoloader genutzt wird, kann man so auch die notwendigen Klassen leichter aus dem Framework heraustrennen, wenn man bspw. auf den Speicherplatz achten will.

1
2
3
4
5
6
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Http_Client');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_Feed');

Nun authentifizieren wir uns und setzen – wie in der API Beschreibung erwartet – die Protokoll Version auf 3.0. Anschließend lesen wir den Kontakte-Feed. Also eine XML-Datei, die die gewünschten Daten beinhaltet.

1
2
3
4
5
6
7
8
    $client = Zend_Gdata_ClientLogin::getHttpClient(
                    $user, $pass, 'cp');
    $gdata = new Zend_Gdata($client);
    $gdata->setMajorProtocolVersion(3);
 
    $query = new Zend_Gdata_Query(
                    'http://www.google.com/m8/feeds/contacts/default/full');
    $feed = $gdata->getFeed($query);

getFeed liefert ein Objekt vom Typ Zend_GData_App_Feed zurück. Man kann über die enthaltenen Einträge mit foreach laufen, da das Iterator-Interface implementiert wird. Weiter kann man auf einen Teil der Daten direkt zugreifen und auf einen Teil indem man diese als XML exportiert. In diesem Zuge werden neue Objekte erstellt, die der Zielsetzung entsprechen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
foreach ($feed as $entry) {
        $xml = simplexml_load_string($entry->getXML());
        $obj = new stdClass;
        $obj->name = (string) $entry->title;
        $obj->orgName = (string) $xml->organization->orgName;
        $obj->orgTitle = (string) $xml->organization->orgTitle;
 
        foreach ($xml->email as $e) {
            $obj->emailAddress[] = (string) $e['address'];
        }
 
        foreach ($xml->phoneNumber as $p) {
            $obj->phoneNumber[] = (string) $p;
        }
        foreach ($xml->website as $w) {
            $obj->website[] = (string) $w['href'];
        }
 
        $results[] = $obj;
    }

Anschließend kann man über das Resultset laufen und die gewonnen Daten ausgeben. Beispielsweise als Html-Seite oder als XML-Datei, die einer gewissen Struktur genügt oder einfach auf der Kommandozeile.

Telefone von Grandstream unterstützen bspw. einen Telefonbuch-Import in Form einer XML-Datei.

2 Kommentare

  1. Hi Norbert,

    ich habe es ähnlich gemacht. Es gibt auch die Möglichkeit die Kontakt-Bilder herunter zu laden.
    Hierfür braucht man lediglich einen Token, das dank Zend Framework 2 Zeilen mehr Code sind 😉

    Übrigens entwickle ich es gerade für die Fritzbox, da FritzFon (MT-F) ebenfalls Kontakte in der Anlage verwaltet macht es sich von großen Vorteil diese dort zu syncronsisieren 😉

    Grüße, Juan

    Antworten
    • Hört sich interessant an. Bei mir sind die Bilder der Kontakte nicht relevant gewesen.Gibt aber nette Geräte von Snom, die ein Farbdisplay haben und auch Bilder unterstützen.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.