51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Fetch Mealie meal plan and save simplified JSON for HA REST sensor."""
|
|
import json, urllib.request, datetime, os
|
|
|
|
# Read bearer token from secrets.yaml
|
|
token = None
|
|
with open('/config/secrets.yaml') as f:
|
|
for line in f:
|
|
if line.strip().startswith('mealie_bearer_token:'):
|
|
token = line.split(':', 1)[1].strip().strip('"')
|
|
break
|
|
|
|
if not token:
|
|
data = {"count": 0, "items": []}
|
|
else:
|
|
today = datetime.date.today()
|
|
end = today + datetime.timedelta(days=6)
|
|
url = f"http://10.0.0.142:9925/api/households/mealplans?start_date={today}&end_date={end}"
|
|
|
|
try:
|
|
req = urllib.request.Request(url, headers={"Authorization": token})
|
|
raw = json.loads(urllib.request.urlopen(req, timeout=10).read())
|
|
items = []
|
|
for i in raw.get("items", []):
|
|
recipe = i.get("recipe")
|
|
title = i.get("title") or ""
|
|
if recipe:
|
|
items.append({
|
|
"date": i["date"],
|
|
"recipe": {
|
|
"name": recipe.get("name", ""),
|
|
"slug": recipe.get("slug", ""),
|
|
},
|
|
})
|
|
elif title:
|
|
items.append({
|
|
"date": i["date"],
|
|
"recipe": {
|
|
"name": title,
|
|
"slug": "",
|
|
},
|
|
})
|
|
data = {"count": len(items), "items": items}
|
|
except Exception:
|
|
data = {"count": 0, "items": []}
|
|
|
|
os.makedirs('/config/www', exist_ok=True)
|
|
with open('/config/www/mealie.json', 'w') as f:
|
|
json.dump(data, f)
|
|
print("OK")
|