============================================================ Using XML/RPC to interface with the Horde API using Python ============================================================ You can easily use Python to communicate with Horde through XML/RPC. Recent versions of Python have a built-in library "xmlrpclib" which even supports SSL (the "https://" protocol) and authentication! Below you find an example which accesses Kronolith's API to enumerate and download calendars. You can do similar things with other Horde modules. Look at the *modulename/lib/api.php* files in the Horde distribution to see which APIs you can use. Note regarding SOAP: it is also possible to communicate with Horde's SOAP API using the Python library "SOAPpy", but SOAP doesn't offer any inherent advantages over XML-RPC when dealing with Horde's API. :: # # Horde XML-RPC with Python Example # # This is a simple example which shows how to communicate with Horde through # the XML-RPC interface using the Python programming language. # # It enumerates all calendars a user has read access to and saves them to # the harddisk as VCALENDAR files for backup purposes. # import xmlrpclib ############################### User settings ############################### # The user name on the Horde server. # When using imp authentication, always use the _full_ email address here! # When using SQL authentication, just use your login name username = "joe.user@my-server.com" # username = "joe.user" # The password of this Horde user password = "secret" # Protocol to use for connection ("http" or "https") protocol = "https" # Server host name (and directory, if needed) hostname = "horde.my-server.com" # hostname = "www.my-server.com/horde" ############################## End of settings ############################## url = "%s://%s:%s@%s/rpc.php" % (protocol, username, password, hostname) print "Connecting to URL '%s'..." % url server = xmlrpclib.ServerProxy(url, verbose=0) print "Retrieving list of calendars..." calendars = server.calendar.listCalendars(False, 4) # "read permission" for calendarKey in calendars: print "Downloading calendar %s..." % calendarKey content = server.calendar.exportCalendar(calendarKey, "text/calendar") filename = calendarKey + ".ics" print "Writing file '%s'..." % filename f = file(filename, "wt") f.write(content.encode('utf-8')) f.close() print "Done."