
Connect
Ask your smart speaker to
play Ninety Two Three The Fan on Audacy
{
if (part.type !== “literal”) map[part.type] = part.value;
});
return `${map.year}-${map.month}-${map.day}`;
}
function getTodayInTimezone(tz) {
return getLocalDateInTimezone(new Date().toISOString(), tz);
}
function formatTime(iso, tz) {
return new Date(iso).toLocaleTimeString(“en-US”, {
timeZone: tz,
hour: “2-digit”,
minute: “2-digit”,
});
}
function buildMusicRow(item) {
const row = document.createElement(“a”);
row.href = `https://www.audacy.com/stations/${stationSlug}`;
row.className = “player-item”;
const localTime = item.time
? formatTime(item.time, timezone)
: “”;
row.innerHTML = `
${item.title || “”}
]]>
${localTime}

 `;

 return row;
 }

 function buildScheduleRow(show, stationTimezone) {
 const row = document.createElement(”a”);
 row.href = `https://www.audacy.com/stations/${stationSlug}`;
 row.className = “player-item”;

 const startIso = show.startDateTime;
 const endIso = show.endDateTime;

 const startDayLocal = getLocalDateInTimezone(startIso, stationTimezone);
 const endDayLocal = getLocalDateInTimezone(endIso, stationTimezone);
 const todayLocal = getTodayInTimezone(stationTimezone);

 let label = formatTime(startIso, stationTimezone);

 if (show.isOnNow) {
 label = “On Air Now”;
 } else if (startDayLocal !== todayLocal && endDayLocal === todayLocal) {
 label = `Until ${formatTime(endIso, stationTimezone)}`;
 }

 row.innerHTML = `

${formatTime(startIso, stationTimezone)}

 `;

 return row;
 }
const isNumericValue = (value) => {
 return typeof value === “string”
 ? value.trim() !== “” && !isNaN(Number(value.trim()))
 : typeof value === “number” && !isNaN(value);
};
 async function loadMusicBar() {
 let apiUrl = `https://api.audacy.com/experience/v2/stations/${a2Id}/nowplaying?count=${song_count}`;
 if(isNumericValue(awId)){
 
 
 apiUrl=`https://api-nowplaying.amperwave.net/api/v1/prtplus/nowplaying/${song_count}/${awId}/nowplaying.json`
 console.log(apiUrl);
 
 }
 

 try {
 const res = await fetch(apiUrl);
 const data = await res.json();

 window.performances = data?.performances || [];
 document.dispatchEvent(new Event(’performances:ready’));

 if (!window.performances.length) return;

 const first = window.performances[0];
 currentTrackEl.textContent = `${first.artist} – ${first.title}`;
 if (dropdownTitleEl) dropdownTitleEl.textContent = “Recently Played”;

 listEl.innerHTML = “”;
 window.performances.slice(0, 20).forEach(item => {
 listEl.appendChild(buildMusicRow(item));
 });

 playerBar.classList.remove(”hidden”);
 } catch (err) {
 console.error(”Now Playing API error:”, err);
 }
 }

 async function loadScheduleBar() {
 const baseDate = new Date();
 const startWindow = new Date(baseDate);
 const endWindow = new Date(baseDate);

 startWindow.setDate(baseDate.getDate() – 1);
 endWindow.setDate(baseDate.getDate() + 2);

 const startDateStr = formatDate(startWindow);
 const endDateStr = formatDate(endWindow);

 const apiUrl = `https://api.audacy.com/experience/v2/stations/${stationId}/schedules?startDate=${startDateStr}&endDate=${endDateStr}&timezone=UTC`;

 try {
 const res = await fetch(apiUrl);
 const data = await res.json();
 const occurrences = data?.occurrences || [];

 if (!occurrences.length) return;

 const stationTimezone = occurrences[0].timezone || timezone || “UTC”;
 const todayLocal = getTodayInTimezone(stationTimezone);

 const todaysShows = occurrences
 .filter(show => {
 const startDayLocal = getLocalDateInTimezone(show.startDateTime, stationTimezone);
 const endDayLocal = getLocalDateInTimezone(show.endDateTime, stationTimezone);

 return startDayLocal === todayLocal || endDayLocal === todayLocal;
 })
 .sort((a, b) => new Date(a.startDateTime) – new Date(b.startDateTime));

 if (!todaysShows.length) return;

 const currentShow =
 todaysShows.find(show => show.isOnNow) ||
 todaysShows.find(show => {
 const now = Date.now();
 return new Date(show.startDateTime).getTime() <= now &&
 new Date(show.endDateTime).getTime() > now;
 }) ||
 todaysShows[0];

 currentTrackEl.textContent = currentShow.showTitle || “”;
 if (dropdownTitleEl) dropdownTitleEl.textContent = “Today’s Schedule”;

 listEl.innerHTML = “”;
 todaysShows.slice(0, 20).forEach(show => {
 listEl.appendChild(buildScheduleRow(show, stationTimezone));
 });

 playerBar.classList.remove(”hidden”);
 } catch (err) {
 console.error(”Schedule API error:”, err);
 }
 }
 if (stationType === “music”) {
 loadMusicBar();
 } else if (stationType === “sports” || stationType === “news”) {
 loadScheduleBar();
 }

 const playerContent = document.querySelector(”.player-content”);
 if (playerContent) {
 playerContent.addEventListener(”click”, function () {
 playerContent.classList.toggle(”visible”);
 });
 }
});





