105 lines
5 KiB
Python
105 lines
5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script de test pour analyser la structure des données Viparis
|
|
"""
|
|
|
|
import requests
|
|
import json
|
|
import re
|
|
from bs4 import BeautifulSoup
|
|
|
|
def analyze_viparis_data():
|
|
"""Analyse la structure des données Viparis"""
|
|
url = "https://www.viparis.com/actualites-evenements/evenements"
|
|
|
|
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:
|
|
print(f"🔍 Analyse de la structure des données Viparis: {url}")
|
|
response = requests.get(url, headers=headers, timeout=30)
|
|
response.raise_for_status()
|
|
|
|
soup = BeautifulSoup(response.text, 'html.parser')
|
|
|
|
# Chercher les scripts avec des données JSON
|
|
script_tags = soup.find_all('script')
|
|
|
|
for i, script in enumerate(script_tags):
|
|
if script.string and 'window.__NUXT__' in script.string:
|
|
print(f"\n📜 Script {i+1} trouvé avec window.__NUXT__")
|
|
script_content = script.string
|
|
|
|
# Extraire le JSON
|
|
match = re.search(r'window\.__NUXT__\s*=\s*({.*?});', script_content, re.DOTALL)
|
|
if match:
|
|
try:
|
|
nuxt_data = json.loads(match.group(1))
|
|
print("✅ JSON parsé avec succès")
|
|
|
|
# Analyser la structure
|
|
print(f"\n🔍 Structure de niveau 1:")
|
|
for key in nuxt_data.keys():
|
|
print(f" - {key}: {type(nuxt_data[key])}")
|
|
|
|
# Chercher les événements
|
|
if 'state' in nuxt_data:
|
|
state = nuxt_data['state']
|
|
print(f"\n🔍 Structure de state:")
|
|
for key in state.keys():
|
|
print(f" - {key}: {type(state[key])}")
|
|
|
|
# Chercher les événements dans différentes clés possibles
|
|
possible_event_keys = ['events', 'event', 'data', 'items', 'results']
|
|
for key in possible_event_keys:
|
|
if key in state:
|
|
events_data = state[key]
|
|
print(f"\n📅 Données d'événements trouvées dans '{key}':")
|
|
print(f" Type: {type(events_data)}")
|
|
if isinstance(events_data, list):
|
|
print(f" Nombre d'éléments: {len(events_data)}")
|
|
if events_data:
|
|
print(f" Premier élément: {json.dumps(events_data[0], indent=2)[:500]}...")
|
|
elif isinstance(events_data, dict):
|
|
print(f" Clés: {list(events_data.keys())}")
|
|
if 'data' in events_data:
|
|
data = events_data['data']
|
|
if isinstance(data, list):
|
|
print(f" Nombre d'événements dans data: {len(data)}")
|
|
if data:
|
|
print(f" Premier événement: {json.dumps(data[0], indent=2)[:500]}...")
|
|
|
|
# Chercher des patterns d'événements dans tout le JSON
|
|
print(f"\n🔍 Recherche de patterns d'événements...")
|
|
json_str = json.dumps(nuxt_data)
|
|
|
|
# Chercher des noms d'événements connus
|
|
event_names = ['BattleKart', 'Virtual Room', 'PRODURABLE', 'RÉÉDUCA', 'SALON']
|
|
for name in event_names:
|
|
if name in json_str:
|
|
print(f" ✅ Trouvé '{name}' dans les données")
|
|
|
|
# Chercher des dates
|
|
date_patterns = [r'\d{4}-\d{2}-\d{2}', r'\d{1,2}/\d{1,2}/\d{4}']
|
|
for pattern in date_patterns:
|
|
matches = re.findall(pattern, json_str)
|
|
if matches:
|
|
print(f" 📅 Dates trouvées ({pattern}): {matches[:5]}")
|
|
|
|
break
|
|
|
|
except json.JSONDecodeError as e:
|
|
print(f"❌ Erreur JSON: {e}")
|
|
continue
|
|
else:
|
|
print("❌ Pattern window.__NUXT__ non trouvé")
|
|
|
|
print("\n✅ Analyse terminée")
|
|
|
|
except Exception as e:
|
|
print(f"❌ Erreur: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
analyze_viparis_data()
|
|
|