
Can I just say that the iPhoto XML file format is all farged up? Sure, it's not the most optimal XML, and it conforms to Apple's XML plist format. It's basically a serialized version of all the native Objective-C objects iPhoto has sitting in memory. This is great for iPhoto because it can reconstruct things quickly and easily. It sucks for those of us wanting to write lightweight parsers for that data. A SAX event handler that should be about a screen or two large ends up having to handle all of the plist quirks, resulting in code three times as long and several orders of magnitude more complex. I hope to never have to do any more heavy maintenance/debugging on this particular piece of code.
Anyway, I now have code to almost instantly parse the iPhoto database into some lightweight data structures. I also have code for downloading lists of albums and pictures from PHP Gallery, as well as code for uploading pictures. Next step: logic to determine what's on your hard drive that isn't in your online gallery, plus a pretty UI.