Blog
Convert vCard to Fritzbox Addressbook
To convert a vCard addressbook to the fritzbox xml format I wrote this short perl script.
#!/usr/bin/perl -w
use warnings;
use strict;
my $inputFile = shift;
open(VCARD, $inputFile);
my $newContactFlag = 0;
my %nameNumberHash;
my $name;
my $i = 0;
# Input section
sub umlautwechseln {
my $messystring = shift;
my $conversion = shift || "1";
my @vorlage = (
[ 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', 'ß'],
['ä', 'ö', 'ü', 'Ä', 'Ö','Ü', 'ß'],
[ 'ae', 'oe', 'ue', 'Ae', 'Oe', 'Ue', 'ss']
);
for (0 .. 6) {
$messystring =~ s/$vorlage[0][$_]/$vorlage[$conversion][$_]/g;
}
return $messystring;
}
while(<VCARD>)
{
if($_ =~ /^FN:(.+)\n$/)
{
$name = $1;
chop($name);
$name = umlautwechseln($name);
}
elsif( $_ =~ /TEL;type=(.+);type=VOICE:\+49(\d+)/ )
{
$i++;
my $type = lc($1);
$nameNumberHash{$name} .= "<number type=\"$type\" vanity=\"\" prio=\"1\">0$2</number>\n";
}
elsif( $_ =~ /TEL;type=(.+);type=VOICE;type=pref:\+49(\d+)/ )
{
$i++;
my $type = lc($1);
$nameNumberHash{$name} .= "<number type=\"$type\" vanity=\"\" prio=\"1\">0$2</number>\n";
}
}
close(VCARD);
# Output Section
print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
<phonebooks>
<phonebook>";
my $id = 0;
foreach my $key ( keys %nameNumberHash )
{
my $name = $key; # chop($key);
#print "key: $key, value: $nameNumberHash{$key}\n";
print" <contact>
<category>0</category>
<person>
<realName>".$key."</realName>
</person>
<telephony>
$nameNumberHash{$key}
</telephony>
<services />
<setup />
<mod_time>1319558289</mod_time>
<uniqueid>$id</uniqueid>
</contact>";
$id++;
}
print " </phonebook>
</phonebooks>";
After that you can start it with:
perl vcards2fritz.pl vCards.vcf \> test.xml
and you can upload the test.xml file to your fritzbox.