#!/usr/bin/env python # Using the appscript Python-to-applescript bridge, convert an iTunes # playlist into m3u format. # # Author: Stephen Granade # Date: 2 January 2009 import math, re, sys, os from appscript import * # Search-and-replace strings to adjust the mp3's locations if necessary. sandrStrs = { "/Volumes": "smb://sargent" } # For more information about what classes etc. are available from iTunes # via appscript, see # http://appscript.sourceforge.net/objc-appscript/iTunes-objc/index.html # Get ahold of iTunes iTunes = app('iTunes') # The browser window's view is the currently-selected playlist try: playlist=iTunes.browser_windows[1].view() except CommandError, detail: if detail.errornumber == -1731: print "There is no current playlist." sys.stdout.write('\a') sys.stdout.flush() sys.exit() else: raise CommandError, detail # Use the playlist's name as that of the m3u file outfn = os.path.abspath(__file__) outfn = os.path.join(os.path.dirname(outfn),playlist.name()+".m3u") outf = open(outfn, "w") outf.write("#EXTM3U\n") for track in playlist.tracks(): # Skip any files whose locations aren't currently available # If the file doesn't exist on disk, then trying to access the # location will throw an AttributeError exception. try: fileloc = track.location().path if not os.path.isfile(fileloc): throw(AttributeError) # Perform search-and-replace on the file location for old, new in sandrStrs.iteritems(): fileloc = fileloc.replace(old, new) durstr = "%d" % math.floor(track.duration()) outf.write("#EXTINF:"+durstr+","+track.name()+"\n") outf.write(fileloc+"\n") except AttributeError: print "\""+track.name()+"\" isn't available on disk. Skipping."