import json from datetime import date, datetime, timedelta import requests date_format = '%Y-%m-%dT%H:%M:%S%z' class EngieAPI: def __init__(self): self.url = "https://benergy-back.azurewebsites.net/api/gateway/mercure" self.headers = { "Host": "benergy-back.azurewebsites.net", "Content-Type": "application/json", "Origin": "https://engieenergy.azurewebsites.net", "Accept-Encoding": "gzip, deflate, br", "Accept": "application/json, text/plain, */*", "User-Agent": "Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36", "Referer": "https://engieenergy.azurewebsites.net/", "Content-Length": "294", "Accept-Language": "en-GB,en;q=0.9" } def get_epex_spot(self, date: date) -> list[float]: to_date = datetime(date.year, date.month, date.day, 23, 59, 59) from_date = to_date - timedelta(days=1, hours=23, minutes=59, seconds=59) data = { "ApplicationDate": { "From": from_date.strftime(date_format), "To": to_date.strftime(date_format), "UseTime": True }, "IncludeOffset": True, "Items": [ { "IdRef": 7070 } ] } res = requests.post(self.url, headers=self.headers, data=json.dumps(data)) values = [] for j in res.json()[0]["Points"]: # check if the Date is the same as the one requested, attention to the timezone if datetime.strptime(j["Date"], date_format).date() == date: values.append(j["Value"]) if not values: raise ValueError("No data found for this date") return values