[Gelöst] Telefonbuch-Export

Theo Tintensich

Aktives Mitglied
Mitglied seit
10 Mrz 2008
Beiträge
2,219
Punkte für Reaktionen
105
Punkte
63
Hallo,

ich suche eine Möglichkeit, auf meinem Linux-Server das Telefonbuch meiner FB als XML-Datei zu exportieren.
Quasi automatisch das machen, was beim klicken auf "Telefonie => Telefonbuch => Sichern" passiert, und die XML-Datei auf dem Server abspeichern.

Ich habe irgendwie keine Scripte/Erklärungen etc. gefunden, die unter Linux laufen, und das Telefonbuch exportieren.
Zum importieren gibt es ja das "Geraffel" ;-) von SnoopyDog, ich will aber exportieren.

Die unter "Cisco" zu findende Sammlung, die das Telefonbuch exportiert und für ein 7940 bereit stellt, läuft ja auf der FB, ich will es aber auf einem anderen System laufen lassen.

Die Möglichkeit, die ich gefunden habe, exportiert nicht das Telefonbuch sondern die gesamte Seite,auf der das Telefonbuch angezeigt wird.
Ist also nicht brauchbar.

Ich will eine XML-Datei ;-)
Gibt es einen passenden Link dafür?
 
Zuletzt bearbeitet:
Abend

Naja, mit einem Link kann ich dir nicht dienen.
Aber den Ort wo das AVM Telefonbuch und die internen Nummern abgelegt werden:
/var/flash/phonebook
Dieser Zeiger auf einen beschreibaren Flashpeicherbereich beinhaltet das AVM Telefonbuch
und die Liste der internen Nummern in nicht wohlgeformten proprietären XML.

@Pikachu: Warst schneller ;)
 
Zuletzt bearbeitet:
Nicht ganz ;-)

Ich bekomme beim Aufruf von " php -f fritzbox_phonebook_export.php" die folgende Meldung auf die Console:
Code:
 php -f  fritzbox_phonebook_export.php
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : AttValue: " or ' expected in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in ..../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : attributes construct error in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : Couldn't find end of Start Tag META line 1 in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : Extra content at the end of the document in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 397
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 397
PHP Notice:  Trying to get property of non-object in .../fritzbox_api.class.php on line 400
PHP Notice:  Trying to get property of non-object in .../fritzbox_api.class.php on line 408
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : AttValue: " or ' expected in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : attributes construct error in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : Couldn't find end of Start Tag META line 1 in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): Entity: line 1: parser error : Extra content at the end of the document in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string(): <META HTTP-EQUIV=Refresh CONTENT="0; URL=/login.lua?requestedpage=../html/login_ in .../fritzbox_api.class.php on line 420
PHP Warning:  simplexml_load_string():                  ^ in .../fritzbox_api.class.php on line 420
PHP Notice:  Trying to get property of non-object in .../fritzbox_api.class.php on line 421
PHP Notice:  Trying to get property of non-object in .../fritzbox_api.class.php on line 423
Phonebook exported to .../exported_pb.xml

Die am Ende genannte xml-Datei ist da. aber leer.

In der Datei "fritzbox.conf.php" habe ich die benötigten Daten für meine FB eingetragen.

Das Linux-System ist ein Debian wheezy, 64bit.
Die folgenden PHP-Pakete sind installiert:
Code:
ii  libapache2-mod-php5                5.4.4-14+deb7u9                    amd64        server-side, HTML-embedded scripting language (Apache 2 module)
ii  php5                               5.4.4-14+deb7u9                    all          server-side, HTML-embedded scripting language (metapackage)
ii  php5-cli                           5.4.4-14+deb7u9                    amd64        command-line interpreter for the php5 scripting language
ii  php5-common                        5.4.4-14+deb7u9                    amd64        Common files for packages built from the php5 source
ii  php5-curl                          5.4.4-14+deb7u9                    amd64        CURL module for php5
ii  php5-gd                            5.4.4-14+deb7u9                    amd64        GD module for php5
ii  php5-mcrypt                        5.4.4-14+deb7u9                    amd64        MCrypt module for php5
ii  php5-mysql                         5.4.4-14+deb7u9                    amd64        MySQL module for php5
ii  php5-xcache                        2.0.0-4                            amd64        Fast, stable PHP opcode cacher
ii  phpmyadmin                         4:3.4.11.1-2                       all          MySQL web administration tool
ii  zendframework                      1.11.13-1.1                        all          powerful PHP framework

Fehlt irgend ein PHP-Paket?
Bei einer anderen Anwendung funktioniert "simplexml_load_string" problemlos.
 
Hallo Theo,

habe das ganze auch gerade auf meiner Fritte versucht und bekomme die gleichen Fehler bzw. habe das gleiche Problem.

Bist Du weiter gekommen?
Gibt es eine andere Möglichkeit?

