#!/usr/bin/env python2.3 """ This script gives a short example on how to use the addressbook framework, it creates an CSV file containing information about all entries in the addressbook. Usage: python exportBook.py output.csv """ import csv import sys import AddressBook # The names of fields in the export, and the corresponding property. FIELD_NAMES=( ('Last Name', AddressBook.kABLastNameProperty), ('First Name', AddressBook.kABFirstNameProperty), ('E-mail', AddressBook.kABEmailProperty), ) def encodeField(value): """ Encode a value into an UTF-8 string """ if value is None: return '' if isinstance(value, AddressBook.ABMultiValue): # A multi-valued property, merge them into a single string result = [] for i in range(len(value)): result.append(value.valueAtIndex_(i).encode('utf-8')) return ', '.join(result) return value.encode('utf-8') def personToFields(person, fieldnames): """ Extract the specified fields from a person object """ return [ encodeField(person.valueForProperty_(nm)) for nm in fieldnames ] def bookFields(book, fieldnames): """ Generate the records for all people in the book """ for person in book.people(): yield personToFields(person, fieldnames) def main(argv = None): """ main entry point """ if argv is None: argv = sys.argv[1:] if len(argv) != 1: print "Usage: python exportBook.py output.csv" sys.exit(1) book = AddressBook.ABAddressBook.sharedAddressBook() fp = open(argv[0], 'wb') csvStream = csv.writer(fp) csvStream.writerow([ f[0] for f in FIELD_NAMES]) for row in bookFields(book, [ f[1] for f in FIELD_NAMES]): csvStream.writerow(row) fp.close() if __name__ == "__main__": main()