Telefonbuch anzeige auf eigenem Webserver

Aus Zebradem WIKI
Zur Navigation springenZur Suche springen

Das Board mit Freiheiten





Zebradem AVM Wiki >> Fritzbox Tipps & Tricks >> Telefonbuch anzeige auf eigenem Webserver Magyar, Nederlands, Italiano, English
Community Modelle Freetz Fritzbox Tipps & Tricks

Hardware-Tipps System-Tipps Netzwerk-Tipps Telefonie-Tipps Software-Tipps Sonstige Tipps

Telefonbuch anzeige auf eigenem Webserver (lokal)

Es ist im Grunde eine ganze Website, die eine Anruferliste ausgibt und die Nummern gleich zu Namen sortiert, die im Telefonbuch eingetragen sind. Das Telefonbuch kann auch separat angezeigt werden. Das Script läuft bei mir momentan auf dem Abyss Webserver, kann aber auch unter Xampp oder einem anderen Server laufen, sollte nur Zugriff auf FritzBox haben (über http). Das komplette Script besteht aus 3 Dateien:

telefon.pl

#!/usr/bin/perl

use CGI qw/:standard/;

# Create a user agent object
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->agent("Telefonbuch");

sub get_content{
 # Create a request
    my $req = HTTP::Request->new(GET => "http://fritz.box/cgi-bin/webcm?getpage=../html/menus/menu2.html&var:menu=fon&var:pagename=foncalls&var:pagetitle=Anrufliste");
    # Pass request to the user agent and get a response back
    my $res = $ua->request($req);

    # Check the outcome of the response
    if ($res->is_success) {
        return $res->content;
    }
}

sub get_phonebook{
	my %telbook = ();
	return () unless(open(IN, "<", "telefonbuch.dat"));

	while(<IN>){
		chomp;
		@elements = split("=",$_,2);

		$telbook{$elements[0]} = $elements[1];
	}
	close(IN);

	return %telbook;
}

sub uiDauerDisplay{
	my $h = int($_[0]/3600);
	my $rest = $_[0] % 3600;
        my $m = int($rest/60);

	$h = "0".$h if($h < 10);
	$m = "0".$m if($m < 10);

	my $str = $h.":".$m;

	return $str;
}

sub interpret{
	my ($page, $filter) = @_;

	my %pictures = (1 => "images/callin.png",
		       	2 => "images/callfailed.png",
			3 => "images/callout.png");

	my %telbook = &get_phonebook;

       	my $i = 0;

	while ($page =~ m/class="Dialoglist".*?uiCallSymbol\("(\d)"\).*?"c3">(.*?)<.*?nummerDisplay\("(\d*)"\).*?DauerDisplay\("(\d+)"\)/gs) {

		next if ($filter and $filter != $1);

		my $time = &uiDauerDisplay($4);
		my $witharea = (substr ($3, 0, 1) ne "0" ? "0951".$3 : $3);

		print Tr(td({-class=>"line$i"}, [
			"<img src='$pictures{$1}' />",
			$2,
			a({-href=>"buch.pl?act=edit&nr=$witharea"},$3),
			$telbook{$witharea},
			$time
			])),"\n";

		$i = 1 - $i;
	}
}
print	header,
	start_html(-title=>'Anruferliste',
		   -style=>{'src'=>'style.css'}),
	h1({-align=>'center'},"Anruferliste");
print	"<center>\n",
	a({-href=>'buch.pl'},"Zum Telefonbuch"),p,
	"Anrufe anzeigen: ",
	a({-href=>"?"},"alle")," ",
	a({-href=>"?filter=1"},"eingehende")," ",
	a({-href=>"?filter=2"},"eingehende in Abwesenheit")," ",
	a({-href=>"?filter=3"},"ausgehende"),
	"</center>";

print	"<table align='center' cellspacing='0' cellpadding='0' style='font-size: small; font-family: verdana'>";
&interpret(&get_content, param("filter"));
print	"</table>";
print	end_html();

buch.pl

use CGI qw/:standard *table/;

sub get_telbook {
	# mit get_telbook(1) werden die namen als hashkeys benutzt
	my %telbook = ();
	return () unless(open(IN, "<", "telefonbuch.dat"));

	while(<IN>){
		chomp;
		@elements = split("=",$_,2);
		$telbook{$elements[$_[0]]} = $elements[1-$_[0]];
	}
	close(IN);

	return %telbook;
}

sub write_telbook {
	my %telbook = %{$_[0]};

	unless (open(OUT, ">", "telefonbuch.dat")) {
		print b("Konnte die Datei telefonbuch.dat nicht zum Schreiben öffnen\n");
		return;
	}

	foreach $nr (keys %telbook) {
		next unless ($nr and exists($telbook{$nr}));
		print OUT $nr."=".$telbook{$nr}."\n";
	}

	close (OUT);
}

sub add_to_telbook {
	unless (open(OUT, ">>", "telefonbuch.dat")) {
		print b("Konnte die Datei telefonbuch.dat nicht zum Schreiben öffnen\n");
		return;
	}

	print OUT $_[0]."=".$_[1]."\n";

	close (OUT);
}




print	header;
print	start_html(-title=>'Telefonbuch',
		   -style=>{'src'=>'style.css'});
print	h1({-align=>center},"Telefonbuch");
print	"<center>".a({-href=>'telefon.pl'}, "Zur Anruferliste")."</center>".br;

$act = param("act");

if (param("change") and param("old_nr") and param("name") and param("nr")) {
	%telbook = &get_telbook;
	delete $telbook{param("old_nr")};
	$telbook{param("nr")} = param("name");
	&write_telbook (\%telbook);
}
elsif (param("add") and param("name") and param("nr")) {
	&add_to_telbook (param("nr"), param("name"));
}

print	"<table align='center' cellspacing='0' cellpadding='0' style='font-size: small; font-family: verdana'>";

if ($act eq "edit") {
	if (($nr = param("nr"))) {
		%telbook = &get_telbook;
		$name = $telbook{$nr};
	}

	print start_form(-action=>'?'), hidden('old_nr', $nr);
	print Tr([td({-class=>'line0'},['Name:', textfield('name', $name)]),
		  td({-class=>'line1'},['Nummer:', textfield('nr', $nr)]),
		  td({-class=>'line0'},[submit(($name ? 'change' : 'add'),'Speichern'),''])]);
	print end_form;
} else {
	$i = 0;
	%telbook = &get_telbook(1);

	foreach $name (sort keys %telbook) {
		print Tr(td({-class=>"line$i"},[a({-href=>'?act=edit&nr='.$telbook{$name}},$name), $telbook{$name}]));
		$i = 1 - $i;
	}

}

print	"</table>";
print	end_html();

und einer telefonbuch.dat die so aussieht:

9605748392=Max Mustermann
34546456=Susanne Schmitt

eine style.css um das ganze seinen look zu geben:

.line0{ padding-left:10px; padding-right:10px; background-color:#dddddd; }
.line1{ padding-left:10px; padding-right:10px; background-color:#eeeeee; }
a { color: #000000; }


Quellenangaben

http://www.wehavemorefun.de/fritzbox/

Wichtige Links