The tale of two iTunes APIs (one of these things is not like the other)

I find this somewhat amusing but mostly exasperating:

To save album artwork with the Apple com library on Windows you do the following:

artwork = self.GetCurrentTrackArtwork()
if artwork and len( artwork ):
    artwork[0].SaveArtworkToFile("/PATH/TO/THE/FILE" )

Looks pretty simple, nice and clean, no problems, but take a look at the AppleScript library on OS X:

artwork = self.GetCurrentTrackArtwork()
data = artwork.data

# PNG HEADER ?     P     N     G
substr = [ 0x89, 0x50, 0x4E, 0x47 ]
idx = self.FindSubstring( data, substr )

graphic = None
if idx:
    graphic = data[idx:-1 ]

    fout = file( ARTWORK_IMAGE, "wb" )
    fout.write( graphic )
    fout.close()
    return

# JPEG HEADER                                    J     F     I     F
substr = [ 0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, ]
idx = self.FindSubstring( data, substr )

if idx:
    graphic = data[idx:-1 ]

    fout = file( ARTWORK_IMAGE, "wb" )
    fout.write( graphic )
    fout.close()

To say there was a little hoop jumping going on here is an understatement, I also had to write the substring method to
search for the ordinal values, and if Apple adds a new graphic format for the cover art, my OS X version breaks and I have to
release a fix, not exactly flexible or easy to use, but maybe that’s the point. Tsk, tsk, tsk…

Leave a Reply