Fritzbox 7270/Wlan Repeater Scripts

Moin Wolfgang,

ich glaube, Du bist hier komplett auf dem Holzweg. Das komplette Script liest die interne Seite der Internettelefonie aus und macht sie für das Webfront lesbar in Form einer Tabelle.

In der Datei Voip.txt liegt die komplette Webseite welche dann aufgesplittet wird.

Hallo,

super Skripte.:loveips:

Kann mir jemand einen Tipp oder ein Skript posten wie ich meinen Nas-Speicher indexieren kann?

Hallo Rainer,
danke für Deinen Hinweis. Hab mittlerweile viel gesucht, auch auf PHP-Seiten und bin mir nun sicher, dass ich die durch IPS ermittelten Daten parallel zu IPS noch in eine MYSQL DB schreiben möchte, die auf meinem Syno-NAS eh ungenutzt läuft.
Aktuell habe ich das Problem mit der Selektion nach Rufnummern in der Telefonliste gut durch eine zeile von sabbelsau http://www.ip-symcon.de/forum/f53/fritzbox-7270-wlan-repeater-scripts-8267/index7.html#post71261 hinbekommen. Leider wird mir jetzt immer in der 2. Zeile das IF-Argument ausgegeben.

   if ($row[5]="Internet: 42920")
{
	
	 $str.= "<tr>";
    foreach($row as $data)
    $str.= '<td>'.$data.'</td>';
    $str.= "</tr>";
}
$str .= "</table>";

Hat jemand einen Tipp wie ich das vermeiden kann?

Ab IPS 2.5 (PHP 5.4) geht es tatsächlich nicht mehr. Zum Emulieren vo http_post_fields mit curl folgenden Code benutzen:

// Ersatz für php_http.dll, wird in php 5.4 nicht mehr unterstützt
function http_post_fields($url, $fields)
{
	// Felder umwandeln
	$felder = http_build_query($fields);

	// Verbindung öffnen
	$ch = curl_init();

	// Antwort speichern, URL, Anzahl Felder und Felder merken
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_POST, count($fields));
	curl_setopt($ch, CURLOPT_POSTFIELDS, $felder);

	// Abfrage starten
	$result = curl_exec($ch);

	//Verbindung schließen
	curl_close($ch);

	return $result;
}


Hallo zusammen,
leider funktioniert die Selektion nach Nummern nicht mehr.
Statt dessen wird der Kopf und alle Werte der Spalte 6 [5] und eine weitere sonst leere Zeile mit dem Kriterium gefüllt.
Auch eine Selektion die die ausgehenden Anrufe wie in sabbelsau’s Zeile beschrieben funktioniert nicht mehr. Es gibt keinen Fehler. Es werden einfach alle Anrufe gezeigt. Ändere ich das Kriterium von <> 3 auf z.B. = 1 dann geschieht mit der Ausgabe in Spalte 1 [0] selbes wie mit Spalte 6 [5] o.g.
hier mal da komplette Script und anbei noch ein Bsp. vom WF.

<?

// IPS_SetScriptTimer(12910 /*[FritzBox\Anruferliste\FritzBox_Anruferliste]*/ , 20);

$fritzbox = 'fritz.box';
$fritzseite  = '../html/de/menus/menu2.html';
$filename    = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\AnruflisteA.csv";// anpassen
$password    = $FBPass;

$ch = curl_init('http://' . $fritzbox . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);

if ($session_status_simplexml->iswriteaccess == 1)
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
    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);
   if (isset($matches[1]) && $matches[1] != '0000000000000000')
   {
      $SID = $matches[1];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}

//Anrufliste aktualisieren
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=foncalls");
curl_exec($ch);

curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 4);
$anrufliste = $anrufliste[3];
$anrufliste = 'Typ;Datum;'.$anrufliste; // 'Typ;Datum;' vorausgestellt damit auch die Spaltenköpfe Typ + Datum Angezeigt werden
//print_r($anrufliste);
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);

curl_close($ch);

//echo $anrufliste;

