|
import streamlit as st |
|
import pandas as pd |
|
import requests |
|
|
|
def get_data(page, rows_per_page=25): |
|
""" |
|
Récupère les données paginées de l'API. |
|
|
|
Args: |
|
page (int): Numéro de la page à récupérer. |
|
rows_per_page (int): Nombre de lignes par page. |
|
|
|
Returns: |
|
List[Dict]: Données de la page spécifiée sous forme de liste de dictionnaires. |
|
""" |
|
|
|
url = f"https://opendata.bordeaux-metropole.fr/api/records/1.0/search/?dataset=met_etablissement_rse&q=&rows={rows_per_page}&start={page * rows_per_page}" |
|
response = requests.get(url) |
|
if response.status_code == 200: |
|
data = response.json() |
|
records = data.get("records", []) |
|
return [record["fields"] for record in records], data.get("nhits", 0) |
|
else: |
|
return [], 0 |
|
|
|
def display_organisations_engagees(): |
|
""" |
|
Affiche les organisations engagées avec pagination et colonnes réordonnées. |
|
""" |
|
|
|
page_number = st.sidebar.number_input("Page number", min_value=0, value=0, step=1) |
|
data, total_hits = get_data(page_number) |
|
|
|
if data: |
|
df = pd.DataFrame(data) |
|
|
|
cols_order = ["nom_courant_denomination", "tranche_effectif_entreprise", "commune", "hierarchie_naf", "action_rse"] |
|
|
|
cols_order = [col for col in cols_order if col in df.columns] |
|
df = df[cols_order] |
|
|
|
|
|
st.write(f"Organisations engagées - Page {page_number + 1} sur {((total_hits - 1) // 25) + 1}", df) |
|
else: |
|
st.write("Aucune donnée disponible.") |
|
|
|
if __name__ == "__main__": |
|
st.sidebar.title("Navigation") |
|
app_mode = st.sidebar.selectbox("Choisissez l'onglet", ["Organisations engagées", "Autre Onglet"]) |
|
|
|
if app_mode == "Organisations engagées": |
|
display_organisations_engagees() |
|
|
|
|