I've attached a script that I use to convert tab-separated data (as generated from mysql) into a vcard file.

Alex.

On Fri, 18 Jul 2008, Al Johnson wrote:

On Friday 18 July 2008, Markus Schlichting wrote:
Am Freitag, 18. Juli 2008 07:14:13 schrieb Curtis Vaughan:
I use Thunderbird for Email. I want to export my contacts from the
Address Book and import them to FR. I don't see any instructions on how
to do that. In fact, the only solutions seem to be for me to import my
contacts into Evolution or (god forbid) Outlook and then export them from
there.
Is there no other solution?

Is it possible to export Thunderbird Contacts as VCF files ? I don't use
thunderbird regulary, but I think it is, so you can use
http://http//wiki.openmoko.org/wiki/Import_Vcf_Contacts to import your
contacts. Used it to copy my contact from kontact :-)

Kontact is nice like that, but it helps that it uses vCard natively.
Thunderbird doesn't - you can export to LDIF, CSV or tab-delimited. At
present the solutions seem to be to use a roundabout route or write some
code.

_______________________________________________
Openmoko community mailing list
community@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/community

######################################################################
# Takes a (tab-) seperated ascii file and writes out a file of
# VCards (stdin -> stdout).
# Input is a textfile with separated fields and a header. example:
# matchcode     vorname land    ort     telefon telefon2        fax     
nr_gruppe       mark    gruppen name    info    plz     strasse handy   gebdat  
memo    picture 
# FA-ERDING     Erding          Erding  123/456 NULL            0       F       
        Finanzamt       StNr. 123/456/78900     85422   Postf. 1262             
NULL                    
#
# Or using mysql:
# echo 'select * from my_addresstable'|mysql  -pmy_password -hlocalhost 
my_database > ~/tmp/contacts.vcf
# 
# No "..." around fields, tab separated (configurable, see below).
# You shoud run this script on the linux host, since ASCII<->UTF-8
# conversion seems not very well supported on the moko phone.
# Copy the resulting output file via scp onto the phone and
# Use the manage-contacts.py load < contacts.vcf
# There.

import sys,time

####################
# user configuration

# adapt here the real field names of the table

sql_surename_field='name'
sql_prename_field='vorname'
sql_phone_field='telefon'
sql_phone2_field='telefon2'
sql_mobile_field='handy'

# It is possible to convert only a subset of all addresses.
# In my special case, I have a groups field which contains
# an 'O' character if it shoud be exported to some phone.
# To switch off the filter, replace the 'sql_filter_search'
# content with '' (instead of the 'O').

sql_filter_field='gruppen'
sql_filter_search='O'

# tab by default
sql_delimiter='\t'

# set this to your own country phone prefix, e.g. +1 for USA
# it will be prepended automatically
country_code='+49'

# end configuration options
####################



# convert a phone number of the form '089/123456' into
# '+4989123456' so that moko phone recognizes the sender
# id correctly.
# This is probably germany phone number specific...

def normalize(nr):    
    result=nr.replace( "/", "" )
    if result.startswith('0'):
        result = '+49' + result[1:]
    return result



lines = sys.stdin.readlines ()

name_idx=-1
vorname_idx=-1
phonenr_idx = -1
phonenr2_idx = -1
mobile_idx = -1
filter_idx = -1

linenr=0

for line in lines:
    columns = line.split(sql_delimiter)
    if linenr == 0:
        # print columns
        try:
            name_idx=columns.index(sql_surename_field)
            vorname_idx=columns.index(sql_prename_field)
            phonenr_idx=columns.index(sql_phone_field)
            phonenr2_idx=columns.index(sql_phone2_field)
            mobile_idx=columns.index(sql_mobile_field)
            filter_idx=columns.index(sql_filter_field)
        except:
            # print "some fields not found: " + str(name_idx) + " " + 
str(vorname_idx ) + " " + str( phonenr_idx ) + " " + str( phonenr2_idx ) + " " 
+ str( mobile_idx ) + " " + str( filter_idx )
            pass

    else:

        # convert all fields into unicode.
        # This seems not to be supported well on the moko,
        # so it is better to let the linux host do the unicode
        # conversion (run this script locally)

        for i in range( 0,len(columns)-1 ):

            # convert the read-in string from ASCII into unicode
            try:
                columns[i] = columns[i].decode( "iso-8859-1" )
            except:
                print "cannot convert to unicode: " + columns[i]

            # and convert it back again into UTF-8 what is expected
            # from the VCF format.
            try:
                columns[i] = columns[i].encode( 'utf-8', "replace" )
            except:
                print "cannot convert to utf-8: " + columns[i]

        # only export those entries, that match the filter condition
        # (see above in the field description)
        
        if columns[filter_idx].find(sql_filter_search) >= 0:
            phone1=normalize( columns[phonenr_idx] )
            phone2=normalize( columns[phonenr2_idx] )
            mobile=normalize( columns[mobile_idx] )
            print "BEGIN:VCARD"
            print "VERSION:3.0"
            print "REV:" + time.strftime ('%Y-%m-%dT%H:%M:%SZ', time.gmtime())
            print "UID:sql-" + str(linenr)
            print "FN:" + columns[name_idx] + " " + columns[vorname_idx]
            print "TEL;TYPE=HOME;TYPE=pref:" + phone1
            if phone2 != '' and phone2 != 'NULL':
                print "TEL;TYPE=WORK:" + phone2
            if mobile != '' and mobile != 'NULL':
                print "TEL;TYPE=CELL:" + mobile
            print "END:VCARD"

    linenr = linenr + 1


            
        
_______________________________________________
Openmoko community mailing list
community@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/community

Reply via email to