6.0.0-git
2021-01-20

Diff for XmlRpcPythonHowTo between 2 and 3

+ 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
Note regarding SOAP: it is also possible to communicate with Horde's SOAP API using the Python library "SOAPpy", but the SOAP support 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 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."

</code>