@heknon/node-webtop
Version:
A Backend for an unofficial WebTop (SmartSchool - Israel) API.
68 lines (67 loc) • 2.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const cheerio_1 = require("cheerio");
const utils_1 = require("../utils");
/**
* construct timetable type @see {TimeTable}
* @param timetableHtml the timetable html of webtop from https://www.webtop.co.il/pupilCardData.aspx?viewID=10&id=0&year=0
*/
function constructTimeTable(timetableHtml, removeEmptyHours) {
const $ = cheerio_1.load(timetableHtml);
const tt = [null, null, null, null, null, null];
const days = $('.scheduale-day-wrapper');
const hourMap = getHourMap($);
days.each((dayNum, day) => {
const ttDay = {};
const todayClasses = [];
let currHour = {};
let hourNum = 0;
day.children.forEach((hourData, i) => {
const hour = hourMap[hourNum];
if ((i & 1) === 1) {
if (hourData.children.length == 1) {
if (!removeEmptyHours)
todayClasses.push(currHour);
currHour = {};
}
else {
const details = $(hourData.children[0]).text().split(',');
currHour.subjectName = details[0];
currHour.teacherName = details[1].trimLeft();
const room = details[2].slice(5, details[2].length);
currHour.room = utils_1.isStringNumber(room) ? Number.parseInt(room) : room.trimLeft();
todayClasses.push(currHour);
currHour = {};
}
++hourNum;
}
else {
currHour.lessonSchoolBeginHour = hourNum;
currHour.lessonStartTime = hour.from;
currHour.lessonEndTime = hour.to;
}
});
ttDay.day = utils_1.dayNumberToString(dayNum + 1);
ttDay.dayNum = dayNum + 1;
ttDay.todayClasses = todayClasses;
tt[dayNum] = ttDay;
});
return tt;
}
exports.constructTimeTable = constructTimeTable;
const getHourMap = ($) => {
const times = Array();
$("#day_1").children('.scheduale-hour-name').each((i, elem) => {
const hoursStr = $(elem.children[1]).text();
let hours = hoursStr.length <= 2 ? null : hoursStr.match(/\d{1,2}:\d{1,2}\d/g);
if (hours === null && i === 12)
hours = ['17:10', '17:55'];
else if (hours === null && i === 13)
hours = ['18:00', '18:45'];
times.push({
from: utils_1.constructTime(hours[0]),
to: utils_1.constructTime(hours[1])
});
});
return times;
};