+ Using XML/RPC to interface with the Horde API using PythonYou 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.NoteNote regarding SOAP: it is also possible to communicate with Horde's SOAP API using the Python library "SOAPpy", buttheSOAPsupport in Horde does not seem to be fully complete (see the following ticket for more information: http://bugs.horde.org/ticket/?id=5046)doesn't offer any inherent advantages over XML-RPC when dealing with Horde's API. <code type="python">## 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 nameusername = "joe.user@my-server.com"# username = "joe.user"# The password of this Horde userpassword = "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'..." % urlserver = 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..." % calendarKeycontent = server.calendar.exportCalendar(calendarKey, "text/calendar")filename = calendarKey + ".ics"print "Writing file '%s'..." % filenamef = file(filename, "wt")f.write(content.encode('utf-8'))f.close()print "Done."</code>