This commit is contained in:
Jan Andrle 2024-07-17 16:13:54 +02:00
parent b261556449
commit 33d83aaa4f
Signed by: jaandrle
GPG Key ID: B3A25AED155AFFAB
6 changed files with 1406 additions and 0 deletions

View File

@ -0,0 +1,17 @@
name: Update menicka
on:
workflow_dispatch:
schedule:
- cron: '0 9 * * 1' # every monday at 9:00
jobs:
update-rss:
runs-on: ubuntu-latest
steps:
- uses: https://gitea.com/actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: https://gitea.com/actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: lts/*
cache: 'npm'
- run: npm ci
- run: npx nodejsscript cli.mjs pull --git

135
README.md
View File

@ -1,2 +1,137 @@
# menicka-cron
<!-- generated -->
[pondělí](#pondeli) · [úterý](#utery) · [středa](#streda) · [čtvrtek](#ctvrtek) · [pátek](#patek) · [sobota](#sobota) · [neděle](#nedele)
## pondělí
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true): —
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Hovězí vývar s masem a nudlemi (1,1a,9)
- Bramborová s houbami (1,1a,6,7,9)
- Vepřový vrabec se špenátem, bramborové knedlíky (1,1a,3)
- Hovězí nudličky stroganov, dušená rýže (1,1a,7)
- Pečené kuřecí stehno alla bažant, bramborová kaše (1,1a,7)
- Hrachová kaše s uzeným masem (1,1a)
- Zeleninový bulgur (1,1a)
- Smažený sýr, vařené brambory (7)
- Jahody se šlehačkou (7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Hráškový krém s rostlinnou smetanou
- Hlavní chod: Dal makhani - krémová indická černá čočka s jasmínovou rýží a koriandrem
## úterý
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true): —
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Kuřecí vývar s masem a těstovinovou rýží (1,1a,3)
- Boršč (1,1a,7,9,12)
- Segedínský vepřový guláš, houskové knedlíky (1,1a,3,7)
- Kuřecí prsa na žampionech, dušená rýže (1,1a)
- Rybí filé pečené na másle, máslová baby karotka (4,7)
- Vepřové rizoto se sýrem eidam a okurkou (7)
- Pohanka s grilovanou zeleninou a olivami
- Kuřecí prsíčka v cizrně, vařené brambory (3,7,13)
- Jahody se šlehačkou (7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Kulajda s lesními houbami a bramborem (6)
- Hlavní chod: Sweet chilli křupavé tofu s rýží a salátkem (6)
## středa
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true):
- Polévka: Dýňovo-batátový krém se semínky 179
- Mix grilovaných mas, anglická slanina, hranolky, pikantní dip 179
- Hovězí krk na červeném víně, bramborová kaše s majoránkou 137912
- Vepřové maso na houbách, houskový knedlík 1379
- Kuřecí směs s thajskou zeleninou, rýže 1467911
- Míchaný zeleninový salát, grilované kuřecí nudličky, vinegret dresink 179
- Těstoviny s masovými koulemi v parmazánové krustě 1379
- Buchtičky se šodo 137
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Hovězí vývar s masem a nudlemi (1,1a,9)
- Kulajda s bramborami (1,1a,3,7,9)
- Vařené hovězí s rajskou omáčkou, vařené těstoviny (1,1a,9)
- Vepřový kotlet po srbsku, dušená rýže (1,1a)
- Rybí filé pečené na rozmarýnu, dušená brokolice na másle (4,7)
- Chana masala (9,12)
- Vepřový řízek Ondráš, vařené brambory (3,7)
- Tiramisu (1,1a,3,7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Čočková s kořenovou zeleninou (9)
- Hlavní chod: Buddha bowl s celozrnnou rýží, čerstvou a nakládanou zeleninou, tofu, klíčky a zálivkou z kokosového mléka (6)
## čtvrtek
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true):
- Polévka: Hovězí vývar s masem, zeleninou a fritátovými nudlemi 1379
- Medailonky z vepřové panenky, smetanovo-hříbková omáčka, šťouchané brambory 17
- Hovězí chilli nudličky, rýže 179
- Vepřová roláda z bůčku, špenát, bramborový knedlik, 1379
- Bulgurový salát s granatovým jablkem a feta sýrem 1710
- Kuřecí směs s thajskou zeleninou, rýže 1467911
- Zeleninový salát se šunkou, sýrem a vařeným vejcem, bageta 137
- Pečené kuře na rozmarýnu a másle, vařený brambor, okurkový salát 137
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Kuřecí vývar s masem a zeleninou (9)
- Čočková s párkem (1,1a)
- Pečený pstruh na másle se zeleninou wok (4,7)
- Pečené kuřecí stehno na červeném curry, dušená rýže (4)
- Halušky s vepřovým masem a smetanou (1,1a,3,7)
- Robi nudličky se zeleninou (1,1a,6,7)
- Kuřecí závitek s fazolkami, vařené brambory (7)
- Jahody se šlehačkou (7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Celerový krém s karamelizovaným jablkem (9)
- Hlavní chod: Pečené řepné karbanátky s bramborovou kaší a mrkvovým salátkem
## pátek
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true):
- Polévka: Boršč se zakysanou smetanou 179
- Variace listových salátů s uzeným lososem, avokádem a medovo-horčičným dresinkem 41011
- Smažený kuřecí gordon bleu, šťouchaný brambor, rajčatový salát 137
- Pečená krkovice, bílé zelí, houskový knedlík 1379
- Bavorské vdolečky s povidly a šlehačkou 137
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Kuřecí vývar s masem a nudlemi (1,1a,9)
- Zelná s klobásou a brambory (1,1a,7)
- Krůtí chilli kotlík, smažené hranolky (1,1a)
- Marinovaný steak z vepřový krkovice v bbq omáčce, opečené brambory (1,1a,7,9,12)
- Penne s kuřecím masem a smetanovo kari omáčkou (1,1a,7)
- Pečený pstruh po mlynářsku, vařené brambory (1,1a,4,7)
- Smažená zeleninová rýže s tofu (1,1a,6,11)
- Segedínský vepřový guláš, kynuté knedlíky (6,7,10,13)
- Chia puding s jahodami a müsli (1,1a,1d,5,6,7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Zeleninový vývar s kořenovou zeleninou a nudličkami (1\*,9)
- Hlavní chod: Křupavé tofu v přírodní omáčce s pečeným bramborem a dušenou mrkví (6)
## sobota
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true):
- Restaurace má tento den zavřeno.
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Pórková s vejci (1,1a,1c,3,7,9)
- Dršťková (1,1a,9)
- Hovězí líčka na víně, bramborová kaše s máslem (1,1a,9,12)
- Dukátové buchtičky s vanilkovým krémem (1,1a,3,6,7)
- Lasagne s vepřovým masem (1,1a,7,9)
- Pečený candát s cherry rajčátky a jarní cibulkou, bramborová kaše (4,7)
- Zapečený květák s brokolicí a sýrem (1,1a,7)
- Cizrnové měšce se špenátem, vařené brambory (7)
- Jahody se šlehačkou (7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Česnečka s rostlinným sýrem a krutony (1\*)
- Brunch od 11 hodin
## neděle
- [🏭 Jídelna Čakovice](https://www.menicka.cz/api/iframe/?id=8542&continuous=true):
- Restaurace má tento den zavřeno.
- [🏪 Globus](https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu):
- Hovězí vývar s masem a rýží (9)
- Frankfurtská (1,1a,7)
- Kuřecí nudličky pikantní, smažené hranolky (1,1a,12)
- Rýžový nákyp s ovocem (3,7)
- Hovězí roštěná se šunkou a pečený vejcem, smažené hranolky (1,1a,3)
- Koprová omáčka s vařeným vejcem, vařené brambory (1,1a,3,7,9)
- Hovězí španělský ptáček, dušená rýže (1,3)
- Tapiokový puding s borůvkami a müsli (1,1a,1d,5,6,7)
- [🍎 MAMAFOOD](https://www.mamafoodbistro.cz/#poledne):
- Polévka: Česnečka s rostlinným sýrem a krutony (1\*)
- Brunch od 11 hodin
<!-- /generated -->

143
cli.mjs Executable file
View File

@ -0,0 +1,143 @@
#!/usr/bin/env -S npx nodejsscript
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
const { version, description }= s.cat("package.json").xargs(JSON.parse);
$.api()
.version(version)
.describe(description)
.command("pull", "Update article list")
.option("--git", "Update git repository")
.action(async function pull({ git: is_git= false }){
if(is_git) s.run`git pull --rebase`;
const menicka= await Promise.allSettled([ menickoCukrovarka(), menickoGlobus(), menickoMamafoodbistro() ])
.then(results=> results.filter(p=> p.status!=="rejected").map(p=> p.value));
const days= {
pondeli: "pondělí",
utery: "úterý",
streda: "středa",
ctvrtek: "čtvrtek",
patek: "pátek",
sobota: "sobota",
nedele: "neděle"
};
let out= Object.entries(days)
.map(([ k, v ])=> `[${v}](#${k})`)
.join(" · ");
for(const day of Object.values(days)){
out+= `\n\n## ${day}\n`;
out+= menicka.map(dayToMd(day)).join("\n");
}
const gen= [ "<!-- generated -->", "<!-- /generated -->" ];
const readme= s.cat("README.md");
out= [
readme.slice(0, readme.indexOf(gen[0])-1),
gen[0], out.replace(/(\*)/g, "\\$1"), gen[1],
readme.slice(readme.indexOf("\n", readme.indexOf(gen[1]))+1)
].join("\n");
s.echo(out).to("README.md");
if(is_git) gitCommit(changed, "pull");
$.exit(0);
})
.parse();
function dayToMd(day){
return function({ symbol, name, url, dny }){
let has= Reflect.has(dny, day);
if(!has && (day==="sobota" || day==="neděle") && Reflect.has(dny, "víkend")){
has= true;
day= "víkend";
}
const section= `[${symbol} ${name}](${url})`;
if(!has) return `- ${section}: —`;
let out= `- ${section}:`;
const { polevky, hlavni }= dny[day];
const food= f=> out+= `\n - ${f}`;
polevky.forEach(food);
hlavni.forEach(food);
return out;
};
}
function gitCommit(files, des= "not specified"){
if(!files.length || !s.run`git diff --numstat`.trim())
return echo("Nothig todo");
echo("Diff to save");
s.run`git config user.name "Bot"`;
s.run`git config user.email "${"zc.murtnec@naj.elrdna".split("").reverse().join("")}"`;
s.run`git add ${files}`;
s.run`git commit -m "Updated by bot ${des}"`;
s.run`git push`;
s.run`git config --remove-section user`;
}
import { JSDOM, VirtualConsole } from "jsdom";
async function fetchHTML(url){
const res= await fetch(url);
if(res.status !== 200) throw new Error(`Fetch failed with status ${res.status}`);
let text;
if(res.headers.get("Content-Type").includes("charset=windows-1250"))
text= await res.arrayBuffer().then(buff=> new TextDecoder('windows-1250').decode(buff));
else
text= await res.text();
const virtualConsole = new VirtualConsole();
virtualConsole.on("error", () => {
// No-op to skip console errors.
});
return (new JSDOM(text, { virtualConsole })).window;
}
async function menickoMamafoodbistro(){
const url= "https://www.mamafoodbistro.cz/#poledne";
const { document }= await fetchHTML(url);
const menicko= document.querySelectorAll("section")[2].getElementsByClassName("sqs-html-content")[1];
const dny= {};
for(const den of menicko.getElementsByTagName("h4")){
const polevka= den.nextElementSibling;
const hlavni= polevka.nextElementSibling;
Reflect.set(dny, den.textContent.trim().toLowerCase(), {
polevky: [ polevka.textContent ],
hlavni: [ hlavni.textContent ],
});
}
return { name: "MAMAFOOD", symbol: "🍎", url, dny };
}
async function menickoCukrovarka(){
const url= "https://www.menicka.cz/api/iframe/?id=8542&continuous=true";
const { document }= await fetchHTML(url);
const food= el=> el.getElementsByClassName("food")[0].textContent;
const dny= {};
for(const den of document.getElementsByClassName("content")){
let name= den.getElementsByTagName("h2")[0].textContent.trim();
name= name.slice(0, name.indexOf(" ")).toLowerCase();
const [ polevka ]= den.getElementsByClassName("soup");
const hlavni= den.getElementsByClassName("main");
Reflect.set(dny, name, {
polevky: [ food(polevka) ],
hlavni: [ ...hlavni ].map(food),
});
if(name==="neděle") break;
}
return { name: "Jídelna Čakovice", symbol: "🏭", url, dny };
}
async function menickoGlobus(){
const url= "https://www.globus.cz/praha-cakovice/sluzby-a-produkty/restaurace#klasicke-menu";
const { document }= await fetchHTML(url);
const menicko= document.getElementById("klasicke-menu");
const dny= {};
for(const den of menicko.getElementsByTagName("li")){
const name= den.getElementsByTagName("h3")[0].textContent.trim();
const vse= [ ...den.getElementsByTagName("tr") ].map(el=> el.getElementsByTagName("td")[1].textContent.trim());
Reflect.set(dny, name, {
polevky: vse.slice(0, 2),
hlavni: vse.slice(2),
});
}
return { name: "Globus", symbol: "🏪", url, dny };
}

5
jsconfig.json Normal file
View File

@ -0,0 +1,5 @@
{
"include": [
"cli.mjs"
]
}

1077
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

29
package.json Normal file
View File

@ -0,0 +1,29 @@
{
"name": "menicka-cron",
"version": "1.0.0",
"description": "",
"bin": "cli.mjs",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git@jaandrle.cz:jaandrle/menicka-cron.git"
},
"bugs": {
"url": "https://gitea.jaandrle.cz/jaandrle/menicka-cron/issues"
},
"homepage": "https://gitea.jaandrle.cz/jaandrle/menicka-cron",
"keywords": [
"cron",
"javascript"
],
"author": "Jan Andrle <andrle.jan@centrum.cz>",
"license": "MIT",
"peerDependencies": {
"nodejsscript": "~1.0"
},
"dependencies": {
"jsdom": "~24.1"
}
}