$id = @fopen($filename, "r");
$i = 0;
while(($data = fgetcsv($id, filesize($filename), ";")) && $i < 20) //letzte Zahl ist die Anzahl der angezeigten Zeilen
{
    $i++;
    if ($data[0] == 1) $data[0] = "<img src=\"../user/icons/fixed/Callin.png\" title=\"eingehender Anruf\">";
    if ($data[0] == 2) $data[0] = "<img src=\"../user/icons/fixed/Callinfailed.png\" title=\"Anruf in Abwesenheit\">";
    if ($data[0] == 3) $data[0] = "<img src=\"../user/icons/fixed/Callout.png\" title=\"ausgehender Anruf\">";
	 //$data[5] = substr($data[5],-10); // das abschneiden von "Internet: " funktioniert so wohl nicht

	 $table[] = $data;
}
//fclose($id);

$str = "<table width='100%'align='center'>";
foreach($table as $row)
{
    //if ($row[0] <> 3)//Abgehende Anrufe ausblenden
   if ($row[5] = "Internet: xxxxxxx")
	 $str.= "<tr>";
    foreach($row as $data)
    $str.= '<td>'.$data.'</td>';
    $str.= "</tr>";
}
$str .= "</table>";
SetValue(22790 /*[FritzBox\Anrufliste_nachNr\FB_AnrLst_Wolf]*/ , $str);
@fclose($id);

?>

Hat bitte jemand einen Tipp?

Hallo Wolfgang,

ich würde dir ja gerne helfen aber Du wirfst hier mit Scriptfetzen rum wo kein Mensch mehr durchblickt was Du überhaupt machen willst.

Das hier ist aufjeden Fall falsch, es ist eine Zuweisung und Du willst ja einen Vergleich haben.

if ($row[5] = "Internet: xxxxxxx") 

sieht dann so aus.

if ($row[5] == "Internet: xxxxxxx") 

Ansonsten hilft immer debugen. wenn du nicht damit zurecht kommst, setz dir unter jede Zeile ein echo oder bei Arrays ein print_r(…); Damit kann man schön sehen was passiert.

Hallo Rainer,
danke für Deine Antwort. Der Tipp mit dem == wars (eigentlich).
Das letzte Script ist bei mir kein Fetzen sondern das komplette Script.
Was ich will:
aktuell
Ziel 1 ist es die abgehenden Anrufe herauszufiltern
Ziel 2 ist es nur Anrufe an eine unserer Nummern anzuzeigen
geplant
Ziel 3 die nicht intern gespeicherten Nummern durch Reverssuche in Klicktel abzugleichen und anzuzeigen
Ziel 4 eine Wählhilfe wie in der FB zu verwirklichen
Ziel 5 ist wildes Filtern mit vorgaben durch Checkboxen, Optionfelder und Comboboxen. (Gibts sowas fürs WF überhaupt? Hab auf die schnelle nichts gefunden.)
Ziel 6 die Daten in eine MySQL-DB schreiben und auch wieder auslesen (lernen). Verbindung steht bereits.

Habe blauäugigerweise einfach aus verschiedenen Posts Scriptteile aneinander gereiht und gehofft dass es funktioniert. War nicht ganz unerwartet nicht so. Was helfen würde wäre wenn die Umgebug unter der die Scripts funktionieren genannt würden.
Habe nach Rainer’s Antwort mal versucht zu verstehen was da läuft.
In Rainer’s while-Schleife werden die Daten aus der *.csv eingelesen und die 1. Spalte durch Bildchen ersetzt.
In der foreach-Schleife werden die Daten dann in eine html-conforme Tabelle geschrieben.
Soweit richtig?
In dem im letzten Post zitierten Code von sabbelsau zum herausfiltern der abgehenden Anrufe findet die Abfrage erst statt wenn die erste Spalte schon keine Zahlen mehr sondern Bilder hat …
Daher habe ich mal die Ersetzung durch Bilder aus der while in die foreach Schleife verschoben und das herausfiltern der kriterien in die while-Schleife.

