From 4ebd98b92093b0c0b7fc340a37747c8839e4a33c Mon Sep 17 00:00:00 2001 From: Bhasher Date: Wed, 29 Mar 2023 20:00:10 +0200 Subject: [PATCH] Initial commit --- .gitignore | 3 ++ config.example.py | 4 +++ main.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++ 4 files changed, 84 insertions(+) create mode 100644 .gitignore create mode 100644 config.example.py create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7a79f2e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +config.py +token +/__pycache__/ \ No newline at end of file diff --git a/config.example.py b/config.example.py new file mode 100644 index 0000000..17370e7 --- /dev/null +++ b/config.example.py @@ -0,0 +1,4 @@ + +email = '' +telegram_token = '' +telegram_id = '' \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..3287b01 --- /dev/null +++ b/main.py @@ -0,0 +1,74 @@ +import config + +from tgtg import TgtgClient +import os +import json +import telegram +import asyncio +import time +import datetime + + +async def main(): + if not os.path.exists('token'): + client = TgtgClient(email=config.email) + credentials = client.get_credentials() + with open('token', 'w') as file: + file.write(credentials) + else: + with open('token', 'r') as file: + credentials = file.read() + + data = json.loads(credentials.replace('\'', '"')) + + client = TgtgClient(**data) + + last = [] + + while True: + items = client.get_items() + + texts = ['Too good to go'] + + next = [] + + for item in items: + if item['items_available'] > 0: + next.append(item["item"]["item_id"]) + if item["item"]["item_id"] not in last: + amount = item["items_available"] + name = item["item"]["name"] + price = item["item"]["price_including_taxes"]["minor_units"]/(10**item["item"]["price_including_taxes"]["decimals"]) + store = item["store"]["store_name"] + + if not name: + name = "Panier anti-gaspi" + + texts.append(f' - {amount} item(s) of "{name}" ({price:.2f}€) available at "{store}"') + elif item["item_id"] in last: + amount = item["items_available"] + name = item["item"]["name"] + price = item["item"]["price_including_taxes"]["minor_units"]/(10**item["item"]["price_including_taxes"]["decimals"]) + store = item["store"]["store_name"] + + if not name: + name = "Panier anti-gaspi" + + texts.append(f' - No more "{name}" ({price:.2f}€) available at "{store}"') + + + if len(texts) > 1: + bot = telegram.Bot(config.telegram_token) + + print(f'\n{datetime.datetime.now()}: {len(texts)-1} new items available') + + async with bot: + await bot.send_message(chat_id=config.telegram_id, text='\n'.join(texts)) + else: + print('-', end='', flush=True) + + last = next + time.sleep(60) + +if __name__ == '__main__': + asyncio.run(main()) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3ec87d0 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +# Tested versions. Upgrade at your own risks +tgtg==0.15.0 +python-telegram-bot==20.2 \ No newline at end of file