68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
import csv
|
|
import tempfile
|
|
from scrobbles.models import Scrobble
|
|
|
|
from django.db.models import Q
|
|
|
|
|
|
def export_scrobbles(start_date=None, end_date=None, format="AS"):
|
|
start_query = Q()
|
|
end_query = Q()
|
|
if start_date:
|
|
start_query = Q(timestamp__gte=start_date)
|
|
if start_date:
|
|
end_query = Q(timestamp__lte=end_date)
|
|
|
|
scrobble_qs = Scrobble.objects.filter(
|
|
start_query, end_query, track__isnull=False
|
|
)
|
|
headers = []
|
|
extension = "tsv"
|
|
delimiter = "\t"
|
|
|
|
if format == "as":
|
|
headers = [
|
|
["#AUDIOSCROBBLER/1.1"],
|
|
["#TZ/UTC"],
|
|
["#CLIENT/Vrobbler 1.0.0"],
|
|
]
|
|
|
|
if format == "csv":
|
|
delimiter = ","
|
|
extension = "csv"
|
|
headers = [
|
|
[
|
|
"artists",
|
|
"album",
|
|
"title",
|
|
"track_number",
|
|
"run_time",
|
|
"rating",
|
|
"timestamp",
|
|
"musicbrainz_id",
|
|
]
|
|
]
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False) as outfile:
|
|
writer = csv.writer(outfile, delimiter=delimiter)
|
|
for row in headers:
|
|
writer.writerow(row)
|
|
|
|
for scrobble in scrobble_qs:
|
|
track = scrobble.track
|
|
track_number = 0 # TODO Add track number
|
|
track_rating = "S" # TODO implement ratings?
|
|
track_artist = track.artist or track.album.album_artist
|
|
row = [
|
|
track_artist,
|
|
track.album.name,
|
|
track.title,
|
|
track_number,
|
|
track.run_time,
|
|
track_rating,
|
|
scrobble.timestamp.strftime("%s"),
|
|
track.musicbrainz_id,
|
|
]
|
|
writer.writerow(row)
|
|
return outfile.name, extension
|