Oprava parsování pro TechTower
This commit is contained in:
parent
c5103f902d
commit
3021e6159d
@ -360,6 +360,7 @@ function App() {
|
||||
<ul>
|
||||
<li>Parsování jídelních lístků na celý týden</li>
|
||||
<li>Oprava mizejícího Pizza day</li>
|
||||
<li>Oprava parsování celého týdne pro TechTower</li>
|
||||
</ul>
|
||||
</Alert>
|
||||
{dayIndex != null &&
|
||||
|
@ -235,46 +235,46 @@ export const getMenuTechTower = async (firstDayOfWeek: Date, mock: boolean = fal
|
||||
if (!font) {
|
||||
throw Error('Chyba: nenalezen <font> pro obědy v HTML Techtower.');
|
||||
}
|
||||
|
||||
const result: Food[][] = [];
|
||||
// TODO validovat, že v textu nalezeného <font> je rozsah, do kterého spadá vstupní datum
|
||||
const siblings = $(font).parent().parent().siblings();
|
||||
let parsing = false;
|
||||
const result: Food[][] = [];
|
||||
// TODO toto je kvůli poslednímu "línému" refaktoru neoptimální, stačilo by to projít jedním cyklem
|
||||
for (let dayIndex = 0; dayIndex < 5; dayIndex++) {
|
||||
if (!(dayIndex in result)) {
|
||||
result[dayIndex] = [];
|
||||
}
|
||||
for (let i = 0; i < siblings.length; i++) {
|
||||
const text = $(siblings.get(i)).text().trim().replace('\t', '').replace('\n', ' ');
|
||||
if (DAYS_IN_WEEK.includes(text)) {
|
||||
if (text === DAYS_IN_WEEK[dayIndex]) {
|
||||
// Našli jsme dnešní den, odtud začínáme parsovat jídla
|
||||
parsing = true;
|
||||
continue
|
||||
} else if (parsing) {
|
||||
// Už parsujeme jídla, ale narazili jsme na následující den - končíme
|
||||
break;
|
||||
}
|
||||
let currentDayIndex = 0;
|
||||
for (let i = 0; i < siblings.length; i++) {
|
||||
const text = $(siblings.get(i)).text().trim().replace('\t', '').replace('\n', ' ');
|
||||
if (DAYS_IN_WEEK.includes(text)) {
|
||||
if (text === DAYS_IN_WEEK[currentDayIndex]) {
|
||||
// Našli jsme dnešní den, odtud začínáme parsovat jídla
|
||||
parsing = true;
|
||||
continue
|
||||
} else if (parsing) {
|
||||
if (text.length == 0) {
|
||||
// Prázdná řádka - končíme (je za pátečním menu TechTower)
|
||||
break;
|
||||
}
|
||||
let price = '? Kč';
|
||||
let name = text;
|
||||
if (text.toLowerCase().endsWith('kč')) {
|
||||
const tmp = text.replace('\xA0', ' ').split(' ');
|
||||
const split = [tmp.slice(0, -2).join(' ')].concat(tmp.slice(-2));
|
||||
price = `${split.slice(1)[0]}\xA0Kč`
|
||||
name = split[0]
|
||||
}
|
||||
result[dayIndex].push({
|
||||
amount: '-',
|
||||
name,
|
||||
price,
|
||||
isSoup: isTextSoupName(name),
|
||||
})
|
||||
// Už parsujeme jídla, ale narazili jsme na následující den - posouváme index
|
||||
currentDayIndex += 1;
|
||||
continue;
|
||||
}
|
||||
} else if (parsing) {
|
||||
if (text.length == 0) {
|
||||
// Prázdná řádka - končíme (je za pátečním menu TechTower)
|
||||
break;
|
||||
}
|
||||
let price = '? Kč';
|
||||
let name = text;
|
||||
if (text.toLowerCase().endsWith('kč')) {
|
||||
const tmp = text.replace('\xA0', ' ').split(' ');
|
||||
const split = [tmp.slice(0, -2).join(' ')].concat(tmp.slice(-2));
|
||||
price = `${split.slice(1)[0]}\xA0Kč`
|
||||
name = split[0]
|
||||
}
|
||||
if (result[currentDayIndex] == null) {
|
||||
result[currentDayIndex] = [];
|
||||
}
|
||||
result[currentDayIndex].push({
|
||||
amount: '-',
|
||||
name,
|
||||
price,
|
||||
isSoup: isTextSoupName(name),
|
||||
})
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
Loading…
x
Reference in New Issue
Block a user