export.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import csv
  2. import tempfile
  3. from scrobbles.models import Scrobble
  4. from django.db.models import Q
  5. def export_scrobbles(start_date=None, end_date=None, format="AS"):
  6. start_query = Q()
  7. end_query = Q()
  8. if start_date:
  9. start_query = Q(timestamp__gte=start_date)
  10. if start_date:
  11. end_query = Q(timestamp__lte=end_date)
  12. scrobble_qs = Scrobble.objects.filter(
  13. start_query, end_query, track__isnull=False
  14. )
  15. headers = []
  16. extension = "tsv"
  17. delimiter = "\t"
  18. if format == "as":
  19. headers = [
  20. ["#AUDIOSCROBBLER/1.1"],
  21. ["#TZ/UTC"],
  22. ["#CLIENT/Vrobbler 1.0.0"],
  23. ]
  24. if format == "csv":
  25. delimiter = ","
  26. extension = "csv"
  27. headers = [
  28. [
  29. "artists",
  30. "album",
  31. "title",
  32. "track_number",
  33. "run_time",
  34. "rating",
  35. "timestamp",
  36. "musicbrainz_id",
  37. ]
  38. ]
  39. with tempfile.NamedTemporaryFile(mode="w", delete=False) as outfile:
  40. writer = csv.writer(outfile, delimiter=delimiter)
  41. for row in headers:
  42. writer.writerow(row)
  43. for scrobble in scrobble_qs:
  44. track = scrobble.track
  45. track_number = 0 # TODO Add track number
  46. track_rating = "S" # TODO implement ratings?
  47. track_artist = track.artist or track.album.album_artist
  48. row = [
  49. track_artist,
  50. track.album.name,
  51. track.title,
  52. track_number,
  53. track.run_time,
  54. track_rating,
  55. scrobble.timestamp.strftime("%s"),
  56. track.musicbrainz_id,
  57. ]
  58. writer.writerow(row)
  59. return outfile.name, extension