import streamlit as st
import pandas as pd
import time
from datetime import datetime
# NOTE: Since this Streamlit application replaces the command-line interface,
# we need to simulate the import of the processing logic (from main.py, extract_*, scorer.py).
# In a real scenario, you would integrate the content of those files into functions here,
# or ensure they are properly callable.
# We will simulate the 'process_urls' function which takes a list of URLs and returns a DataFrame.
def simulate_data_processing(urls):
"""
Simule la logique d'extraction et de scoring des profils.
Dans la version réelle, cette fonction appellerait extract_github.py, extract_so.py, et scorer.py.
"""
if not urls:
return pd.DataFrame()
data = []
# Simuler un traitement plus long pour montrer l'animation
progress_bar = st.progress(0)
status_text = st.empty()
for i, url in enumerate(urls):
# Simulation d'extraction et scoring
score = len(url) % 10 + 5 # Score basé sur la longueur de l'URL pour la simulation
platform = "GitHub" if "github.com" in url else "StackOverflow"
data.append({
"ID": i + 1,
"URL": url,
"Platforme": platform,
"Nom_Profil": url.split('/')[-1] if url.split('/')[-1] else "Anonyme",
"Score_Talent": score,
"Status": "Qualifié" if score >= 10 else "Nouveau"
})
# Mettre à jour la barre de progression
progress = (i + 1) / len(urls)
progress_bar.progress(progress)
status_text.text(f"🚀 Analyse en cours : {i+1}/{len(urls)} profils traités...")
time.sleep(0.1) # Simuler un délai de traitement
progress_bar.empty()
status_text.empty()
return pd.DataFrame(data)
# ---------------- CONFIGURATION ET THÈME PREMIUM ----------------
st.set_page_config(
page_title="Talent Data Engine | Digisphere LLC",
page_icon="🧠",
layout="wide"
)
# Thème foncé (Dark Mode) et styles personnalisés
st.markdown("""
""", unsafe_allow_html=True)
# ---------------- HEADER ET LOGO ----------------
st.markdown("""
DIGISPHERE LLC
TALENT DATA ENGINE — AI Sourcing Automation
""", unsafe_allow_html=True)
# ---------------- MAIN LOGIC ----------------
st.markdown("## 📥 Saisie des URLs Source")
st.markdown("Collez les URLs des profils (GitHub, StackOverflow, etc.) à analyser, une URL par ligne.")
# Zone de saisie pour les URLs (plus professionnel qu'un fichier)
input_urls_text = st.text_area(
"Liste d'URLs",
placeholder="Exemple:\nhttps://github.com/torvalds\nhttps://stackoverflow.com/users/22656/jon-skeet",
height=200
)
# Séparation des URLs
urls_to_process = [url.strip() for url in input_urls_text.split('\n') if url.strip()]
st.markdown("---")
# ---------------- PARAMÈTRES D'AUTOMATISATION ----------------
st.markdown("### ⚙️ Paramètres d'Automatisation (Licence Entreprise)")
col_check, col_info = st.columns([1, 2])
with col_check:
auto_refresh_enabled = st.checkbox("Activer l'Auto-Mise à Jour (toutes les 6h)", value=False)
with col_info:
if auto_refresh_enabled:
# Note pour rappeler la nature SaaS de cette fonctionnalité
st.markdown(
"""
⚙️ **Statut :** L'automatisation est active. Cette fonction nécessite que l'application soit déployée sur un serveur (type CRON ou Worker) pour fonctionner en arrière-plan sans intervention manuelle.
""",
unsafe_allow_html=True
)
else:
st.caption("L'automatisation met à jour votre Dataset Premium périodiquement via une configuration serveur dédiée.")
# Bouton de lancement
if st.button("🧠 Lancer l'Analyse du Talent Data Engine"):
if not urls_to_process:
st.warning("⚠️ Veuillez entrer au moins une URL à analyser.")
else:
st.info(f"Démarrage de l'analyse pour {len(urls_to_process)} profils...")
# Le traitement avec l'animation
df_results = simulate_data_processing(urls_to_process)
st.success("✅ Analyse complétée ! Dataset Premium généré.")
st.session_state['results_df'] = df_results
st.session_state['last_run'] = datetime.now()
# ---------------- AFFICHAGE DES RÉSULTATS ----------------
if 'results_df' in st.session_state and not st.session_state['results_df'].empty:
df = st.session_state['results_df']
st.markdown("## 📊 Dataset Premium (Profils Classés)")
st.markdown(f"**Dernière exécution :** {st.session_state['last_run'].strftime('%Y-%m-%d %H:%M:%S')}")
# Affichage des résultats
st.dataframe(df.sort_values(by="Score_Talent", ascending=False), use_container_width=True, height=350)
# Bouton de téléchargement
st.download_button(
label="⬇️ Télécharger le Dataset CSV",
data=df.to_csv(index=False).encode("utf-8"),
file_name=f"digisphere_talent_data_{datetime.now().strftime('%Y%m%d_%H%M')}.csv",
mime="text/csv",
key='download_button'
)
st.markdown("---")
# ---------------- SECTION À PROPOS ET FOOTER ----------------
with st.expander("ℹ️ À Propos du Talent Data Engine", expanded=False):
st.markdown("""
Le **Talent Data Engine** est la solution logicielle phare de **Digisphere LLC**.
Conçu pour les professionnels du recrutement et les dirigeants d'entreprises tech,
il utilise des algorithmes exclusifs pour :
* Analyser la profondeur technique et la contribution des profils tech.
* Attribuer un **Score Talent** (de 1 à 15) pour une qualification rapide.
* Créer des datasets structurés prêts à l'emploi.
Pour toute licence entreprise, support ou personnalisation : **contact@digispherellc.com**.
""", unsafe_allow_html=True)
st.markdown(
"""
© 2025 Digisphere LLC — Software Solution License v1.0
""",
unsafe_allow_html=True
)