beci-anzeige/fetchapi.js

100 lines
2.9 KiB
JavaScript
Raw Normal View History

2024-12-06 18:42:52 +00:00
const HEADER_ROW = false;
// Define the API URL
// const urlStop = 'https://api.swu.de/mobility/v1/stop/attributes/BaseData?StopNumber=1240&ContentScope=extended';
const urlDepartures = 'https://api.swu.de/mobility/v1/stop/passage/Departures?StopNumber=1240&Limit=10';
// const apiUrl = 'Departures.json';
// Make a GET request
function refreshData() {
fetch(urlDepartures)
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => {
showAllDepsByTime(data);
})
.catch(error => {
console.error('Error:', error);
});
}
// Groups Departures into map by route
function groupDepartures(data) {
const routes = new Map();
for (let x of data.StopPassage.DepartureData) {
if (routes.has(x.RouteNumber)) {
routes.get(x.RouteNumber).push(x);
} else {
routes.set(x.RouteNumber, [x]);
}
}
return routes;
}
function showAllDepsByTime(data) {
const date = new Date(data.StopPassage.CurrentTimestamp);
document.getElementById('stationName').innerHTML = data.StopPassage.StopName;
document.getElementById('timeBox').innerHTML = date.toLocaleTimeString('de-DE');
const table = getTable(
[cell => cell.innerHTML = "Linie",
cell => cell.innerHTML = "Ziel",
cell => cell.innerHTML = "Abfahrt"],
[(cell, datap) => {cell.appendChild(getRouteImage(datap.RouteName));
cell.setAttribute("class", "cellRoute")},
(cell, datap) => {cell.innerHTML = datap.DepartureDirectionText;
cell.setAttribute("class", "cellDest")},
(cell, datap) => {cell.innerHTML = "" + Math.floor((datap.DepartureCountdown + datap.DepartureDeviation) / 60);
cell.setAttribute("class", "cellTime")}],
data.StopPassage.DepartureData.filter(departure => departure.RouteName != '-')
);
const contentSection = document.getElementById('contentSection');
if (contentSection.hasChildNodes()) {
contentSection.replaceChild(table,contentSection.firstElementChild);
} else {
contentSection.appendChild(table);
}
}
function getRouteImage(route) {
const img = document.createElement('img');
img.src = 'https://www.swu.de/typo3conf/ext/swu_timetables/Resources/Public/Icons/Routes/linie-' + route + '.svg';
img.setAttribute("class","routeImage");
return img;
}
function getTable(listHead, list, listData) {
const table = document.createElement('table');
if (HEADER_ROW) {
const headrow = document.createElement('tr');
table.appendChild(headrow);
for (let fn of listHead) {
const cell = document.createElement('th');
fn(cell);
headrow.appendChild(cell);
}
}
for (let dataPoint of listData) {
const row = document.createElement('tr');
for (let fn of list) {
const cell = document.createElement('td');
fn(cell, dataPoint);
row.appendChild(cell);
}
table.appendChild(row);
}
return table;
}
refreshData();
2024-12-06 19:36:36 +00:00
setInterval(refreshData, 15000);