From 7dffcdf67589776a0e28ff1f2d071c70971d1f8f Mon Sep 17 00:00:00 2001 From: Tykayn Date: Thu, 20 Mar 2025 12:06:24 +0100 Subject: [PATCH] =?UTF-8?q?script=20comparant=20le=20barom=C3=A8tre=20aver?= =?UTF-8?q?e=20et=20le=20nombre=20de=20points=20de=20charge=20dans=20les?= =?UTF-8?q?=20donn=C3=A9es=20ouvertes=20irve?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wip/get_avere_data.py | 79 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 wip/get_avere_data.py diff --git a/wip/get_avere_data.py b/wip/get_avere_data.py new file mode 100644 index 0000000..944aeda --- /dev/null +++ b/wip/get_avere_data.py @@ -0,0 +1,79 @@ +import requests +from bs4 import BeautifulSoup +import re +import json +from datetime import datetime + +def extract_info_from_title(title): + # Extraire le nombre de points de recharge + nombre_match = re.search(r'(\d+\s*\d*)', title) + nombre = int(nombre_match.group(1).replace(' ', '')) if nombre_match else None + + # Extraire la date + date_match = re.search(r'fin (\w+) (\d{4})', title) + if date_match: + mois = date_match.group(1) + annee = date_match.group(2) + date = f"{mois} {annee}" + else: + date = None + + return { + "nombre_points": nombre, + "date": date + } + +def get_avere_data(): + # URL de la page AVERE + url = "https://www.avere-france.org/publications/?publication-type%5B%5D=barometres-recharge" + + # En-têtes pour simuler un navigateur + headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' + } + + try: + # Effectuer la requête HTTP + response = requests.get(url, headers=headers) + response.raise_for_status() + + # Parser le HTML + soup = BeautifulSoup(response.text, 'html.parser') + + # Trouver la première entrée dans la liste des publications + posts_list = soup.find('ul', class_='posts-list') + if posts_list: + first_title = posts_list.find('h3', class_='card-title') + if first_title: + title_text = first_title.text.strip() + return extract_info_from_title(title_text) + + return None + + except Exception as e: + print(f"Erreur lors de la récupération des données : {str(e)}") + return None + +def count_irve_features(): + try: + with open('../etalab_data/irve_bornes_recharge/latest.json', 'r') as f: + data = json.load(f) + return len(data.get('features', [])) + except Exception as e: + print(f"Erreur lors de la lecture du fichier JSON : {str(e)}") + return None + +if __name__ == "__main__": + # Récupérer les données AVERE + avere_data = get_avere_data() + if avere_data and avere_data['nombre_points']: + print(f"Données AVERE : {avere_data['nombre_points']} points de recharge (date: {avere_data['date']})") + + # Compter les points dans l'open data + irve_count = count_irve_features() + if irve_count is not None: + difference = avere_data['nombre_points'] - irve_count + print(f"Nombre de points dans l'open data : {irve_count}") + print(f"Différence : {difference} points manquants dans l'open data") + pourcentage_manquant = (difference / avere_data['nombre_points']) * 100 + print(f"Pourcentage manquant : {pourcentage_manquant:.1f}%")