mirror of
https://github.com/traberph/mensa-check.git
synced 2026-10-06 18:24:45 +00:00
59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
from fastapi import FastAPI
|
|
from fastapi import FastAPI, Request
|
|
from fastapi.responses import HTMLResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
from cachetools import cached, TTLCache
|
|
from bs4 import BeautifulSoup
|
|
import requests
|
|
import re
|
|
|
|
|
|
cache = TTLCache(maxsize=1, ttl=3600)
|
|
app = FastAPI()
|
|
templates = Jinja2Templates(directory="template")
|
|
regex = re.compile(r'Spätzle <sup>([^/]*)<\/sup>')
|
|
|
|
@cached(cache)
|
|
def checkMensa():
|
|
print("Checking Mensa")
|
|
|
|
url = 'https://seezeit.com/essen/speiseplaene/mensa-giessberg/'
|
|
r = requests.get(url)
|
|
soup = BeautifulSoup(r.text, 'html.parser')
|
|
|
|
today = soup.find('a', class_='heute')['rel'][0]
|
|
today_menu = soup.find('div', id=f'tab{today}')
|
|
meals = today_menu.find_all('div', class_='title')
|
|
|
|
spaetzle = None
|
|
for m in meals:
|
|
if "Spätzle" in m.text:
|
|
spaetzle = m
|
|
break
|
|
|
|
if spaetzle is not None:
|
|
ingredients = re.search(regex, str(spaetzle)).group(1)
|
|
if '28' in ingredients:
|
|
answer = "Spätzle with egg today"
|
|
color = "green"
|
|
emoji = "✅"
|
|
|
|
else:
|
|
answer = "WARNING: Spätzle without egg today"
|
|
color = "red"
|
|
emoji = "❌"
|
|
else:
|
|
answer = "No Spätzle today "
|
|
color = "grey"
|
|
emoji = "🤷🏻♂️"
|
|
|
|
return answer, color, emoji
|
|
|
|
@app.get("/", response_class=HTMLResponse)
|
|
async def root(request: Request):
|
|
answer, color, emoji = checkMensa()
|
|
return templates.TemplateResponse(
|
|
request=request, name="main.html", context={"text": answer, "color": color , "emoji": emoji}
|
|
)
|
|
|