Ja ich weiß, dass dieser Beitrag schon 2 Jahre her ist :p.
Wollte nur kurz mal 2 Scripte dazu packen, da man ja erstmal an die XML (Telefonbuch) rankommen muss und wegen der veralteten Funktion „ereg“ PHP etwas zickig reagiert.
(mein)Ziel:
Wenn ein Anruf rein kommt, soll erst eine namentliche Zuordnung zum internen Telefonbuch versucht werden und danach eine Suche beim „Örtlichen“. Die Zuordnung soll direkt geschehen, um bereits den Namen ansagen/anzeigen zu lassen ehe man dran gegangen ist. Später bringt nix, da weiß ich es auch so 
Keine dieser Scripte hab ich wirklich selbst geschrieben, nur aus Foren zusammengesucht und angepasst.
Telefonbuch aus Fritzbox holen:
<?
//Daten anpassen
$FritzBox="192.168.178.2";
$Password="xxxxxxxxx";
$filename = IPS_GetKernelDir()."\ elefon\\rohdaten\ elefonbuch.xml";
//ab hier nichts mehr verändern
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://".$FritzBox."/cgi-bin/webcm?getpage=../html/login_sid.xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
preg_match('/<Challenge>([0-9a-f]*)<\/Challenge>/', curl_exec($ch), $matches);
$Challenge = $matches[1];
$CPSTR=$Challenge."-".$Password;
$MD5=md5(iconv("ISO8859-1", "UTF-16LE", $CPSTR));
$RESPONSE=$Challenge."-".$MD5;
curl_setopt($ch, CURLOPT_URL, "http://".$FritzBox."/cgi-bin/webcm");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response=$RESPONSE&getpage=../html/de/menus/menu2.html");
preg_match('/name="sid" value="([0-9a-f]*)"/', curl_exec($ch), $matches);
$SID = $matches[1];
curl_setopt($ch, CURLOPT_URL, "http://".$FritzBox."/cgi-bin/firmwarecfg");
curl_setopt($ch, CURLOPT_POSTFIELDS, array("sid" => $SID, "PhonebookId" => 0, "PhonebookExportName" => "Telefonbuch", "PhonebookExport" => "") );
$xml = curl_exec($ch);
curl_close($ch);
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $xml);
@fclose($fileHandle);
?>
Namen zu Nummer aus dem Telefonbuch ermitteln:
<?
//$Rufnummer muss beim Aufruf übergeben werden
$gefunden = false;
$daten = file_get_contents("..\ elefon\\rohdaten\ elefonbuch.xml");
$daten = explode("<contact" , $daten);
for ($zaehler = 1; $zaehler < count($daten); $zaehler++) {
preg_match_all('#>(.*)</number>#', $daten[$zaehler] , $nummer); //finde alle Nummern zu Kontakten
$nummern=$nummer[1];
for ($zaehler2 = 0; $zaehler2 < count($nummern); $zaehler2++) {// Vielleicht sind mehrer Nummern zu diesem Kontakt vorhanden:
$pos = stripos($Rufnummer, $nummern[$zaehler2]);
if ($pos !== false){
$gefunden = true;
}else{
$pos = stripos($nummern[$zaehler2], $Rufnummer);
if ($pos !== false ){
$gefunden = true;
}
}
// Jetzt noch den Namen zur Nummer suchen:
if ($gefunden) {
preg_match('#<realName>(.*)</realName>#', $daten[$zaehler] , $name);
//print_r($name[1]);
echo $name[1];
return;
}
}
}
?>
Aufruf:
$AnruferName=IPS_RunScriptWaitEx(/*ScriptID*/,Array("Rufnummer"=>"0123456789"));
Namen zu Nummer aus „DasÖrtliche“ ermitteln:
<?
//$Rufnummer muss bei Aufruf übergeben werden
$url="http://www.dasoertliche.de/Controller";
$query=array(
"form_name"=>"search_inv",
"ph"=>$Rufnummer
);
$data=http_post_fields($url,$query);
if(preg_match('/na: "(.*)"/', $data, $result)){ // Haben wir ein Ergebniss?
$name=$result[1];
}else{
$name="Nicht gefunden";
}
//Hier wird nur die Reihenfolge zu "Vorname Nachname" angepasst(optional)
if($name!="Nicht gefunden"){
$tmp = explode(" ",$name);
$tmp = array_reverse($tmp);
$name= implode(" ",$tmp);
}
echo $name;
return;
?>
Aufruf:
$AnruferName=IPS_RunScriptWaitEx(/*ScriptID*/ ,Array("Rufnummer"=>"0123456789"));
Funktion getestet mit einer Fritzbox 7270 (Firmware 74.05.05).
Klappt wunderbar;-).
Viel Spaß damit.