<?

// IPS_SetScriptTimer(12910 /*[FritzBox\Anruferliste\FritzBox_Anruferliste]*/ , 20);

$fritzbox = 'fritz.box';
$fritzseite  = '../html/de/menus/menu2.html';
$filename    = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\AnruflisteA.csv";// anpassen
$password    = $FBPass; //in der __autoLoad.php hinterlegt

// Verbindung zur FB herstellen ----------------------------------------------
$ch = curl_init('http://' . $fritzbox . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);

if ($session_status_simplexml->iswriteaccess == 1)
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
    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);
   if (isset($matches[1]) && $matches[1] != '0000000000000000')
   {
      $SID = $matches[1];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}

//Daten in *.csv schreiben - Anrufliste aktualisieren ------------------------
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=foncalls");
curl_exec($ch);

curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 4);
$anrufliste = $anrufliste[3];
$anrufliste = 'Typ;Datum;'.$anrufliste; // 'Typ;Datum;' vorausgestellt damit auch die Spaltenköpfe Typ + Datum Angezeigt werden
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);

curl_close($ch);


// Daten aus der *.csv lesen ----------------------------------------
$id = @fopen($filename, "r");
$i = 0;
while(($data = fgetcsv($id, filesize($filename), ";")) && $i < 80) //letzte Zahl ist die Anzahl der angezeigten Zeilen
{
    $i++;

	 // die Spalte Nebenstelle ausblenden
	 $data[4]="";

	 //Abgehende ausblenden
	 // if ($data[0] <> 3) $table[] = $data;

	 //Abgehende ausblenden + nur eine bestimmte Rufnummer
	 if ($data[0] <> 3)
	   {
	   if ($data[5] == "Internet: yyyyyyy") //Zeile 69
	      {
	      $table[] = $data;
	      }
		}

}

fclose($id);

$str = "<table width='100%'align='center'>";

foreach($table as $row)
{
    if ($row[0] == 1) $row[0] = "<img src=\"../user/icons/fixed/Callin.png\" title=\"eingehender Anruf\">";//Abgehende Anrufe ausblenden
    if ($row[0] == 2) $row[0] = "<img src=\"../user/icons/fixed/Callinfailed.png\" title=\"Anruf in Abwesenheit\">";
    if ($row[0] == 3) $row[0] = "<img src=\"../user/icons/fixed/Callout.png\" title=\"ausgehender Anruf\">";
	 if ($row[5] == "Internet: 8814610") $row[5] = "xxxxxxx";

    foreach($row as $data)
    $str.= '<td>'.$data.'</td>';
    $str.= "</tr>";
}
$str.= "</table>";
SetValue(22790 /*[FritzBox\Anrufliste_nachNr\FB_AnrLst_Wolf]*/ , $str);
@fclose($id);

?>

Leider ist mit dem Verschieben der Anzeigekriterien auch die erste Zeile (Head) der Spalten ausgefiltert. Wie kann ich das vermeiden / nachträglich wieder einfügen?
Das ganze funktioniert soweit. Allerdings bekomme ich noch eine unerwünschte Meldung: Notice: Undefined offset: 5 in Zeile 69
die Spalte 6 $data[5] gibts aber und wird mir nach der Notice im WF angezeigt. Wie bekomme ich die Notice weg?
Des weiteren möchte ich die Spalte 5 (Nebenstelle) $data[4] nicht angezeigt bekommen. Habe mir mangels besseren Wissens mal $data[4]="" gesetzt. gibts eine elegantere Lösung?
Da das Script Von Rainer die einzulesenden Zeilen auf 20 Begrenzt hat, was ich richtig finde, kommt es vor, dass wenn meine Frau mal richtig viel telefoniert und ich mal keinen Anruf bekomme, die Variable $table nicht gefüllt wird und dann beim Verweis darauf noch einen Fehler bekomme. Ich denke letzteres könnt gelöst werden, wenn ichs hinbekomme zumindest die Zeilenköpfe wieder reinzubekommen.
Danke im Voraus für Eure Antworten,

