import requests import mysql.connector from mysql.connector import Error def insert_dynamic_price_data(): connection = None try: # 1. Data ophalen van de API url = "https://enever.nl/apiv3/stroomprijs_vandaag.php?token=5a7d9b371fe147cfc8100bcf6d9ebd55" response = requests.get(url) if response.status_code != 200: raise Exception(f"Fout bij het ophalen van de data. Statuscode: {response.status_code}") data = response.json() if not data or 'data' not in data: raise Exception('Geen geldige data gevonden in de JSON-respons.') # 2. Verbinding maken met MySQL connection = mysql.connector.connect( host='127.0.0.1', database='alfen', user='alfen_user', password='5uVgr%f%s2P5GR@3q!', port=3307 ) if connection.is_connected(): cursor = connection.cursor() # Query met ON DUPLICATE KEY UPDATE query = """ INSERT INTO dynamic_price_data (datetime, provider_code, price) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE price = VALUES(price) """ # Mapping van Provider Code (DB) naar Veldnaam (API) providers = { 'AA': 'prijsAA', 'AIP': 'prijsAIP', 'ANWB': 'prijsANWB', 'BE': 'prijsBE', 'EE': 'prijsEE', 'EN': 'prijsEN', 'EVO': 'prijsEVO', 'EZ': 'prijsEZ', 'FR': 'prijsFR', 'GSL': 'prijsGSL', 'MDE': 'prijsMDE', 'NE': 'prijsNE', 'TI': 'prijsTI', 'VDB': 'prijsVDB', 'VON': 'prijsVON', 'WE': 'prijsWE', 'ZG': 'prijsZG', 'ZP': 'prijsZP' } count = 0 for entry in data['data']: # FIX: Verwijder de 'T' en de tijdzone (+02:00) voor MySQL compatibiliteit # Voorbeeld: '2026-03-30T00:00:00+02:00' -> '2026-03-30 00:00:00' raw_dt = entry['datum'] clean_dt = raw_dt.replace('T', ' ').split('+')[0] for code, price_field in providers.items(): if price_field in entry: price = entry[price_field] try: cursor.execute(query, (clean_dt, code, price)) count += 1 except Error as e: print(f"Fout bij klaarzetten data voor {code} op {clean_dt}: {e}") # 3. Alles in één keer committen voor betere performance connection.commit() print(f"Succesvol {count} records verwerkt/bijgewerkt.") except Error as e: print(f"Databasefout: {e}") except Exception as e: print(f"Algemene fout: {e}") finally: # Netjes afsluiten if connection is not None and connection.is_connected(): cursor.close() connection.close() print("Databaseverbinding gesloten.") if __name__ == "__main__": insert_dynamic_price_data()