.titleBar { margin-bottom: 5px!important; }

[Gelöst] xml Parser ohne Freetz

Dieses Thema im Forum "FRITZ!Box Fon: Modifikationen" wurde erstellt von disorganizer, 14 Feb. 2012.

  1. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    #1 disorganizer, 14 Feb. 2012
    Zuletzt bearbeitet: 17 Feb. 2012
    Gibt es für die Fritzbox ohne Freetz eigentlich einen XML-Parser den man von einem shellscript aus verwenden kann um XML-Files auszuwerten?

    Oder in Freetz so das man diesen als Binary auf der ungefreetzten Box verwenden kann?
     
  2. er13

    er13 Aktives Mitglied

    Registriert seit:
    20 Dez. 2005
    Beiträge:
    953
    Zustimmungen:
    13
    Punkte für Erfolge:
    18
    Ich weiß ehrlich gesagt nicht, was Du Dir unter einem XML-Parser vorstellst, "den man von einem Shellscript aus verwenden kann", aber ein Programm, mit dem man XML-Files "auswerten" kann, gibt es in freetz - xsltproc. Seit r8640 kann man dieses auch statisch linken, so dass Du es auch auf einer ungefreetzten Box verwenden kannst.

    p.s. Für einfache Aufgaben könnten schon grep/sed/awk ausreichen.
     
  3. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Das hängt damit zusammen.
    Eventuell würde ein solcher ja ausreichen um auch das phonebook auszuwerten.
    Es geht im Prinzip dabei darum das fritzbox phonebook zum umzuwandeln das man es z.B. für Cisco Phones als Phonebook verwenden kann.

    Was bedeutet "statisch linken" genau bzw wie bekomme ich das in Freetz gemacht?
     
  4. er13

    er13 Aktives Mitglied

    Registriert seit:
    20 Dez. 2005
    Beiträge:
    953
    Zustimmungen:
    13
    Punkte für Erfolge:
    18
    Vereinfacht gesagt bedeutet das, dass Du ein Binary bekommst, welches von keiner weiteren Library (Datei) abhängt. D.h. es reicht dieses eine Binary zu nehmen und es auf die Box zu kopieren, Du brauchst kein freetz zu installieren und sonst keine weitere Datei zu kopieren.

    Ich kenne das Format des Telefonbuchs nicht wirklich, denke aber, dass es so einfach ist, dass man Dein Problem auch mit grep/sed/awk lösen kann.

    p.s. Eine andere Frage: muss das Ganze wirklich auf der Box geschehen, kann man nicht die xml-Datei auf den PC kopieren und sie dort umwandeln? grep/sed/awk werden als Ersatz für einen echten Parser deswegen akzeptiert, weil sie die Resoursen der Box schonen werden und das Ganze ermöglichen, ohne dass man zusätzliche Binaries auf die Box kopieren muss, aber auf dem PC hat man das Problem nicht und kann alles mögliche verwenden.
     
  5. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Warum fängst Du dann hier einen neuen Thread an?
     
  6. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Man nennt so was glaube ich Fehler. Und die sind menschlich.
    Dazu ist das Thema hier spezifischer. Zumindest rede ich mir so den Fehler schön.

    Die Frage war eher so zu verstehen: Wie mache ich das bei Freetz statisch?

    Problem ist das es alles in einer Zeile steht. Ich habe das nicht wirklich hinbekommen (wie gesagt mit meinen bescheidenen Kenntnissen). Aber ja, das wäre mir auch am liebsten.

    Wäre gut, da das ganze Live passieren soll oder automatisch ein mal pro Tag. Sonst könnte ich das auch manuell umwandeln.
    Ein PC soll nicht unbedingt immer an sein dafür (Stichwort Stromverbrauch).
     
  7. RalfFriedl

    RalfFriedl IPPF-Urgestein

    Registriert seit:
    22 Apr. 2007
    Beiträge:
    12,343
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hast Du denn ein Beispiel dafür, wie die Datei aussieht? Mit sed kann man eine Menge machen.
    Wenn einem danach ist, könnte man vermutlich einen kompletten XML-Parser in Shell-Skript schreiben, aber häufig reicht es auch schon, eine bestimmte Teilmenge lesen zu können.
     
  8. Joe_57

    Joe_57 IPPF-Promi

    Registriert seit:
    5 März 2006
    Beiträge:
    5,001
    Zustimmungen:
    47
    Punkte für Erfolge:
    48
    Schaut doch bitte mal in den Thread Contact Conversion Wizard.
    Die Leute da haben das XML-Telefonbuch der FritzBox offensichtlich komplett analysiert.
    Vielleicht muss man dann das Rad nicht neu erfinden.

    Joe
     
  9. er13

    er13 Aktives Mitglied

    Registriert seit:
    20 Dez. 2005
    Beiträge:
    953
    Zustimmungen:
    13
    Punkte für Erfolge:
    18
    #9 er13, 15 Feb. 2012
    Zuletzt bearbeitet: 16 Feb. 2012
    Versuch mal das angehängte Skript. Auf meiner gefreetzten Box bekomme ich damit mein Telefonbuch ausgegeben.

    Indem Du in menuconfig unter "Package Selection/Testing/xsltproc" die Option "create statically linked binary" aktivierst
     

    Anhänge:

  10. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    #10 disorganizer, 16 Feb. 2012
    Zuletzt bearbeitet: 16 Feb. 2012
    WOW. Das Script funktioniert (ohne Telefonbuchauswahl zwar, aber dennoch).
    Einzig am ende bleibt noch ein
    übrig. Das kann ich ja aber mit grep wegbekommen :)

    Wenn es nicht zu unverschämt ist... Könntest du den Erklärbär spielen für das Script?

    Du definierst die Patterns oben für die 3 möglichen Eintragsvarianten (1 Nummer, 2 Nummern, 3 Nummern am Realname).
    Danach definierst du die Ausgabe so das daraus 3 Einträge werden.

    Aber erklär mir mal die Anderen Zeilen :)

    EDIT:
    Zu früh gefreut.
    Das Script wirft einige Telefonnumern durcheinander. Mal schauen ob ich ein Muster herausfinde.
     
  11. er13

    er13 Aktives Mitglied

    Registriert seit:
    20 Dez. 2005
    Beiträge:
    953
    Zustimmungen:
    13
    Punkte für Erfolge:
    18
    #11 er13, 16 Feb. 2012
    Zuletzt bearbeitet: 16 Feb. 2012
    Könntest Du mir bitte Dein Telefonbuch (obfuscated) zur Verfügung stellen, d.h. cat /var/flash/phonebook > irgendeinName.xml und dann alle Namen und Nummern durch Dummies ersetzen, ohne jedoch an der Struktur der Datei, etwas zu ändern (d.h. keine neuen Newlines, die vorhanden auch bitte nicht entfernen). Ich versuche das Skript so anzupassen, dass es auch mit Deinem Telefonbuch umgehen kann und dann erkläre bei Bedarf Zeile für Zeile was es macht ;-)

    Mein Telefonbuch enthält nur so um die 30 Einträge, sodass es nicht wirklich zum Testen geeignet ist.

    Falls es Dir zu viel Aufwand ist, alles zu obfuscaten, kannst die Datei mir auch per PN zukommen lassen. Ich verspreche, sie wirklich nur zum Testen zu verwenden und danach sofort zu löschen ;-)
     
  12. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    #12 disorganizer, 16 Feb. 2012
    Zuletzt bearbeitet: 16 Feb. 2012
    Habe es soweit auch selbst hinbekommen nachdem ich das Script verstanden habe :)
    Anbei nun das "upgedatete" Script.

    Im Prinzip war es nur das dort auch noch
    Code:
    <contact
    modified="0">
    Vorkommt und am ende noch ein
    Code:
    <contact><category /><person><realName>ISDN/DECT Rundruf</realName></person><telephony><number>50</number></telephony><services /><setup /><mod_time>66</mod_time><uniqueid>4</uniqueid></contact>
    Welches von der box sinnigerweise nicht als intern markiert wird.
    Der Eintrag wird von meinem "mod" nun erkannt idem ich zusätzlich noch Nummern ohne Numer-Type eintrage.
    Geht bestimmt eleganter, aber geht :)

    Was noch fehlt ist die phonebooks zu filtern.
    Also z.B. nur das zu berücksichtigen was zwischen
    Code:
    <phonebook owner="1" name="xxxxx">
    und
    Code:
    </phonebook>
    steht. Man könnte das ja als Übergabeparameter machen (den Phonebooknamen) und wenn keiner angegeben wurde alles nehmen.

    Wenn noch interesse besteht kann ich dir das Phonebook auch schicken.

    EDIT:
    Version 2.01 noch mit einem gefixten minibug (50 wurde beim Rundrufeintrag nich als Dial sondern als Type ausgegeben)
    EDIT2:
    Todo wäre auch noch ÄÖÜ zu ersetzen durch die passenden Codes für Cisco oder Ae usw.

    EDIT3:
    Es werden immer noch ein paar Telefonnummern ausgelassen.
    Ich versuch den Fehler zu finden, wenn nicht schicke ich dir einfach mal die phonebook im original zu.

    Wenn man per pdb --export eine /tmp/pbd.export erstellt sind die internen nummer übrigens (Inklusive DECT Rundruf) alle weg.
    Diese wäre auch weg wenn man das Phonebook selektiert, denn diese sind in einem eigenen Phonebook mit owner 255 gespeichert.
     

    Anhänge:

  13. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Kleine aber Feine Änderungen am script:
    1) pbd --export
    Erzeugt die temporäre Datei (ohne interne nummern).
    ==> ein paar Greps weniger
    2) Telefonbuchunterstützung
    Wird ein Telefonbuchname als Parameter an das Script übergeben dann wird nur das angegebene Telefonbuch ausgegeben.
    3) Fehler in SED contact regex behoben

    Also mit meinem exportierten Telefonbuch geht es jetzt.
     

    Anhänge:

  14. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
  15. er13

    er13 Aktives Mitglied

    Registriert seit:
    20 Dez. 2005
    Beiträge:
    953
    Zustimmungen:
    13
    Punkte für Erfolge:
    18
    Ne, es freut mich, dass der Denkanstoß ausgereicht hat und ich selbst nichts mehr machen muss ;-) Frohes schaffen...
     
  16. disorganizer

    disorganizer Neuer User

    Registriert seit:
    14 Mai 2010
    Beiträge:
    83
    Zustimmungen:
    0
    Punkte für Erfolge:
    6
    Duch das Script von dir habe ich extrem viel über SED gelernt :) Deswegen nochmal ein extra tnx.