Denangegebenen Pfad erreiche ich ja nirgends.
 
Auch wenn der Thread hier schon ein wenig älter ist, will ich noch eine Methode aufzeigen, wie man in einer Telnet-Session exakt das Export-Format des Telefonbuch aus der Weboberfläche speichern lassen kann, ohne dazu das Webinterface bemühen zu müssen.

Ein einfacher Aufruf von
Code:
pbd --exportbook [I]index[/I]
erstellt eine Datei /var/tmp/pdb.export für das angegebene Telefonbuch (numerischer Index, entsprechend der Auswahl der Telefonbücher im GUI). Diese hat - wenn ich das richtig gesehen habe - das Format des "normalen" Exports.

Wenn man lieber alle Telefonbücher auf einmal hätte, nimmt man
Code:
pbd --export
und die Datei enthält dann eben mehrere "phonebook"-Entities.

Das ist in Ansätzen schon in whmf beschrieben (bis zur 7270).

Das läßt sich dann ggf. mit einem passenden Skript auch mit einem Telnet-Daemon kombinieren ... wir reden hier immer noch über originale AVM-Firmware (auch noch nach 06.23, wo 'nc' ja entfernt ist), natürlich hat man beim Nachladen eigener Binaries noch viel mehr Möglichkeiten.
 
Das ist sehr praktisch. Ein Dankeschön dafür von mir.

Beispiel:
pbd --exportbook 0
Ergebnis in: /var/tmp/pbd.export
...fürs 1. Standard AVM Telefonbuch
...ein nichtexistenter Index erzeugt ein leeres wohlgeformtes Telefonbuch in /var/tmp/pbd.export.
...würde sich durch Import zum Telefonbuchlöschen eignen (Alle auf einmal).
 
Zuletzt bearbeitet:
Eine weitere Möglichkeit für den Download des Telefonbuchs wäre dann der analoge Aufruf zum Auslesen der Anrufliste:

http://fritz.box:49000/phonebook.lua?sid=<sid>&pbid=<phonebook_index>
bzw.
https://fritz.box:49443/phonebook.lua?sid=<sid>&pbid=<phonebook_index>

Hier kann man dann auch die konfigurierten Online-Telefonbücher auslesen (IDs ab 240, wenn ich das richtig sehe).

Zusätzlich läßt sich mit einem "timestamp=<linux_timestamp>"-Parameter die Ausgabe beschränken ... wenn das Telefonbuch seit dem angegebenen Zeitpunkt nicht modifiziert wurde, wird nur ein Kommentar "<!-- not modified -->" anstelle der Kontakte im Telefonbuch ausgegeben.

Das dort verwendete XML-Format weicht allerdings vom Export-Format ab ... in meinen Augen hat es trotzdem einige entscheidende Vorteile ggü. dem anderen Format. In einem Online-Telefonbuch sind bei mir z.B. auch sämtliche gültigen internen Rufnummern enthalten und bei einer falschen pbid (wenn man sie nur wegläßt, erzeugt das einen Fehler 402) werden als Kommentar im XML-File die "known ids" aufgelistet.
 
Fürs Onlinetelefonbuch ist übrigens pbupd zuständig, der überschreibt auch die /var/tmp/pbd.export.
..von Zeit zu Zeit.
 
Ja, der macht aber eigentlich nur die Synchronisation. Ansonsten sind für den pbd die Dateinamen "pbd.export" und "pbd.import" eben nur temporäre Dateien (in /var/tmp) und müssen immer unmittelbar im Anschluß verarbeitet werden. Selbst der Export des Telefonbuchs über das GUI (über firmwarecfg) schreibt eine neue pbd.export, gibt diese aus und löscht sie dann wieder (so "ordentlich" ist da das firmwarecfg-Binary).

Ich bin bei der Analyse der App-Schnittstellen über diese (eben nicht per TR-064-Servicedescription beschriebenen) Funktionen gestolpert und habe bisher dafür auch noch keine Dokumentation gefunden. Ich vermute mal, die wurden von AVM für die Verwendung durch die FRITZ!Fon-Apps eingebaut und auch nicht weiter dokumentiert. Neben Telefonbuch und Anrufliste gibt es noch eine Liste der AB-Nachrichten und eine weitere Datei "tr064.lua", deren Zweck wohl in der Prüfung der "Phone"-Rechte für den angegebenen Account liegt.

Und da immer wieder mal die Frage nach den Voraussetzungen für die FRITZ!Fon-App auftaucht und dort offenbar ein etwas anderes Rechtekonzept zum Einsatz kommt, als bei der normalen TR-064-Schnittstelle (da dürfen sich offenbar nur "Admins" zu schaffen machen, während die anderen Funktionen, die ich hier untersuche, auch "nur" mit Phone-Rechten funktionieren), dachte ich mir, daß das mal einen zweiten Blick lohnt.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.