Récupère le menu de la crèche, lit le pdf et envoie la bonne ligne par signal
This commit is contained in:
commit
5ddc5e7446
3 changed files with 136 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.idea
|
||||||
|
venv
|
||||||
|
.venv
|
130
main.py
Normal file
130
main.py
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
import base64
|
||||||
|
import tempfile
|
||||||
|
from pathlib import Path
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from pdfminer.high_level import extract_text
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
menu_link = os.environ.get("MENU_CRECHE_PDF_URL")
|
||||||
|
menu_pdf = requests.get(menu_link).content
|
||||||
|
|
||||||
|
tmp_folder = Path(tempfile.mkdtemp())
|
||||||
|
menu_file = tmp_folder / "menu.pdf"
|
||||||
|
menu_file.write_bytes(menu_pdf)
|
||||||
|
|
||||||
|
text = extract_text(menu_file, page_numbers=[0])
|
||||||
|
# print(text)
|
||||||
|
|
||||||
|
previous_was_title = False
|
||||||
|
curated_text = ""
|
||||||
|
for line in text.splitlines():
|
||||||
|
if len(line) == 1:
|
||||||
|
previous_was_title = True
|
||||||
|
elif len(line) > 1 and line[1] == " ":
|
||||||
|
curated_text += f"{line[2:]}\n"
|
||||||
|
previous_was_title = True
|
||||||
|
elif len(line) > 0 and line[0].islower():
|
||||||
|
curated_text = curated_text.removesuffix("\n")
|
||||||
|
curated_text += f"{line}\n"
|
||||||
|
previous_was_title = False
|
||||||
|
elif line == '' and previous_was_title:
|
||||||
|
previous_was_title = False
|
||||||
|
else:
|
||||||
|
curated_text += f"{line}\n"
|
||||||
|
previous_was_title = False
|
||||||
|
|
||||||
|
print(curated_text)
|
||||||
|
cells = curated_text.split("\n\n")
|
||||||
|
|
||||||
|
# remove month
|
||||||
|
month = cells.pop(0)
|
||||||
|
|
||||||
|
# remove meals titles
|
||||||
|
meal = {}
|
||||||
|
for i in range(5):
|
||||||
|
meal.update({i: cells.pop(0)})
|
||||||
|
|
||||||
|
days = []
|
||||||
|
for i in range(5):
|
||||||
|
days.append(cells.pop(0))
|
||||||
|
|
||||||
|
menus = {
|
||||||
|
"introduction": {
|
||||||
|
days[0]: {"midi": cells[0], "gouter": cells[5]},
|
||||||
|
days[1]: {"midi": cells[1], "gouter": cells[6]},
|
||||||
|
days[2]: {"midi": cells[2], "gouter": cells[7]},
|
||||||
|
days[3]: {"midi": cells[3], "gouter": cells[8]},
|
||||||
|
days[4]: {"midi": cells[4], "gouter": cells[9]},
|
||||||
|
},
|
||||||
|
"diversification": {
|
||||||
|
days[0]: {"midi": cells[10], "gouter": cells[15]},
|
||||||
|
days[1]: {"midi": cells[11], "gouter": cells[16]},
|
||||||
|
days[2]: {"midi": cells[12], "gouter": cells[17]},
|
||||||
|
days[3]: {"midi": cells[13], "gouter": cells[18]},
|
||||||
|
days[4]: {"midi": cells[14], "gouter": cells[19]},
|
||||||
|
},
|
||||||
|
"petit musclé": {
|
||||||
|
days[0]: {"midi": cells[20], "gouter": cells[24]},
|
||||||
|
days[1]: {"midi": cells[21], "gouter": cells[25]},
|
||||||
|
days[2]: {"midi": cells[22], "gouter": cells[26]},
|
||||||
|
days[3]: {"midi": cells[23], "gouter": cells[27]},
|
||||||
|
days[4]: {"midi": cells[32], "gouter": cells[39]},
|
||||||
|
},
|
||||||
|
"petit lion": {
|
||||||
|
days[0]: {"midi": cells[28], "gouter": cells[35]},
|
||||||
|
days[1]: {"midi": cells[29], "gouter": cells[36]},
|
||||||
|
days[2]: {"midi": cells[30], "gouter": cells[37]},
|
||||||
|
days[3]: {"midi": cells[31], "gouter": cells[38]},
|
||||||
|
days[4]: {"midi": cells[34], "gouter": cells[33]},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu = os.environ.get("MENU_KIND")
|
||||||
|
|
||||||
|
headers = {"Content-Type": "application/json"}
|
||||||
|
message = f"""
|
||||||
|
**Menu de la crèche** (message automatique)
|
||||||
|
|
||||||
|
Menu {menu}:
|
||||||
|
|
||||||
|
{days[0].upper()}:
|
||||||
|
*Midi*: {menus[menu][days[0]]["midi"]}
|
||||||
|
*Goûter*: {menus[menu][days[0]]["gouter"]}
|
||||||
|
|
||||||
|
{days[1].upper()}:
|
||||||
|
*Midi*: {menus[menu][days[1]]["midi"]}
|
||||||
|
*Goûter*: {menus[menu][days[1]]["gouter"]}
|
||||||
|
|
||||||
|
{days[2].upper()}:
|
||||||
|
*Midi*: {menus[menu][days[2]]["midi"]}
|
||||||
|
*Goûter*: {menus[menu][days[2]]["gouter"]}
|
||||||
|
|
||||||
|
{days[3].upper()}:
|
||||||
|
*Midi*: {menus[menu][days[3]]["midi"]}
|
||||||
|
*Goûter*: {menus[menu][days[3]]["gouter"]}
|
||||||
|
|
||||||
|
{days[4].upper()}:
|
||||||
|
*Midi*: {menus[menu][days[4]]["midi"]}
|
||||||
|
*Goûter*: {menus[menu][days[4]]["gouter"]}
|
||||||
|
"""
|
||||||
|
text_mode = "styled"
|
||||||
|
sender = os.environ.get("SIGNAL_SENDER")
|
||||||
|
attachment = base64.b64encode(menu_pdf)
|
||||||
|
body = {
|
||||||
|
"message": message,
|
||||||
|
"text_mode": text_mode,
|
||||||
|
"number": sender,
|
||||||
|
"recipients": [sender],
|
||||||
|
"base64_attachments": [f"data:application/pdf;filename=menu.pdf;base64,{attachment.decode()}"],
|
||||||
|
}
|
||||||
|
host = os.environ.get("SIGNAL_API_URL")
|
||||||
|
|
||||||
|
requests.post(host, headers=headers, json=body)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
3
requirements.txt
Normal file
3
requirements.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
requests~=2.32.3
|
||||||
|
pdfminer.six~=20250506
|
||||||
|
python-dotenv~=1.1.0
|
Loading…
Add table
Add a link
Reference in a new issue