Hallo Wolfgang,

ersetz erstmal diese Zeilen. Da hat es vor einiger Zeit eine Änderung in der Box gegeben. Steht aber auch schon mal geschrieben.

Dort sind auch mal ein paar print_r… drinnen. Kannst ja mal auskommentieren und schauen.

//Anrufliste aktualisieren
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=foncalls");
curl_exec($ch);

curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 2);
//print_r($anrufliste);
$anrufliste = $anrufliste[1];
//print_r($anrufliste);
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);

curl_close($ch);

Hallo Rainer,
Danke für die schelle Antwort. Dein Script-Ausschnitt funktioniert, löst allerdings mein Problem mit den Zeilenköpfen nicht. Die kommen in user beider Code-Abschitt richtig rein. Aber ich filtere die ja in

// Daten aus der *.csv lesen ----------------------------------------
$id = @fopen($filename, "r");
$i = 0;
while(($data = fgetcsv($id, filesize($filename), ";")) && $i < 80) //letzte Zahl ist die Anzahl der angezeigten Zeilen
{
    $i++;

     // die Spalte Nebenstelle ausblenden
     $data[4]="";

     //Abgehende ausblenden
     // if ($data[0] <> 3) $table[] = $data;

     //Abgehende ausblenden + nur eine bestimmte Rufnummer
     if ($data[0] <> 3)
       {
       if ($data[5] == "Internet: yyyyyyy") //Zeile 69
          {
          $table[] = $data;
          }
        }

} 

wieder durch die IF wieder aus.

Andere Vorschläge?

Kann man mit den Kritereien in der Whileschleife die erste Zeile irgend wie überspringen?

Kann man mit den Kritereien in der Whileschleife die erste Zeile irgend wie überspringen?

Nicht bei 0 anfangen. :wink:

Hallo Rainer,
so?

// Daten aus der *.csv lesen ----------------------------------------
$id = @fopen($filename, "r");
$i = 1;
while(($data = fgetcsv($id, filesize($filename), ";")) && $i < 100) //letzte Zahl ist die Anzahl der angezeigten Zeilen

funktioniert leider nicht.

Sorry Wolfgang,

war mein Fehler. Ich schau mir das heute Abend oder morgen mal richtig an.

Hiermit ist die Fehlermeldung weg.

if($data[0] != 3 && isset($data[5]) && $data[5] == "Internet: xcxysde")

Hiermit kannst Du Spalten löschen.

unset($data[3]); // abgehende Nummern löschen

Die Kopfzeile musst Du dir irgendwie wieder rein basteln.

Hallo Rainer,
vielen Dank für Deine Hilfe.
Funktioniert super. Das Problem mit den Spaltenköpfen habe ich durch die Zeile

if ($data[0] == "Typ") $table[] = $data;

vor den anderen Ifs gelöst.
Für alle die’s interessiert, das komplette Script. IPS 2.5, FB 7270 v2 54.05.05.

<?

// IPS_SetScriptTimer(12910 /*[Objekt #12910 existiert nicht]*/ , 20);

$fritzbox = 'fritz.box';
$fritzseite  = '../html/de/menus/menu2.html';
$filename    = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\AnruflisteA.csv";// anpassen
$password    = $FBPass; //in der __autoLoad.php hinterlegt

// Verbindung zur FB herstellen ----------------------------------------------
$ch = curl_init('http://' . $fritzbox . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);

if ($session_status_simplexml->iswriteaccess == 1)
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
    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);
   if (isset($matches[1]) && $matches[1] != '0000000000000000')
   {
      $SID = $matches[1];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}

//Daten in *.csv schreiben - Anrufliste aktualisieren ------------------------
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=foncalls");
curl_exec($ch);
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 2);
//print_r($anrufliste);
$anrufliste = $anrufliste[1];
//print_r($anrufliste);
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);

curl_close($ch);

