#!/usr/bin/pythonw import sys from appscript import * def rated(track, minRating=20): return track.enabled() and track.rating() >= minRating library = app("iTunes.app").browser_windows[1].view totalTracks = library.tracks.count(each=k.item) ratedTracks = [track for track in library.tracks.get() if rated(track)] buckets = {} def addBucket(track): rating = track.rating() / 20 if not rating in buckets: buckets[rating] = 0 buckets[rating] = buckets[rating] + 1 map(addBucket, ratedTracks) print "Total tracks:", totalTracks print "Rated tracks: ", len(ratedTracks) for r,c in buckets.items(): print "%d-star rated tracks: %d" % (r, c) # And print 5 star stuff fiveStarTracks = [track for track in library.tracks.get() if rated(track, 100)] fiveStarTracks.sort(lambda x, y: cmp(x.genre(), y.genre())) lastGenre = '' for track in fiveStarTracks: if lastGenre != track.genre(): print "\n---\n%s\n---" % track.genre() lastGenre = track.genre() info = "%s - %s (%d)" % (track.artist(), track.name(), track.played_count()) print info.encode("utf-8") # Artists with the highest rated tracks. fourAndAbove = [track for track in library.tracks.get() if rated(track, 80)] fourAndAbove.sort(lambda x, y: cmp(x.artist().lower(), y.artist().lower())) artistsToCount = {} artistToSomeName = {} for track in fourAndAbove: # normalized artist = track.artist().lower() if not artist in artistsToCount: artistToSomeName[artist] = track.artist() artistsToCount[artist] = 0 artistsToCount[artist] = artistsToCount[artist] + 1 artistsCount = artistsToCount.items() artistsCount.sort(lambda (a1,c1),(a2,c2): cmp(c2,c1)) for (artist,count) in artistsCount: if count == 1: break info = "%s (%d)" % (artistToSomeName[artist], count) print info.encode("utf-8")