[Evolution] Mass import of contacts

Brian Elliott Finley finley@mcs.anl.gov
Wed, 28 Jul 2004 10:44:22 -0500


Thanks, Des!

This looks like just what I wanted.

Cheers, -Brian


Thus spake Des Dougan (des@DouganConsulting.com):
>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
>
>_______________________________________________
>evolution maillist  -  evolution@lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/evolution
>

-- 
------------------------------------------------------
 Brian Elliott Finley           Argonne, MCS Division 
 Mobile: 630.631.6621           Office:  630.252.4742
 gpg --keyserver wwwkeys.pgp.net --recv-keys 10F8EE52
------------------------------------------------------