Telefonbuch von Agfeo AS Telefonanlage nach VCF / vCard konvertieren

Telefonanlagen mit einem internen Telefonbuch erlauben das leichte Anwählen und Erkennen von Anrufenden auf den verbundenen Systemtelefonen und innerhalb der Software des Anlagenherstellers. Doch was ist zu machen, wenn das Telefonbuch mit ein paar Hundert Kontakten in ein anderes System übertragen werden soll, was den VCF / vCard Standard zum Import der Daten verwendet? Zum Konvertieren des Agfeo AS Telefonbuchs nach VCF kann das folgenden Skript verwendet werden. Der Export des Telefonbuchs einer aus der Telefonanlage ist nach dem Schema

"005"	"John Doe"	"0123456789"	"geschäftlich/Festnetz"	"1"	"0"	"005"	"1"
"005"	"John Doe"	"0123344556"	"geschäftlich/Fax"	"0"	"0"	"185"	"0"
"006"	"Max Muster"	"01701234567"	"geschäftlich/Mobil"	"1"	"0"	"009"	"1"
"006"	"Max Muster"	"01122334455"	"geschäftlich/Festnetz"	"0"	"0"	"074"	"0"
...

aufgebaut. In der ersten Spalte steht eine Art ID für den jeweiligen Kontakt. Gleiche IDs gehören also zum selben Kontakt. Die Zahlen in den letzten vier Spalten definieren vermutlich die Standardrufnummer des Kontakts und ordnen den Kontakt im System zu. Diese vier Spalten werden hier nicht weiter benötigt.

Ziel war es, diese Kontakte in eine .vcf beziehungsweise vCard-Datei umzuwandeln, um sie dann in eine OwnCloud zu importieren. Als .vcf-Datei können die Kontakte der Agfeo AS Anlage auch nach Outlook und zu vielen anderen Programmen übernommen werden.

Ich habe dazu ein PHP Skript geschrieben, welches die Datensätze ausliest, zusammenfügt und eine einzelne VCF-Datei mit allen Kontakten ausgibt. Das Skript kann so direkt auf einem PHP-fähigem Webserver ausgeführt werden und verwendet als Eingabe die Datei export.txt aus dem selben Verzeichnis. Meine Exportdatei war ISO-8859-1 codiert, daher wird zum Einlesen hier keine UTF-8 Codierung verwendet.

<?php
//Converts Agfeo AS Telefonbuch to VCF
function file_get_contents_utf8($fn) {
    $content = file_get_contents($fn);
    return mb_convert_encoding($content, 'UTF-8',
        mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

$file = file_get_contents_utf8("export.txt");
$arrayLines = explode("\n", $file);

$contacts = array();
foreach ($arrayLines as &$line) {
    preg_match_all('"([^\\"]+)"', $line, $results);
    $contacts[] = array(
        "id" => $results[0][0],
        "name" => $results[0][2],
        "number" => $results[0][4],
        "type" => $results[0][6]
    );
}

$IDs_unique = [];
foreach($contacts as $value) {
    if(!in_array($value["id"], $IDs_unique)) {
        $IDs_unique[] = $value["id"];
    }
}


foreach($IDs_unique as $id) {
    $key = array_search($id, array_column($contacts, 'id')); //gibt Key zu ID
    $name = explode(",",$contacts[$key]["name"]);
    echo "BEGIN:VCARD\nVERSION:3.0\nN:".$name[0].";".$name[1].";;;\n";
    if (strlen($name[1]) > 1)
        echo "FN:".$name[1]." ".$name[0]."\n";
    else
        echo "FN:".$name[0]."\n";


    foreach($contacts as $contact) {
        if ($contact["id"] == $id) {

            if (strcmp($contact["type"], "geschäftlich/Mobil") == 0 || strcmp($contact["type"], "privat/Mobil") == 0)
            echo "TEL;TYPE=CELL:".$contact["number"]."\n";

            if (strcmp($contact["type"], "geschäftlich/Festnetz") == 0)
                echo "TEL;TYPE=WORK:".$contact["number"]."\n";

            if (strcmp($contact["type"], "privat/Festnetz") == 0)
                echo "TEL;TYPE=HOME:".$contact["number"]."\n";

            if (strcmp($contact["type"], "geschäftlich/Fax") == 0 || strcmp($contact["type"], "privat/Fax") == 0)
                echo "TEL;TYPE=FAX:".$contact["number"]."\n";

        }
    }
    echo "END:VCARD\n\n";
}

Das Skript gibt als Ergebnis reines vCard-Format aus, welches so in eine einzelne Datei kopiert und direkt in ein anderes System übernommen werden kann.

BEGIN:VCARD
VERSION:3.0
N:John Doe;;;;
FN:John Doe
TEL;TYPE=WORK:0123456789
TEL;TYPE=FAX:0123344556
END:VCARD

BEGIN:VCARD
VERSION:3.0
N:Max Muster;;;;
FN:Max Muster
TEL;TYPE=CELL:01701234567
TEL;TYPE=WORK:01122334455
END:VCARD

Schreibe einen Kommentar