import requests from twilio.rest import Client import os from sys import exit from pathlib import Path from dotenv import load_dotenv import logging load_dotenv(verbose=True) api_url = 'https://www.boden.co.uk/api/stock/v1/styles?market=UK&language=en-gb&id=y1357' item_id = '40263442' # 40263447 low stock, 40263442 12-18m message_sent_file = './sent.txt' msg_to = '+447557447469' website_url = 'https://www.boden.co.uk/en-gb/rainbow-3-in-1-printed-jacket/sty-y1357' def get_logger(log_level=logging.WARN): log = logging.getLogger(__name__) log.setLevel(logging.WARN) log_handler = logging.StreamHandler() log_handler.setFormatter(logging.Formatter('[%(filename)s:(%(lineno)d)] %(levelname)s >> %(message)s')) log.addHandler(log_handler) return log def get_json_from_url(url: str) -> dict: r = requests.get(url) return r.json() def send_sms(to: str, msg: str): account_sid = os.environ['TWILIO_ACCOUNT_SID'] auth_token = os.environ['TWILIO_AUTH_TOKEN'] messaging_sid = os.environ['TWILIO_MESSAGE_SID'] client = Client(account_sid, auth_token) message = client.messages.create( messaging_service_sid=messaging_sid, body=msg, to=to ) log = logging.getLogger(__name__) log.debug(message.sid) def stop_if_previous_action(lock_file: str): if os.path.isfile(lock_file): log = logging.getLogger(__name__) log.info("Script has already run it's action before") exit() def action_taken(lock_file): Path(lock_file).touch() def main(log): # This script runs once, to avoid spamming SMS every time run stop_if_previous_action(message_sent_file) j = get_json_from_url(api_url) for id in j['Y1357']: if id['edp'] == item_id: if id['stockStatus'] == 'OutOfStock': log.info(f"Item is out of stock") else: log.info(f"Item is in stock") send_sms(msg_to, 'The coat is in stock at ' + website_url) # Prevents it being run again action_taken(message_sent_file) if __name__ == '__main__': log = get_logger(logging.WARN) main(log)