UNPKG

dsb-untis

Version:

DSB Untis timetable client/proxy server

78 lines (61 loc) 2.07 kB
import DsbUntis from "../src/index.js"; /* My actual use case: Get my son's timetable changes and display them on an LED matrix (https://github.com/aschuma/max7219-led-matrix-clock-mqtt-display) */ function extractClassRows(timetables, clazz) { const now = (() => { const d = new Date(); d.setHours(12, 0, 0, 0); return d; })(); const today = (() => `${now.getDate()}.${now.getMonth() + 1}.`)(); const tomorrow = (() => { const d = new Date(now); d.setDate(d.getDate() + 1); return `${d.getDate()}.${d.getMonth() + 1}.`; })(); console.log("timetables", JSON.stringify(timetables)); console.log("today", today); console.log("tomorrow", tomorrow); const todayFilter = (row, index) => index > 0 && row[0] == clazz && row[1] === today; const tomorrowFilter = (row, index) => index > 0 && row[0] === clazz && row[1] === tomorrow; const filterItems = (items, filter) => items .map((item) => { const answer = { ...item, table: item.table.filter((row, index) => filter(row, index)), }; return answer; }) .filter((item) => item.table.length > 0); const todayEntries = filterItems(timetables, todayFilter); const tomorrowEntries = filterItems(timetables, tomorrowFilter); const answer = { today: todayEntries, tomorrow: tomorrowEntries, }; return answer; } const flatMap = (list, fn) => list.reduce((acc, e) => [...acc, ...fn(e)], []); const collapse = (timetables) => { return { today: flatMap(timetables.today, (tt) => tt.table), tomorrow: flatMap(timetables.tomorrow, (tt) => tt.table), }; }; const clazz = "5c"; const username = process.env.USERNAME || "username"; const password = process.env.PASSWORD || "password"; const dsbUntis = new DsbUntis(username, password); const transform = (timetables) => extractClassRows(timetables, clazz); dsbUntis .fetch({extractors :["extractorTableMonListFlat"]}) .then(transform) .then(collapse) .then((data) => { console.log(JSON.stringify(data)); });