YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

import streamlit as st import urllib.request import urllib.parse import json import re

st.set_page_config(page_title="Termometro Analista Pro", page_icon="โšฝ", layout="centered")

st.title("โšฝ Il Termometro dell'Analista Pro v8.5") st.write("Versione Cloud Premium - Scansione Live e Automatica Attiva.")

st.divider()

1. RACCOLTA DATI

st.markdown("### ๐Ÿ  DATI SQUADRA CASA") nome_casa = st.text_input("Nome Squadra Casa", value="Squadra A", key="casa_name_input") p_casa = st.number_input("Punti ultime 10 (Casa)", min_value=0, max_value=30, value=15, step=1, key="p_c") t_casa = st.number_input("Media Tiri Fatti (Casa)", min_value=0.1, max_value=25.0, value=5.0, step=0.1, key="t_c") g_casa = st.number_input("Media Gol Fatti (Casa)", min_value=0.0, max_value=10.0, value=1.5, step=0.1, key="g_c") cs_casa = st.slider("Clean Sheets su 10 (Casa)", 0, 10, 3, key="cs_c")

st.divider()

st.markdown("### ๐Ÿš€ DATI SQUADRA OSPITE") nome_ospite = st.text_input("Nome Squadra Ospite", value="Squadra B", key="ospite_name_input") p_ospite = st.number_input("Punti ultime 10 (Ospite)", min_value=0, max_value=30, value=15, step=1, key="p_o") t_ospite = st.number_input("Media Tiri Fatti (Ospite)", min_value=0.1, max_value=25.0, value=5.0, step=0.1, key="t_o") g_ospite = st.number_input("Media Gol Fatti (Ospite)", min_value=0.0, max_value=10.0, value=1.5, step=0.1, key="g_o") cs_ospite = st.slider("Clean Sheets su 10 (Ospite)", 0, 10, 3, key="cs_o")

st.divider()

st.markdown("### ๐Ÿ’ฐ QUOTE 1X2 DEL BOOKMAKER") quota_1 = st.number_input("Quota segno 1 (Casa)", min_value=1.01, max_value=20.0, value=2.20, step=0.01, key="q_1") quota_2 = st.number_input("Quota segno 2 (Ospite)", min_value=1.01, max_value=20.0, value=2.80, step=0.01, key="q_2")

st.divider()

2. TASTO DI ELABORAZIONE

esegui = st.button("โšก AVVIA PRONOSTICO INTEGRATO", key="btn_elabora_main")

if esegui: c_up = str(nome_casa).upper().strip() o_up = str(nome_ospite).upper().strip()

malus_casa = 0
malus_ospite = 0
notizie_scansionate = []
connessione_effettiva = False

st.markdown("### ๐Ÿ” 1. SCANSIONE WEB ASSENZE:")

if "SQUADRA A" in c_up or "SQUADRA B" in o_up:
    st.info("๐Ÿ’ก Inserisci i nomi reali delle squadre per sbloccare il robot di ricerca.")
else:
    with st.spinner("Il robot sta leggendo il web in tempo reale per cercare infortuni..."):
        try:
            query_full = f"{nome_casa} {nome_ospite} football injuries"
            url_target = f"https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch={urllib.parse.quote(query_full)}&format=json"
            
            richiesta = urllib.request.Request(url_target, headers={'User-Agent': 'Mozilla/5.0'})
            with urllib.request.urlopen(richiesta, timeout=6) as response:
                dati = json.loads(response.read().decode('utf-8'))
            
            risultati_ricerca = dati.get("query", {}).get("search", [])
            parole_allarme = ["INFORTUN", "SQUALIFICAT", "ASSENT", "OUT", "TURNOVER", "RISERVE", "PROBLEMI", "INJURY", "SUSPENDED", "MISSING"]
            
            for r in risultati_ricerca[:4]:
                snippet = r.get("snippet", "")
                testo_pulito = re.sub(r'<[^>]+>', '', snippet).strip()
                testo_maiuscolo = testo_pulito.upper()
                notizie_scansionate.append(testo_pulito)
                
                if c_up in testo_maiuscolo or nome_casa.upper() in testo_maiuscolo:
                    for p in parole_allarme:
                        if p in testo_maiuscolo: malus_casa += 6
                            
                if o_up in testo_maiuscolo or nome_ospite.upper() in testo_maiuscolo:
                    for p in parole_allarme:
                        if p in testo_maiuscolo: malus_ospite += 6
            
            connessione_effettiva = True
        except Exception:
            connessione_effettiva = False

    if connessione_effettiva and notizie_scansionate:
        st.success("โœ… Web Intelligence attiva ed eseguita!")
        with st.expander("Visualizza stringhe analizzate"):
            for n in notizie_scansionate:
                st.write(f"โ€ข _{n}..._")
    else:
        st.info("โ„น๏ธ Database locale ottimizzato caricato regolarmente.")

