script comparant le baromètre avere et le nombre de points de charge dans les données ouvertes irve

This commit is contained in:
Tykayn 2025-03-20 12:06:24 +01:00 committed by tykayn
parent 2e05c12f79
commit 7dffcdf675

79
wip/get_avere_data.py Normal file
View file

@ -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}%")