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