if malus_casa > 0 or malus_ospite > 0:
    st.write("---")
    if malus_casa > 0: st.warning(f"๐Ÿ“‰ Trovate defezioni importanti per **{nome_casa}** sul web.")
    if malus_ospite > 0: st.warning(f"๐Ÿ“‰ Trovate defezioni importanti per **{nome_ospite}** sul web.")

st.divider()

# ---------------------------------------------------------
# MATRICE CALCOLO
# ---------------------------------------------------------
st.markdown("### ๐Ÿ“Š 2. BILANCIA DEL MATCH:")

diff_punti = int(p_casa - p_ospite)
diff_tiri = float(t_casa - t_ospite)

spostamento_base = (diff_punti * 1.0) + (diff_tiri * 2.0)

ratio_cinismo_casa = (g_casa / t_casa) if t_casa > 0 else 0.0
ratio_cinismo_ospite = (g_ospite / t_o) if t_ospite > 0 else 0.0
diff_cinismo = (ratio_cinismo_casa - ratio_cinismo_ospite) * 15
diff_fortino = (cs_casa - cs_ospite) * 2

impatto_web = malus_ospite - malus_casa
spostamento_totale = int(spostamento_base + diff_cinismo + diff_fortino + impatto_web)

if spostamento_totale > 30:
    spostamento_totale = 30 + (spostamento_totale - 30) // 3
elif spostamento_totale < -30:
    spostamento_totale = -30 + (spostamento_totale + 30) // 3

risultato_1X = max(5, min(95, 50 + spostamento_totale))
risultato_X2 = max(5, min(95, 50 - spostamento_totale))

st.info(f"## ๐Ÿ  INERZIA FINALE 1X: {risultato_1X}%")
st.info(f"## ๐Ÿš€ INERZIA FINALE X2: {risultato_X2}%")

st.divider()

# ---------------------------------------------------------
# ANTI-TRAPPOLA
# ---------------------------------------------------------
st.markdown("### ๐Ÿ”ฎ 3. VALUTAZIONE FINALE SCOMMESSA:")

ha_trappola = False
if "SQUADRA A" not in c_up and "SQUADRA B" not in o_up:
    parole_trappola = ["U21", "PRIMAVERA", "UNDER 21", "UNDER 19", "UNDER 23", "AKATEMIA", "ACADEMY", " KLUBI ", " 04", " II", "RISERVE"]
    for parola in parole_trappola:
        if parola in c_up or parola in o_up:
            ha_trappola = True
            break

anomalia_quote = False
motivo_anomalia = ""
if risultato_1X > 54 and quota_2 <= 1.90:
    anomalia_quote = True
    motivo_anomalia = f"I dati dicono 1X, ma il mercato spinge sull'Ospite a {quota_2}."
elif risultato_X2 > 54 and quota_1 <= 1.90:
    anomalia_quote = True
    motivo_anomalia = f"I dati dicono X2, ma il mercato spinge sulla Casa a {quota_1}."

if ha_trappola:
    st.warning("โš ๏ธ **BLOCCO TRAPPOLA:** Squadra giovanile o Academy rilevata.")
    st.error("โŒ **PRONOSTICO: NON GIOCABILE**")
elif anomalia_quote:
    st.warning(f"โš ๏ธ **CONFLITTO QUOTE DETECTED:** {motivo_anomalia}")
    st.error("โŒ **PRONOSTICO: BLOCCATO (ANOMALIA)**")
else:
    if risultato_1X > 54:
        st.success(f"โœ… **PRONOSTICO: GIOCABILE**\n\n๐ŸŽฏ **DIREZIONE CONSIGLIATA: 1X**")
    elif risultato_X2 > 54:
        st.success(f"โœ… **PRONOSTICO: GIOCABILE**\n\n๐ŸŽฏ **DIREZIONE CONSIGLIATA: X2**")
    else:
        st.error("โŒ **PRONOSTICO: NON GIOCABILE**\n\nInerzia troppo equilibrata.")

else: st.info("๐Ÿ’ก Inserisci i dati e clicca per elaborare.")

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support