⚡ v1
This commit is contained in:
parent
b261556449
commit
33d83aaa4f
17
.gitea/workflows/pull.yaml
Normal file
17
.gitea/workflows/pull.yaml
Normal 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
135
README.md
@ -1,2 +1,137 @@
|
|||||||
# menicka-cron
|
# 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
143
cli.mjs
Executable 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
5
jsconfig.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"include": [
|
||||||
|
"cli.mjs"
|
||||||
|
]
|
||||||
|
}
|
1077
package-lock.json
generated
Normal file
1077
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
29
package.json
Normal file
29
package.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user