data = await d3
.json(
"https://raw.githubusercontent.com/chekos/my-recently-played-tracks/main/tracks.json"
)
.then((data) =>
data.map((d) => {
const playedAt = new Date(d.played_at);
const tzdate = Temporal.Instant.from(d.played_at).toZonedDateTimeISO(
"America/Los_Angeles"
); // date in localized timezone
const date = new Date(tzdate.epochMilliseconds); // Javascript Date object, stores date in browser's local timezone
const time = new Date(tzdate.epochMilliseconds % (24 * 60 * 60 * 1000)); // "Truncate" year, month, day
const hour = tzdate.hour;
const minute = tzdate.minute;
const dayOfMonth = tzdate.day;
const day = weekdays[tzdate.dayOfWeek + -1];
const weekend = tzdate.dayOfWeek > 5 ? "Weekend" : "Weekday";
const week = tzdate.weekOfYear;
const month = months[tzdate.month - 1];
const quarter =
tzdate.month < 4
? "Q1: Jan - Mar"
: tzdate.month < 7
? "Q2: Apr - Jun"
: tzdate.month < 10
? "Q3: Jul - Sep"
: "Q4: Oct - Dec";
const timeOfDay =
tzdate.hour < 5
? "Late night"
: tzdate.hour < 10
? "Early morning"
: tzdate.hour < 13
? "Morning"
: tzdate.hour < 17
? "Afternoon"
: tzdate.hour < 20
? "Late afternoon"
: "Evening";
const context = d.context;
const track = d.track;
const artistsNames = d.track.artists.map((v) => v.name);
return {
date,
time,
hour,
minute,
day,
weekend,
week,
month,
quarter,
dayOfMonth,
timeOfDay,
track,
playedAt,
context,
artistsNames
};
})
)
// appendix
weekdays = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
]
months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
timeOfDay = [
"Late night",
"Early morning",
"Morning",
"Afternoon",
"Late afternoon",
"Evening"
]
hours = [...Array(24).keys()]
// Load the Temporal API using a Polyfill
Temporal = {
const TemporalLib = await require("@js-temporal/polyfill@0.3.0");
return TemporalLib.Temporal;
}
domains = ({
month: months,
day: weekdays,
timeOfDay: timeOfDay,
hour: hours
})
// artists = data.flatMap((d) => d.artistsNames)
artists = ["La Plebada", "La Banda Baston", "Yoga Fire", "Aleman", "Fntxy", "Gera MX", "Cozy Cuz", "Charles Ans", "Remik Gonzalez", "Santa Fe Klan"]