PythonDaap is a (under development) DAAP client implemented in Python,
and based on [PyTunes][1] by [Davyd Madeley][2]. I've so far added the
authentication stuff needed by recent copies of iTunes and a primitive
object model that can download individual tracks, and has playlist
support. I have a command-line shell similar to itshell (I also called
mine itshell, just to be confusing), and it's all quite usable.

Development copies of the code can be found in [my subversion repository][4],
or the [project page for PythonDaap][7].

This distribution also includes an implementation of Apple's custom MD5
hasher as a python module. This hasher is used in the 
[DAAP authentication protocol][5], documented by David Hammerton.

To build the module:

    python setup.py build

And to install (probably as root):

    python setup.py install

The client library was based heavily on work by David Madeley, and also
on the work done by Richard Clamp in writing the perl versions of the
client, which were a great help when things didn't work, and which were
also _annoyingly_ faster than my library until I put some effort into
optimizing. Thanks for the push. However, the majority of the code in
daap.py is now my own.

The MD5 hasher contains no code written by me at all, and therefore
represents one of my most efficient output/lines of code ratios _ever_.
md5c.c, md5.h and md5module.c were taken from the Python source code,
specifically Python-2.3.5.tar.bz2. I have made a very small modification
to md5c.c, but that modification was taken in it's entirety from
[Digest::MD5::M4p][6]. Other than writing a setup.py and changing 'md5' to
'md5daap' in a few places (docs, mostly), that's it.

Thus I owe a debt to all the people who actually _did_ write the code
I'm using, specifically Colin Plumb, who wrote the public domain MD5
implementation I'm now using, the Python developers for the Python
wrapper on top of it, David Hammerton for reverse-engineering the
modifications needed for iTunes, and William Herrera for producing
Digest::MD5::M4p, and thus doing all the conversion work for me.

[1]: http://cvs.ucc.asn.au/cgi-bin/viewcvs.cgi/projects/pytunes/
[2]: http://www.davyd.id.au/
[3]: http://search.cpan.org/~rclamp/Net-DAAP-Client-0.42/examples/itshell
[4]: http://jerakeen.org/svn/tomi/Projects/python-daap
[5]: http://crazney.net/programs/itunes/authentication.html
[6]: http://search-dev.develooper.com/src/BILLH/Digest-MD5-M4p-0.01/M4p.xs
[7]: http://jerakeen.org/code/pythondaap
