Re: [Evolution] Mass import of contacts
- From: Des Dougan <des DouganConsulting com>
- To: Evolution Mailing List <evolution lists ximian com>
- Subject: Re: [Evolution] Mass import of contacts
- Date: Tue, 27 Jul 2004 21:40:07 -0700
On Tue, 2004-07-27 at 09:23, Brian Elliott Finley wrote:
This kinda works.
My problem is that I'm not exporting them from Evolution, to then import
them into another instance of Evolution. Instead, I've got the data in
a raw format, and I'm trying to use my perl-foo to put the data into a
"mass export style" .vcf card.
I've got the data so that it looks right to the naked eye, but I know I
must be missing some kind of delimeter, as evolution only takes in the
first couple of records (successfully), then silently declines the rest
of the data.
If I remove those first couple of records from the file, then it doesn't
accept any more.
I believe what I need at this point is a nice tidy detailed description
of what Evolution is expecting (format and delimiter wise) from a .vcf
file. I'm going through the vcard-21 spec, but I'm not convinced that
evolution's expectations are the same as the vcard-21 spec.
Can anyone point me at an evolution .vcf card import spec document?
Brian,
I imported stuff from my Mozilla address books a little while ago. When
searching, I found a PERL script called mozldif2vcf that did a fairly
good job. I can't recall the site I found it on, but I've pasted the
content below. Hope it provides some help.
Des
------
#!/usr/bin/perl
%R = {};
while ($line = <>) {
if ($line =~ /^dn:/) {
dumpvcf(\%R) if %R;
%R = {};
} else {
map { if ($line =~ /^$_:\s*(.+)$/) {$R{$_} = $1} } qw(c
cn
custom1
facsimileTelephoneNumber
givenName
homePhone
homePostalAddress
homeurl
l
mail
mobile
mozillaHomeCountryName
mozillaHomeLocalityName
mozillaHomePostalAddress2
mozillaHomePostalCode
mozillaHomeState
mozillaPostalAddress2
mozillaSecondEmail
o
postalAddress
postalCode
sn
st
telephoneNumber
title);
}
}
sub dumpvcf {
my $r = shift or die "Need a hash of the record!";
my %R = %{$r};
print
qq^BEGIN:VCARD
VERSION:2.1
^;
if ($R{'givenName'} ne '' && $R{'sn'} ne '') {
print "X-EVOLUTION-FILE-AS:$R{'sn'}, $R{'givenName'}\n";
} else {
print "X-EVOLUTION-FILE-AS:$R{'sn'}$R{'givenName'}\n";
}
$prefix = $R{'cn'};
$prefix =~ s/$R{'givenName'}//;
$prefix =~ s/$R{'sn'}//;
$prefix =~ s/^\s+//;
$prefix =~ s/\s+$//;
$R{'prefix'} = $prefix;
print "FN:$R{'cn'}
N:$R{'sn'};$R{'givenName'};$R{'prefix'}
";
if ($R{'homePostalAddress'} ne '') {
print
"ADR;HOME:;$R{'mozillaHomePostalAddress2'};$R{'homePostalAddress'};$R{'mozillaHomeLocalityName'};$R{'mozillaHomeState'};$R{'mozillaHomePostalCode'};$R{'mozillaHomeCountryName'}
LABEL;QUOTED-PRINTABLE;HOME:" .
quotedprintable("$R{'homePostalAddress'}\n$R{'mozillaHomePostalAddress2'}\n$R{'mozillaHomeLocalityName'},
$R{'mozillaHomeState'} $R{'mozillaHomePostalCode'}\n$R{'mozillaHomeCountryName'}") . "\n";
}
if ($R{'postalAddress'} ne '' && $R{'postalAddress'} ne
$R{'homePostalAddress'}) {
print
"ADR;WORK:;$R{'mozillaPostalAddress2'};$R{'postalAddress'};$R{'l'};$R{'st'};$R{'postalCode'};$R{'c'}
LABEL;QUOTED-PRINTABLE;WORK:" .
quotedprintable("$R{'postalAddress'}\n$R{'mozillaPostalAddress2'}\n$R{'l'}, $R{'st'}
$R{'postalCode'}\n$R{'c'}") . "\n";
}
if ($R{'homePhone'} ne '') {
print "TEL;HOME;VOICE:$R{'homePhone'}
";
}
if ($R{'telephoneNumber'} ne '') {
print "TEL;WORK;VOICE:$R{'telephoneNumber'}
";
}
if ($R{'facsimileTelephoneNumber'} ne '') {
print "TEL;WORK;FAX:$R{'facsimileTelephoneNumber'}
";
}
if ($R{'mobile'} ne '') {
print "TEL;CELL:$R{'mobile'}
";
}
for my $e ('mail', 'mozillaSecondEmail') {
print "EMAIL;INTERNET:$R{$e}
" if $R{$e} ne '';
}
print "URL:$R{'homeurl'}
ORG:$R{'o'}
TITLE:$R{'title'}
NOTE:$R{'custom1'}$R{'custom2'}$R{'custom3'}
END:VCARD
";
}
sub quotedprintable {
my $toencode = shift;
$toencode =~ s/\n+/\n/;
$toencode =~ s/([^a-zA-Z0-9_.-])/uc sprintf("=%02x",ord($1))/eg;
return $toencode;
}
--
Des Dougan, Principal
Dougan Consulting Group
Ph: 604-980-2848 Email: des at DouganConsulting dot com
www.DouganConsulting.com
Design - Implementation - Support
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]