Telefonnummer nach Namen auflösen per Google Contacts

Ich habe ein Skript geschrieben, das es erlaubt, die Google-Kontakte nach einer Telefonnummer zu durchsuchen und den zugehörigen Namen zurückzugeben.

Das Skript benötigt die openssl-Extension, sowie das Zend Framework. Die Anforderungen sind also die selben wie in diesem Thread.

Das Skript kann z.B. verwendet werden, um die Anruferliste aus der Fritzbox mit Namen zu versehen.

<?

// hier die Google-Zugangsdaten eintragen
$googleUser = '';
$googlePass = '';

// die Standard-Ländervorwahl
$defaultCountry = '+49';

// die Standard-Ortsvorwahl ohne führende 0
$defaultArea = '40';

// diese Zeilen müssen oben im Skript stehen
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_Query');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');

$googleQueryList = Array();

loadFromGoogle();


// hier eine Beispiel-Abfrage
echo(googleResolveNumber('123456789', 'nicht gefunden'));


// es folgen die Funktionen, die irgendwo im Skript stehen können.
function googleResolveNumber($phoneNumber, $defaultString)
{
	global $googleQueryList;
	
	$phoneNumber = formatPhoneNumber($phoneNumber);
	
	if(isset($googleQueryList[$phoneNumber]))
	   return($googleQueryList[$phoneNumber]);
	else
	   return($defaultString);
}

function formatPhoneNumber($phoneNumber)
{
	global $defaultCountry, $defaultArea;
	
	if(substr($phoneNumber, 0, 2) == '00')
	{
		$phoneNumber = '+' . substr($phoneNumber, 2);
	}
	if(substr($phoneNumber, 0, 1) != '+')
	{
	   if(substr($phoneNumber, 0, 1) != '0')
	   {
	      $phoneNumber = $defaultCountry . $defaultArea . $phoneNumber;
	   }
	   else
	   {
	      $phoneNumber = $defaultCountry . substr($phoneNumber, 1);
	   }
	}
	
	return($phoneNumber);
}

function loadFromGoogle()
{
	global $googleUser, $googlePass, $googleQueryList;
	
	try
	{
		$client = Zend_Gdata_ClientLogin::getHttpClient($googleUser, $googlePass, 'cp');

		$gdata = new Zend_Gdata($client);
		$gdata->setMajorProtocolVersion(3);

		$query = new Zend_Gdata_Query('https://www.google.com/m8/feeds/contacts/default/full');
		$query->maxResults = 2000; // retrieve ALL the contacts
		$feed = $gdata->getFeed($query);

		foreach($feed as $thisEntry)
		{
		   $xml = simplexml_load_string($thisEntry->getXML());

		   $thisName = (string) $thisEntry->title;

		   if($thisName == '') $thisName = $xml->organization->orgName;

			foreach($xml->phoneNumber as $phoneNumber)
			{
			   $phoneNumber = formatPhoneNumber((string) $phoneNumber);

            $googleQueryList[$phoneNumber] = utf8_decode($thisName);
			}
		}
	}
	catch(Exception $e)
	{
	    echo "Connection error.";
	    die();
	}
}

?>

…zur Info fuer die Fritzbox User. Die neueren (Labor)Firmwares koennen einen Google Account als Telefonbuch nutzen. Dieser kann mit dem Fritzfon jetzt auch bearbeitet werden.

Gruss, Michael

Danke für den Hinweis! Wenn das gut klappt, wäre es natürlich u.U. die „sauberste“ Lösung.

Szenarien in denen mein Skript dennoch nützlich ist:
-andere Boxen/Anlagen
-mehrere Accounts sollen durchsucht werden (Ehe/Lebnspartner)
-gebrandete Fritzbox z.B. wie bei mir (FB Cable von Kabel Deutschland) die sich nicht einfach updaten lässt

Hallo Zusammen,
nur zur Info:
Auch dieses Skript ist seit 05.05.2015 veraltet, so dass nun letztendlich seit 27.05.2015 die Google Contacts API v3 verwendet werden muss (ähnlich Google-Kalender Skript).

Das gleiche Problem hat AVM zur Zeit: https://www.symcon.de/forum/threads/27855-Fritz!Box-Google-Kontakte-derzeit-nicht-nutzbar

Siehe: https://developers.google.com/accounts/docs/AuthForInstalledApps

Hat es schon jemand geschafft die Google Kontakte über die Google Contacts API v3 per Skript auszulesen ?