From 5ddc5e74464bed14a1aa23ad2aaa503dda4d0360 Mon Sep 17 00:00:00 2001 From: stanislas Date: Tue, 20 May 2025 00:54:57 +0200 Subject: [PATCH] =?UTF-8?q?R=C3=A9cup=C3=A8re=20le=20menu=20de=20la=20cr?= =?UTF-8?q?=C3=A8che,=20lit=20le=20pdf=20et=20envoie=20la=20bonne=20ligne?= =?UTF-8?q?=20par=20signal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++ main.py | 130 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++ 3 files changed, 136 insertions(+) create mode 100644 .gitignore create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7e99e7d --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +venv +.venv \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..9949ccc --- /dev/null +++ b/main.py @@ -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() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7bbec04 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +requests~=2.32.3 +pdfminer.six~=20250506 +python-dotenv~=1.1.0