diff --git a/gas.py b/gas.py index f43964c..bcec441 100644 --- a/gas.py +++ b/gas.py @@ -1,83 +1,80 @@ -import requests -import mysql.connector -from mysql.connector import Error - -def insert_gas_price_data(): - connection = None - - try: - url = "https://enever.nl/api/gasprijs_vandaag.php?token=5a7d9b371fe147cfc8100bcf6d9ebd55" - response = requests.get(url) - - if response.status_code != 200: - raise Exception('Fout bij het ophalen van de gasdata.') - - data = response.json() - - if data is None or 'data' not in data: - raise Exception('Fout bij het decoderen van de JSON-data.') - - 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 = """ - INSERT INTO gas_price_data (datetime, provider_code, price) - VALUES (%s, %s, %s) - ON DUPLICATE KEY UPDATE price = %s - """ - - providers = { - 'EGSI': 'prijsEGSI', - 'EOD': 'prijsEOD', - 'ANWB': 'prijsANWB', - 'BE': 'prijsBE', - 'EE': 'prijsEE', - 'EN': 'prijsEN', - 'EVO': 'prijsEVO', - 'EZ': 'prijsEZ', - 'FR': 'prijsFR', - 'GSL': 'prijsGSL', - 'MDE': 'prijsMDE', - 'NE': 'prijsNE', - 'PE': 'prijsPE', - 'QU': 'prijsQU', - 'SS': 'prijsSS', - 'TI': 'prijsTI', - 'VDB': 'prijsVDB', - 'VON': 'prijsVON', - 'VF': 'prijsVF', - 'WE': 'prijsWE', - 'ZP': 'prijsZP' - } - - for entry in data['data']: - datetime = entry['datum'] - for code, price_field in providers.items(): - if price_field in entry: - price = entry[price_field] - try: - cursor.execute(query, (datetime, code, price, price)) - connection.commit() - except Error as e: - print(f"Fout bij invoeren van gasdata voor provider {code}: {e}") - continue - - except Error as e: - print(f"Fout bij databaseverbinding: {e}") - except Exception as e: - print(f"Algemene fout: {e}") - finally: - if connection is not None and connection.is_connected(): - cursor.close() - connection.close() - -if __name__ == "__main__": - insert_gas_price_data() +import requests +import mysql.connector +from mysql.connector import Error + +def insert_gas_price_data(): + connection = None + + try: + # 1. Gasdata ophalen + url = "https://enever.nl/apiv3/gasprijs_vandaag.php?token=5a7d9b371fe147cfc8100bcf6d9ebd55" + response = requests.get(url) + + if response.status_code != 200: + raise Exception(f'Fout bij het ophalen van de gasdata. Status: {response.status_code}') + + data = response.json() + + if not data or 'data' not in data: + raise Exception('Fout bij het decoderen van de JSON-data of lege respons.') + + # 2. Database verbinding + 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() + + # Gebruik VALUES(price) in de update voor een schonere query + query = """ + INSERT INTO gas_price_data (datetime, provider_code, price) + VALUES (%s, %s, %s) + ON DUPLICATE KEY UPDATE price = VALUES(price) + """ + + providers = { + 'EGSI': 'prijsEGSI', 'EOD': 'prijsEOD', 'ANWB': 'prijsANWB', + 'BE': 'prijsBE', 'EE': 'prijsEE', 'EN': 'prijsEN', + 'EVO': 'prijsEVO', 'EZ': 'prijsEZ', 'FR': 'prijsFR', + 'GSL': 'prijsGSL', 'MDE': 'prijsMDE', 'NE': 'prijsNE', + 'PE': 'prijsPE', 'QU': 'prijsQU', 'SS': 'prijsSS', + 'TI': 'prijsTI', 'VDB': 'prijsVDB', 'VON': 'prijsVON', + 'VF': 'prijsVF', 'WE': 'prijsWE', 'ZP': 'prijsZP' + } + + count = 0 + for entry in data['data']: + # FIX: Schoon de datum string op voor MySQL + raw_dt = entry['datum'] + clean_dt = raw_dt.replace('T', ' ').split('+')[0] + + for code, price_field in providers.items(): + if price_field in entry and entry[price_field] is not None: + price = entry[price_field] + try: + cursor.execute(query, (clean_dt, code, price)) + count += 1 + except Error as e: + print(f"Fout bij klaarzetten gasdata voor {code} op {clean_dt}: {e}") + + # 3. Commit alle wijzigingen in een keer + connection.commit() + print(f"Succesvol {count} gasprijs-records verwerkt.") + + except Error as e: + print(f"Fout bij databaseverbinding: {e}") + except Exception as e: + print(f"Algemene fout: {e}") + finally: + if connection is not None and connection.is_connected(): + cursor.close() + connection.close() + print("Databaseverbinding gesloten.") + +if __name__ == "__main__": + insert_gas_price_data() \ No newline at end of file