Search code examples
applescriptitunes

Populate iTunes playlist from csv file


Could anyone offer a way to populate my playlist with songs from a csv file/text file formatted like this: song title,artist? I can do it for title alone but can't specify it must have a certain artist.

EDIT: Here is an example of how I'm getting them by titles:

set TheFile to read file "Macintosh HD:Applications:Automator stuff:01b iTunes Scripts:SongList.txt"
tell application "iTunes"
    set thePlaylist to playlist "SongList"
    try
        delete every track of thePlaylist
    end try
    set MySongs to paragraphs of (TheFile) -- read artist names (separated by newlines) from the file
    repeat with AnItem in MySongs -- get all tracks from each artist
        set AnItem to (contents of AnItem)
        if AnItem is not "" then try -- don't bother with empty names
            set MyTracks to (location of file tracks of playlist "Music" whose name is AnItem)
            --can also modify the above from "is" to "contains" or "_begins with_"
            add MyTracks to thePlaylist
        on error errmess -- oopsie (not found, etc)
            log errmess -- just log it
        end try
    end repeat
end tell

Solution

  • OK, figured it out! Couldn't work out how to work around titles with commas in them (which I have a few of), so I ended up using tab separating them instead. So, once I have my tab-separated file, this code did the trick:

    set thisTSVFile to (choose file with prompt "Select the CSV file")
    readTabSeparatedValuesFile(thisTSVFile)
    
    set theList to readTabSeparatedValuesFile(thisTSVFile)
    
    tell application "iTunes"
        set myPlaylist to playlist "Test1"
        set sourcePlaylist to playlist "Music"
    end tell
    
    repeat with i from 2 to number of items in readTabSeparatedValuesFile(thisTSVFile)
         --gets first column
        set theName to item 1 of item i of theList
         --gets second
        set theArtist to item 2 of item i of theList
        tell application "iTunes"
            duplicate (some track of sourcePlaylist whose name is theName and artist is theArtist) to myPlaylist
        end tell
        delay 0.1
    end repeat
    
    on readTabSeparatedValuesFile(thisTSVFile)
        try
            set dataBlob to (every paragraph of (read thisTSVFile))
            set the tableData to {}
            set AppleScript's text item delimiters to tab
            repeat with i from 1 to the count of dataBlob
                set the end of the tableData to (every text item of (item i of dataBlob))
            end repeat
            set AppleScript's text item delimiters to ""
            return tableData
        on error errorMessage number errorNumber
            set AppleScript's text item delimiters to ""
            error errorMessage number errorNumber
        end try
    end readTabSeparatedValuesFile