Guest User

Untitled

a guest
Apr 21st, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. ## nasty code
  2.  
  3. #!/usr/bin/env ruby
  4. require 'rexml/document'
  5.  
  6. filename = ARGV.first
  7.  
  8. abort "filename needed" unless filename
  9. abort "file needed" unless File.file?(filename)
  10.  
  11. data = File.read(filename)
  12.  
  13. doc = REXML::Document.new(data)
  14.  
  15. tracks = nil
  16.  
  17. doc.elements.each('plist/dict/key') do |el|
  18. if el.text == 'Tracks'
  19. tracks = el.next_element
  20. end
  21. end
  22.  
  23. abort 'no tracks found' unless tracks
  24.  
  25. song_data = {}
  26.  
  27. fields = ['Name', 'BPM', 'Artist', 'Album', 'Track ID']
  28.  
  29. tracks.elements.each('key') do |el|
  30. track_id = el.text
  31. track = el.next_element
  32. track_data = {}
  33. track.elements.each('key') do |l|
  34. if fields.include?(l.text)
  35. track_data[l.text] = l.next_element.text
  36. end
  37. end
  38. song_data[track_id] = track_data
  39. end
  40.  
  41. playlists = nil
  42. doc.elements.each('plist/dict/key') do |el|
  43. if el.text == 'Playlists'
  44. playlists = el.next_element
  45. end
  46. end
  47.  
  48. abort 'no playlists found' unless playlists
  49.  
  50. items = nil
  51. playlists.elements.each('dict/key') do |el|
  52. if el.text == 'Playlist Items'
  53. items = el.next_element
  54. end
  55. end
  56.  
  57. abort 'no playlist items found' unless items
  58.  
  59. order = []
  60.  
  61. items.elements.each('dict') do |dict|
  62. dict.elements.each('key') do |key|
  63. if key.text == 'Track ID'
  64. order.push(key.next_element.text)
  65. end
  66. end
  67. end
  68.  
  69. order.each do |track_id|
  70. track = song_data[track_id]
  71. puts track['Name'] + ' --- ' + track['Artist']
  72. end
  73.  
  74.  
  75. ## output [plain_text]
  76.  
  77. $ ./itunes_playlist_data.rb ~/Documents/10\ May\ LBCB.xml
  78. Take the "A" Train --- The BBC Big Band
  79. Jive at Five --- Count Basie
  80. Dunkin' a Doughnut --- Andy Kirk
  81. Killin' Jive --- The Cats and the Fiddle
  82. Straighten Up and Fly Right --- The Andrews Sisters
  83. Alfie's Theme --- The Solomon Douglas Swingtet
  84. Everybody Eats When They Come to My House --- Cab Calloway
  85. Jump Session --- Slim and Slam
  86. Jeep Jockey Jump --- Glenn Miller & The AAF Band
  87. Minor Swing --- Boilermaker Jazz Band
  88. For Dancers Only --- The Solomon Douglas Swingtet
  89. One O'Clock Jump --- Benny Goodman
  90. A-Well-A-Take-Um-A-Joe --- Slim Gaillard & His Flat Foot Floogie Boys
  91. You'se a Viper --- Stuff Smith
  92. Look-a There --- Slim and Slam
  93. Blues My Naughty Sweetie Gives to Me --- Sidney Bechet
  94. Love Me or Leave Me --- Sammy Davis, Jr.
  95. O Mary Don't You Weep --- Bruce Springsteen
Add Comment
Please, Sign In to add comment