// Daten aus der *.csv lesen ----------------------------------------
$id = @fopen($filename, "r");
$i = 0;
while(($data = fgetcsv($id, filesize($filename), ";")) && $i < 100) //letzte Zahl ist die Anzahl der angezeigten Zeilen incl Head & leer
{
    $i++;
	 // die Spalte Nebenstelle ausblenden
	 unset($data[4]);

	 // erste Zeile einlesen
	 if ($data[0] == "Typ") $table[] = $data;

	 //Abgehende ausblenden
	 // if ($data[0] <> 3) $table[] = $data;

	 //Abgehende ausblenden + nur eine bestimmte Rufnummer
	 if ($data[0] <> 3)
	   {
	   //Filtern nach Rufnummer
	   //if ($data[5] == "Internet: 8814610") //funktioniert bringt aber Notice dass offset [5] nicht verfügbar

		//Filtern nach Rufnummer + Fehlerbehandlung
		if($data[0] != 3 && isset($data[5]) && $data[5] == "Internet: ".$TelNrW) // Zeile von RWN die die Notice verhindert.
	      {
			$table[] = $data;
	      }
		}
}
fclose($id);

// Daten in html-conformen String? schreiben und noch einige Anpassungen der Ausgabe ----------------
$str = "<table width='100%'align='center'>";
foreach($table as $row)
{
	 //Zeilenköpfe benutzerdefiniert anpassen
	 if ($row[0] == "Typ") $row[0] = "";
	 if ($row[2] == "Name") $row[2] = "von";
	 if ($row[3] == "Rufnummer") $row[3] = "Nummer";
	 if ($row[5] == "Eigene Rufnummer") $row[5] = "an";

	 //Typ Ziffern durch Icons ersetzen
    if ($row[0] == 1) $row[0] = "<img src=\"../user/icons/fixed/Callin.png\" title=\"eingehender Anruf\">";//Abgehende Anrufe ausblenden
    if ($row[0] == 2) $row[0] = "<img src=\"../user/icons/fixed/Callinfailed.png\" title=\"Anruf in Abwesenheit\">";
    if ($row[0] == 3) $row[0] = "<img src=\"../user/icons/fixed/Callout.png\" title=\"ausgehender Anruf\">";

	 // an Nummer durch Namen ersetzten
	 if ($row[5] == "Internet: ".$TelNrW) $row[5] = "Wolfgang";

    foreach($row as $data)
    $str.= '<td>'.$data.'</td>';
    $str.= "</tr>";
}
$str.= "</table>";
SetValue(22790 /*[FritzBox\Anrufliste_nachNr\FB_AnrLst_Wolf]*/ , $str);
//@fclose($id);

?>

Jetzt mache ich mich an die Reverssuche mit Klicktel.
Danke noch mal und

Nur mal so als Tip.

Dieses hier.

//Abgehende ausblenden + nur eine bestimmte Rufnummer 
     if ($data[0] <> 3) 
       { 
       //Filtern nach Rufnummer 
       //if ($data[5] == "Internet: 8814610") //funktioniert bringt aber Notice dass offset [5] nicht verfügbar 
 
        //Filtern nach Rufnummer + Fehlerbehandlung 
        if($data[0] != 3 && isset($data[5]) && $data[5] == "Internet: ".$TelNrW) // Zeile von RWN die die Notice verhindert. 
          { 
            $table[] = $data; 
          } 
        } 

kannst Du durch dieses ersetzten.

//Abgehende ausblenden + nur eine bestimmte Rufnummer
        //Filtern nach Rufnummer + Fehlerbehandlung
        if($data[0] != 3 && isset($data[5]) && $data[5] == "Internet: ".$TelNrW) // Zeile von RWN die die Notice verhindert.
             {
            $table[] = $data;
          }

es beinhaltet deine Abfrage von oben schon.

