RasffDBv1 / appsoluce.py
MMOON's picture
Create appsoluce.py
759901e verified
import os
import sqlite3
import streamlit as st
import pandas as pd
import requests
# Configuration du dépôt GitHub
REPO = "M00N69/RASFFDB"
FILE_PATH = "rasff_data.db"
API_URL = f"https://api.github.com/repos/{REPO}/commits"
RAW_URL_TEMPLATE = "https://raw.githubusercontent.com/{repo}/{commit}/{file}"
# Effacer le cache des données pour forcer le rechargement
st.cache_data.clear()
def download_latest_db():
"""Télécharge le fichier rasff_data.db avec le hash du dernier commit."""
# Récupérer le dernier commit
response = requests.get(API_URL)
if response.status_code != 200:
st.error("❌ Erreur lors de la récupération du commit.")
return False
# Extraire le hash du dernier commit
commits = response.json()
latest_commit_hash = commits[0]["sha"]
st.write(f"📋 **Dernier commit :** {latest_commit_hash}")
# Construire l'URL du fichier basé sur le dernier commit
download_url = RAW_URL_TEMPLATE.format(repo=REPO, commit=latest_commit_hash, file=FILE_PATH)
st.write(f"📥 **Téléchargement depuis :** {download_url}")
# Télécharger le fichier
response = requests.get(download_url)
if response.status_code != 200:
st.error("❌ Erreur lors du téléchargement du fichier.")
return False
# Enregistrer le fichier
with open(FILE_PATH, "wb") as file:
file.write(response.content)
# Vérifier la taille du fichier
file_size = os.path.getsize(FILE_PATH) / (1024 * 1024) # Taille en Mo
st.write(f"📁 **Taille du fichier téléchargé :** {file_size:.2f} Mo")
return True
def get_data_from_db():
"""Récupère les données directement depuis la table 'rasff_notifications'."""
if not os.path.exists(FILE_PATH):
st.error(f"⚠️ Le fichier '{FILE_PATH}' est introuvable.")
return pd.DataFrame()
try:
# Connexion à la base de données
conn = sqlite3.connect(FILE_PATH)
# Charger les données
query = "SELECT * FROM rasff_notifications"
df = pd.read_sql(query, conn)
# Nombre total d'enregistrements
total_records = len(df)
st.write(f"📊 **Nombre total d'enregistrements :** {total_records}")
conn.close()
return df
except Exception as e:
st.error(f"⚠️ Erreur lors du chargement des données: {e}")
return pd.DataFrame()
def check_years_presence(df):
"""Vérifie la présence des années 2024 et 2025 dans la colonne 'date'."""
if 'date' not in df.columns:
st.warning("⚠️ Colonne 'date' introuvable.")
return
# Filtrer les données pour les années 2024 et 2025 dans la colonne 'date'
df_2024 = df[df['date'].astype(str).str[:4] == '2024']
df_2025 = df[df['date'].astype(str).str[:4] == '2025']
if not df_2024.empty:
st.success("✔️ Des données pour l'année 2024 sont présentes.")
st.write(f"📊 **Nombre d'enregistrements pour 2024 :** {len(df_2024)}")
else:
st.warning("⚠️ Aucune donnée trouvée pour l'année 2024.")
if not df_2025.empty:
st.success("✔️ Des données pour l'année 2025 sont présentes.")
st.write(f"📊 **Nombre d'enregistrements pour 2025 :** {len(df_2025)}")
st.dataframe(df_2025.head(10))
else:
st.warning("⚠️ Aucune donnée trouvée pour l'année 2025.")
# 📥 Télécharger la base avec l'API GitHub et le dernier commit
if download_latest_db():
# 🗂 Charger les données et afficher un aperçu si tout va bien
df = get_data_from_db()
if not df.empty:
st.write("📊 **Aperçu des données complètes:**")
st.dataframe(df.head(10))
# 🔍 Vérifier la présence des années 2024 et 2025
check_years_presence(df)
else:
st.warning("⚠️ Aucune donnée disponible dans 'rasff_notifications'.")
else:
st.error("❌ Le téléchargement a échoué.")