+ Antworten
Ergebnis 1 bis 3 von 3
  1. #1
    Registriert seit
    Aug 2008
    Beiträge
    263

    Standard Anrufer im Verzeichnis der Fritzbox finden

    Dieses Script stellt eine Funktion bereit, mit der eine übergebene Rufnummer in einer Sicherungskopie des Fritzbox Telefonverzeichnisses gesucht wird.
    Der Zugriff auf diese Datei ist sehr schnell möglich, im Gegensatz zum Webfront der Fritzbox. Da ist bei mir das Telefonbuch schnarchlangsam.

    Ob alle Fritzboxen das Telefonbuch in gleichen XML-Format sichern, ist mir nicht bekannt. Aber mit der 7270 klappt es in jedem Fall.
    PHP-Code:
    <?
    function Name_aus_Liste($Rufnummer) {
    $gefunden false;
        
    $daten file_get_contents("./Telefonbuch.xml");
        
    $daten explode("<contact>" $daten);
        for (
    $zaehler 1$zaehler count($daten); $zaehler++) {
            
    ereg("\">(.*)</number>" $daten[$zaehler] , $nummer);
            
    // Vielleicht sind mehrer Nummern zu diesem Kontakt vorhanden:
            
    $nummern explode("\n"$nummer[1]);
            for (
    $zaehler2 0$zaehler2 count($nummern); $zaehler2++) {
              
    $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 und raus:
                 
    if ($gefunden) {
                     
    ereg("<realName>(.*)</realName>" $daten[$zaehler] , $name);
                     return 
    $name[1];
                 }
            }
        }
    }
    ?>
    Viele Grüsse aus Berlin
    Robert

    http://www.niemehrheizoel.de

  2. #2
    Registriert seit
    Dec 2007
    Ort
    Stuttgart
    Beiträge
    135

    Ja ich weiß, dass dieser Beitrag schon 2 Jahre her ist .
    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 :-P

    Keine dieser Scripte hab ich wirklich selbst geschrieben, nur aus Foren zusammengesucht und angepasst.

    Telefonbuch aus Fritzbox holen:
    PHP-Code:
    <?
    //Daten anpassen
        
    $FritzBox="192.168.178.2";
        
    $Password="xxxxxxxxx";
       
    $filename   IPS_GetKernelDir()."\\telefon\\rohdaten\\telefonbuch.xml";
       
    //ab hier nichts mehr verändern
        
    $ch curl_init();
        
    curl_setopt($chCURLOPT_URL"http://".$FritzBox."/cgi-bin/webcm?getpage=../html/login_sid.xml");
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    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($chCURLOPT_URL"http://".$FritzBox."/cgi-bin/webcm");
        
    curl_setopt($chCURLOPT_POST1);
        
    curl_setopt($chCURLOPT_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($chCURLOPT_URL"http://".$FritzBox."/cgi-bin/firmwarecfg");
        
    curl_setopt($chCURLOPT_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:
    PHP-Code:
    <?
    //$Rufnummer muss beim Aufruf übergeben werden
    $gefunden false;
    $daten file_get_contents("..\\telefon\\rohdaten\\telefonbuch.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:
    PHP-Code:
    $AnruferName=IPS_RunScriptWaitEx(/*ScriptID*/,Array("Rufnummer"=>"0123456789")); 
    Namen zu Nummer aus "DasÖrtliche" ermitteln:
    PHP-Code:
    <?
    //$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);
        
    $nameimplode(" ",$tmp);
    }
    echo 
    $name;
    return;
    ?>
    Aufruf:
    PHP-Code:
    $AnruferName=IPS_RunScriptWaitEx(/*ScriptID*/ ,Array("Rufnummer"=>"0123456789")); 
    Funktion getestet mit einer Fritzbox 7270 (Firmware 74.05.05).
    Klappt wunderbar;-).

    Viel Spaß damit.
    Geändert von brausepaul (23.09.11 um 19:06 Uhr)

  3. #3
    Registriert seit
    Aug 2006
    Ort
    Bamberg
    Beiträge
    985

    @brausepaul

    Laufen bei dir die Skripte auch mit der aktuelle Firmware (05.52)???
    Ich habe die 7390.

    Vielen Dank, Andreas

    PS:
    Bei mir kommt:

    Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\35440.ips.php on line 12

    Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\35440.ips.php on line 20

Ähnliche Themen

  1. MOELLER Communication Interface an Fritzbox
    Von Sven im Forum Eaton Xcomfort
    Antworten: 8
    Letzter Beitrag: 10.12.09, 19:45
  2. Fritzbox und WOL
    Von kadorf im Forum Alles rund um den PC
    Antworten: 1
    Letzter Beitrag: 11.06.09, 12:19
  3. Low Cost Router mit Fritzbox 7270
    Von Mike im Forum Allgemeine Diskussion
    Antworten: 4
    Letzter Beitrag: 07.01.09, 21:59
  4. IPS Anrufen über Fritzbox
    Von TK6 im Forum Allgemeine Diskussion
    Antworten: 2
    Letzter Beitrag: 12.02.08, 15:07