if($data[0] != 3

!= ist ungleich

if ($data[0] <> 3)

<> kleiner größer als

Ist von der Funktion das selbe nur eine andere Schreibweise.

Hallo Rainer,
danke für den Tipp und die Erklärungen. Deinen Tipp hatte ich auch schon vorher versucht umzusetzten hat aber nicht auf Anhieb funktioniert. Hab mich vermutlich irgend wo mit den Klammern vertan. Jetzt funktioniert alles wie ich’s mir für die ersten Ziele vorgestellt habe.
Hab mir Gedanken zur Reverssuche mit Klicktel gemacht. Wär’s nicht sinnvoll die Ergebnisse in die *.csv zu schreiben?
Was machen denn die Zeilen:
$anrufliste = explode(’;’, $anrufliste, 2);
$anrufliste = $anrufliste[1];
Ich habe die Erklärung aus php.net nicht verstanden. Die schreiben

Ist der Parameter limit angegeben und positiv, enthält das zurückgegebene Array maximal limit Elemente, wobei das letzte Element den Rest von string beinhaltet.

Wenn ich die o.g. Zeilen auskommentiere Sieht meine *.csv genau so aus wie mit den Zeilen.

Hallo zusammen,
habe mein Script zum Auslesen der Anrufliste jetz mal aufgeteilt um nicht immer alle Änderungen in den verschiedenen Scripts mit Filter wiederholen zu müssen.
Script zum Auslesen der FB und schreiben in die *.csv wird via Timer 20 Sek gestartet und funktioniert fehlerfrei.

Script zum auslesen der *.csv und anpassen der Kriterien Klicktel Reverssuche.

<?
//require_once("FB_AnrLst_toCsv.php"); // Liest die FB aus und schreibt die Daten in die AnruflisteA.csv; Timer 20 Sek.
require_once("FB_AnrLst_KlickTel.php"); // function callerName($vonTel)

$filename = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\AnruflisteA.csv";

// Daten aus der *.csv lesen ----------------------------------------
$id = @fopen($filename, "r");
$i = 0;
while(($data = fgetcsv($id, filesize($filename), ";")) && $i < 100) //letzte Zahl ist die Anzahl der angezeigten Zeilen incl Head & leer
{
    $i++;
	 // die Spalte Nebenstelle ausblenden
	 unset($data[4]);

	 // erste Zeile einlesen
	 if ($data[0] == "Typ") $table[] = $data;

	 //Filtern nach Rufnummer + Fehlerbehandlung
	 if(isset($data[5]) && $data[5] == "Internet: ".$TelNrW)
	 {
		$table[] = $data;
	 }
}
fclose($id);

// Daten in html-conformen String? schreiben und noch einige Anpassungen der Ausgabe ----------------
$str = "<table width='100%'align='center'>";
foreach($table as $row)
{
	 //eingene Vorwahl hinzufügen (zur Klicktelsuche) wenn Nr aus FB < 7 Ziffern
    if(strlen($row[3]) < 7) $row[3]= $TelVorw.$row[3];
    
	 //Zeilenköpfe benutzerdefiniert anpassen
	 if ($row[0] == "Typ") $row[0] = "";
	 if (isset($row[1]) && $row[1] == "Name") $row[1] = "von";
	 if (isset($row[3]) && $row[3] == "Rufnummer") $row[3] = "Nummer";
	 if (isset($row[5]) && $row[5] == "Eigene Rufnummer") $row[5] = "an";

	 //Typ Ziffern durch Icons ersetzen
    if ($row[0] == 1) $row[0] = "<img src=\"../user/icons/fixed/Callin.png\" title=\"eingehender Anruf\">";//Abgehende Anrufe ausblenden
    if ($row[0] == 2) $row[0] = "<img src=\"../user/icons/fixed/Callinfailed.png\" title=\"Anruf in Abwesenheit\">";
    if ($row[0] == 3) $row[0] = "<img src=\"../user/icons/fixed/Callout.png\" title=\"ausgehender Anruf\">";

	 // an Nummer durch Namen ersetzten
	 if (isset($row[5]) && $row[5] == "Internet: ".$TelNrW) $row[5] = "Wolfgang";
    if (isset($row[5]) && $row[5] == "Internet: ".$TelNrS) $row[5] = "Sonja";

	 //wenn Spalte Name leer ist, mit Einträgen aus KlickTel füllen. Script FB_AnrLst_KlickTel.php; Function: callerName($vonTel)
	 //$vonTel = $row[3];
	 //echo $vonTel." ";
	 if (isset($row[2]) && $row[2] == "")
		 {
		  $vonTel = $row[3];
		  echo $row[3]." ";
		  $row[2] = CallerName($vonTel);
		  //echo CallerName($vonTel);
		 }

	 foreach($row as $data)
    $str.= '<td>'.$data.'</td>';
    $str.= "</tr>";
}
$str.= "</table>";
SetValue(13943  /*[FritzBox\Anrufliste_Test\FB_AnrLst_Wolf_Neu]*/, $str);

?>

Habe vermutlich irgend einen Fehler beim verwenden des Rückgabewerts der KlickTel-Suche

<?
// Nummern ohne FB-TelBuchEintrag mit klicktel abgleichen
function callerName($vonTel)
{
$url_orig="http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=#TEL#";
$url=str_replace("#TEL#",$vonTel,$url_orig);

$handle=fopen("$url", "r");
if (!$handle)
{
   // error cannot open file
   echo("ERROR : CANNOT OPEN URL : '$url'
");
}

$lineNb = 0;
$searchTag0 = 'namelink';
$searchTag01 = '<strong>';
$searchTag02 = '</strong>';

$found = 0 ;
while(!$found && !feof($handle))
{
    $lineNb++;
    $buffer = fgets($handle);

    if (strpos($buffer, $searchTag0) != false)
    {
        //echo "Name gefunden in Zeile: ".$lineNb."
";
        $found = 1 ;

        $startLN = strpos($buffer, $searchTag01);
        $endeFN = strpos($buffer, $searchTag02) ;
        $name = substr($buffer, $startLN+8, $endeFN) ;
        $foundName1 = $name;
        //echo $name;
    }
    else {$foundName1 = "Unbekannt";}
}
fclose($handle);
$callerName = $foundName1;
//echo $callerName;
}

?>

Jedenfalls werden die Werte aus KlickTel nicht in die Spalte 3 $row[2] eingetragen.
Kann mir bitte jemand auf die Sprünge helfen?
Hat jemand einen Tipp?
Danke im Voraus,

Hat jemand einen Tipp?
Hatte ich schon mal geschrieben. Setz dir wenn es sein muss unter jede Zeile ein echo oder print_r. Dann siehst Du was wo klemmt. :wink:

Dann schau dir das nochmal genau an. Da kann nicht das selbe drinnen stehen. Hier wird in ein Array gesplittet.

curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
print_r($anrufliste);
$anrufliste = explode(';', $anrufliste, 2);
print_r($anrufliste);

Hallo Rainer,
danke für Deine Gedult …

$anrufliste = explode(’;’, $anrufliste, 2);
$anrufliste = $anrufliste[1];
print_r($anrufliste);

Ehrlich ausser der ersten Zeile „sep=;“ sind bei mir die Ergebnisse gleich. Die Ausgabe direkt nach der explode-Zeile ist wirklich anders. Kann es sein, dass da erst ein Array erstellt wird? In 2 Teile geteilt und die 2. Zeile wertet dann nur noch den 2. Teil aus?
Im screenshot siehst du was ich meine.

Das mit der Reverssuche hab ich jetzt auch hinbekommen. Hatte in der function kein return …

Danke noch mal und

Zwischenablage-1.png

Hallo Wolfgang,

Ehrlich ausser der ersten Zeile „sep=;“ sind bei mir die Ergebnisse gleich. Die Ausgabe direkt nach der explode-Zeile ist wirklich anders. Kann es sein, dass da erst ein Array erstellt wird? In 2 Teile geteilt und die 2. Zeile wertet dann nur noch den 2. Teil aus?

genauso ist es. Ansonsten, hättest Du das sep; noch mit in der Liste.