{"id":6871,"date":"2016-03-30T20:51:49","date_gmt":"2016-03-30T18:51:49","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=6871"},"modified":"2021-11-22T17:14:16","modified_gmt":"2021-11-22T16:14:16","slug":"fritzbox-telefonbuch","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=6871","title":{"rendered":"Fritzbox Telefonbuch (Phonebook) mit Java bearbeiten via JDom und SAXBuilder"},"content":{"rendered":"<p>Wer eine Fritzbox hat, kann dort auch Telefonb\u00fccher anlegen, so das beim Anruf eine E-Mail versendet wird. Bei mir wird bei Anruf auch eine Pushover Nachricht auf das Handy gesendet und der Name und die Nummer mit openHAB via Karotz angesagt, so das ich schon h\u00f6ren kann, wer anruft.<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritz.png\" rel=\"attachment wp-att-6875\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritz.png\" alt=\"fritz\" width=\"640\" height=\"453\" class=\"aligncenter size-full wp-image-6875\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritz.png 640w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritz-300x212.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><br \/>\nDas l\u00e4uft \u00fcber das openHab <a href=\"https:\/\/github.com\/gitbock\/fritzboxtr064\/tree\/master\/src\/main\/java\/org\/openhab\/binding\/fritzboxtr064\" target=\"_blank\" rel=\"noopener\">Fritzbox 064 Binding<\/a> ganz gut. Von dem Bindig wird aber bisher nur das erste Telefonbuch aus der Fritzbox ausgelesen. Wer ein anderes benutzt muss die Daten exportieren und in dem ersten Telefonbuch wiederherstellen, da es keine l\u00f6schen Funktion in der Fritzbox gibt.<\/p>\n<p>Bei mir war noch das Problem, das viele Telefonnummern (\u00fcber 600) Blanks, Bindestriche und Klammern enthielt. Z.B. (0)511-123 456 und die wird bisher in dem Binding nicht erkannt. Deshalb habe ich einen kleinen Konverter geschrieben, der alle Blanks, (,),- l\u00f6scht und auch alle Nr. die kein +49 haben und mit 0 beginnen mit dem g\u00fcltigen prefix +49 ohne 0 erg\u00e4nzt. Weitere Regeln k\u00f6nnen leicht angepasst werden.<\/p>\n<p>In diesem Java Programm, kann man auch sehen, wie mit einem SAXBuilder ein JDom Dokument erzeugt gelesen und ver\u00e4ndert werden kann. Hier das Programm:<!--more--><\/p>\n<pre class=\"lang:java decode:true \" >\r\npackage de.wenzlaff.phonebook;\r\n\r\nimport java.io.File;\r\nimport java.io.FileWriter;\r\nimport java.util.List;\r\n\r\nimport org.jdom2.Document;\r\nimport org.jdom2.Element;\r\nimport org.jdom2.input.SAXBuilder;\r\nimport org.jdom2.output.Format;\r\nimport org.jdom2.output.XMLOutputter;\r\n\r\n\/**\r\n * Fritzbox Phonebook (http:\/\/www.wehavemorefun.de\/fritzbox\/Phonebook) bearbeiten.\r\n * \r\n * Bearbeitet alle Telefonnummern:\r\n * \r\n * Entfernt: blank, (, ) - also aus (0)511 23456-78 wird 05112345678 und alle Telefonnummern die ohne +49 f\u00fcr Deutschland und mit 0 starten werden\r\n * \r\n * zu +49 ohne 0 also z.B. aus 051123456 wird +4051123456\r\n *\r\n * Diese Abh\u00e4ngigkeit wird ben\u00f6tigt.\r\n * \r\n * &lt;pre&gt;\r\n         &lt;dependency&gt;\r\n            &lt;groupId&gt;org.jdom&lt;\/groupId&gt;\r\n            &lt;artifactId&gt;jdom&lt;\/artifactId&gt;\r\n            &lt;version&gt;2.0.2&lt;\/version&gt;\r\n        &lt;\/dependency&gt;\r\n * &lt;\/pre&gt;\r\n *\r\n * @author Thomas Wenzlaff http:\/\/www.wenzlaff.info\r\n * @version 0.1\r\n *\/\r\npublic class Converter {\r\n\r\n\tprivate static final String HILFE = \"Aufruf: de.wenzlaff.phonebook.Converter [Fritzbox Phonebook Datei Name] [output Datei Name]\";\r\n\r\n\t\/**\r\n\t * Startmethode. Aufruf de.wenzlaff.phonebook.Converter [input Datei Name] [output Datei Name]\r\n\t * \r\n\t * @param args\r\n\t *            Aufruf: [input Datei Name] [output Datei Name]\r\n\t * @throws Exception\r\n\t *             bei Fehler\r\n\t *\/\r\n\tpublic static void main(String[] args) throws Exception {\r\n\r\n\t\tif (args.length != 2) {\r\n\t\t\tSystem.err.println(HILFE);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tString inputDatei = args[0];\r\n\t\tString outputDatei = args[1];\r\n\r\n\t\tif (inputDatei.isEmpty() || outputDatei.isEmpty()) {\r\n\t\t\tSystem.err.println(HILFE);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tFile inDatei = new File(inputDatei);\r\n\t\tif (!(inDatei.isFile() &amp;&amp; inDatei.canRead())) {\r\n\t\t\tSystem.err.println(\"Fritzbox Phonebook Datei kann nicht gelesen werden. \" + HILFE);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tFile ausDatei = new File(outputDatei);\r\n\r\n\t\tSystem.out.println(\"Starte das einlesen der Fritzbox Phonebook \" + inDatei.getAbsolutePath() + \" Datei und schreibe in Datei \" + ausDatei.getAbsolutePath());\r\n\r\n\t\tDocument dokument = new SAXBuilder().build(inDatei);\r\n\t\tElement rootPhoneBooks = dokument.getRootElement();\r\n\r\n\t\tint count = 0;\r\n\r\n\t\tList&lt;Element&gt; phonebooks = rootPhoneBooks.getChildren(\"phonebook\");\r\n\t\tfor (Element phonebook : phonebooks) {\r\n\t\t\tList&lt;Element&gt; contacts = phonebook.getChildren(\"contact\");\r\n\t\t\tfor (Element contact : contacts) {\r\n\t\t\t\tList&lt;Element&gt; telephonys = contact.getChildren(\"telephony\");\r\n\t\t\t\tfor (Element nummern : telephonys) {\r\n\t\t\t\t\tList&lt;Element&gt; numbers = nummern.getChildren(\"number\");\r\n\t\t\t\t\tfor (Element number : numbers) {\r\n\t\t\t\t\t\tbearbeiteTelefonNummer(number);\r\n\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tXMLOutputter xmlOutput = new XMLOutputter();\r\n\t\txmlOutput.setFormat(Format.getPrettyFormat());\r\n\t\txmlOutput.output(dokument, new FileWriter(ausDatei));\r\n\t\tSystem.out.println(\"Umwandlung von \" + count + \" Telefonnummern beendet. Ergebnis in \" + ausDatei.getAbsolutePath());\r\n\t}\r\n\r\n\tprivate static void bearbeiteTelefonNummer(Element number) {\r\n\t\tString orginalNr = number.getText();\r\n\t\t\/\/ Entferne: blank, (, ) -\r\n\t\tString neueNr = orginalNr.replaceAll(\" \", \"\").replaceAll(\"\\\\(\", \"\").replaceAll(\"\\\\)\", \"\").replaceAll(\"-\", \"\");\r\n\t\t\/\/ alle Nummern die ohne +49 f\u00fcr Deutschland und mit 0 starten werden zu +49 ohne 0\r\n\t\tString ergebnisNr = \"\";\r\n\t\tif (!neueNr.startsWith(\"+\") &amp;&amp; neueNr.startsWith(\"0\")) {\r\n\t\t\tergebnisNr = \"+49\" + neueNr.substring(1, neueNr.length());\r\n\t\t}\r\n\t\tnumber.setText(ergebnisNr);\r\n\t}\r\n\r\n}<\/pre>\n<p>Das vorhandene Telefonbuch in der Fritzbox \u00fcber <strong>Telefonie-Telefonbuch-Sichern<\/strong> dann mit dem <strong>Converter<\/strong> bearbeiten und wieder importieren \u00fcber <strong>Telefonie-Telefonbuch-Wiederherstellen<\/strong> wie hier gezeigt:<\/p>\n<p><a href=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritzbox.png\" rel=\"attachment wp-att-6873\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritzbox-1024x636.png\" alt=\"fritzbox\" width=\"640\" height=\"398\" class=\"aligncenter size-large wp-image-6873\" srcset=\"http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritzbox-1024x636.png 1024w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritzbox-300x186.png 300w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritzbox-768x477.png 768w, http:\/\/blog.wenzlaff.de\/wp-content\/uploads\/2016\/03\/fritzbox.png 1570w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Wer will kann das komplette <a href=\"https:\/\/github.com\/IT-Berater\/Fritzbox-Adressbuch\" target=\"_blank\" rel=\"noopener\">Java Projekt IT-Berater\/de.wenzlaff.phonebook<\/a> auch von Github clonen.<\/p>\n<p>Noch eine Idee?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer eine Fritzbox hat, kann dort auch Telefonb\u00fccher anlegen, so das beim Anruf eine E-Mail versendet wird. Bei mir wird bei Anruf auch eine Pushover Nachricht auf das Handy gesendet und der Name und die Nummer mit openHAB via Karotz angesagt, so das ich schon h\u00f6ren kann, wer anruft. Das l\u00e4uft \u00fcber das openHab Fritzbox &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=6871\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eFritzbox Telefonbuch (Phonebook) mit Java bearbeiten via JDom und SAXBuilder\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,4,2469,5,2426,79,7],"tags":[2461,1113,1046,324,2462],"class_list":["post-6871","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-eclipse","category-github-projekte","category-java","category-openhab","category-programmierung","category-tools","tag-converter","tag-fritz","tag-fritzbox","tag-github","tag-telefonbuch"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/6871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6871"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/6871\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6871"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}