Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## nasty code
- #!/usr/bin/env ruby
- require 'rexml/document'
- filename = ARGV.first
- abort "filename needed" unless filename
- abort "file needed" unless File.file?(filename)
- data = File.read(filename)
- doc = REXML::Document.new(data)
- tracks = nil
- doc.elements.each('plist/dict/key') do |el|
- if el.text == 'Tracks'
- tracks = el.next_element
- end
- end
- abort 'no tracks found' unless tracks
- song_data = {}
- fields = ['Name', 'BPM', 'Artist', 'Album', 'Track ID']
- tracks.elements.each('key') do |el|
- track_id = el.text
- track = el.next_element
- track_data = {}
- track.elements.each('key') do |l|
- if fields.include?(l.text)
- track_data[l.text] = l.next_element.text
- end
- end
- song_data[track_id] = track_data
- end
- playlists = nil
- doc.elements.each('plist/dict/key') do |el|
- if el.text == 'Playlists'
- playlists = el.next_element
- end
- end
- abort 'no playlists found' unless playlists
- items = nil
- playlists.elements.each('dict/key') do |el|
- if el.text == 'Playlist Items'
- items = el.next_element
- end
- end
- abort 'no playlist items found' unless items
- order = []
- items.elements.each('dict') do |dict|
- dict.elements.each('key') do |key|
- if key.text == 'Track ID'
- order.push(key.next_element.text)
- end
- end
- end
- order.each do |track_id|
- track = song_data[track_id]
- puts track['Name'] + ' --- ' + track['Artist']
- end
- ## output [plain_text]
- $ ./itunes_playlist_data.rb ~/Documents/10\ May\ LBCB.xml
- Take the "A" Train --- The BBC Big Band
- Jive at Five --- Count Basie
- Dunkin' a Doughnut --- Andy Kirk
- Killin' Jive --- The Cats and the Fiddle
- Straighten Up and Fly Right --- The Andrews Sisters
- Alfie's Theme --- The Solomon Douglas Swingtet
- Everybody Eats When They Come to My House --- Cab Calloway
- Jump Session --- Slim and Slam
- Jeep Jockey Jump --- Glenn Miller & The AAF Band
- Minor Swing --- Boilermaker Jazz Band
- For Dancers Only --- The Solomon Douglas Swingtet
- One O'Clock Jump --- Benny Goodman
- A-Well-A-Take-Um-A-Joe --- Slim Gaillard & His Flat Foot Floogie Boys
- You'se a Viper --- Stuff Smith
- Look-a There --- Slim and Slam
- Blues My Naughty Sweetie Gives to Me --- Sidney Bechet
- Love Me or Leave Me --- Sammy Davis, Jr.
- O Mary Don't You Weep --- Bruce Springsteen
Add Comment
Please, Sign In to add comment