Guest User

Untitled

a guest
Dec 15th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.30 KB | None | 0 0
  1. # get_tracks is an api method to get recent tracks for a user, with paging and caching
  2. # get_track is an api method to get a single track from mbid or artist+name, with caching
  3.  
  4. import itertools
  5. from operator import itemgetter
  6.  
  7. def track_to_artist_and_duration(track):
  8. api_track = get_track(track)
  9. return (track.get('artist').get('name'), track.get('name'), api_track.get('duration'))
  10.  
  11. def ms_to_time(ms):
  12. seconds = ms / 1000
  13. m, s = divmod(seconds, 60)
  14. h, m = divmod(m, 60)
  15. return "{:d}:{:02d}:{:02d}".format(h, m, s)
  16.  
  17. track_artist_duration = itertools.imap(track_to_artist_and_duration, get_tracks())
  18. with_duration = itertools.ifilter(lambda t: t[2] is not None and t[2] != "0", track_artist_duration)
  19. grouped_by_artist = [[n, sum(itertools.imap(lambda d: long(d[2]), g))] for n,g in itertools.groupby(sorted(with_duration, key=itemgetter(0)), key=itemgetter(0))]
  20. grouped_sorted = reversed(sorted(grouped_by_artist, key=itemgetter(1)))
  21.  
  22. for g in itertools.islice(grouped_sorted, 10):
  23. print(u'{}, {}'.format(g[0], ms_to_time(g[1])))
  24.  
  25. # Brian Eno, 34:05:03
  26. # This American Life, 11:11:35
  27. # Elder, 7:41:53
  28. # These Arms Are Snakes, 7:32:11
  29. # Brand New, 7:05:50
  30. # King Gizzard & The Lizard Wizard, 6:44:53
  31. # Aviator, 5:52:44
  32. # The War on Drugs, 5:32:47
  33. # Graves at Sea, 5:04:12
  34. # Tigers Jaw, 4:44:36
Add Comment
Please, Sign In to add comment