monitor / app.py
Yofran23's picture
Update app.py
6468ff1 verified
import streamlit as st
import requests
import pandas as pd
from bs4 import BeautifulSoup
import urllib3
# Configuraci贸n de p谩gina
st.set_page_config(page_title="Monitor Cambiario", page_icon="馃搱", layout="centered")
# Deshabilitar advertencias de SSL (equivalente a ssl_verifypeer = FALSE en R)
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def get_data():
# --- API BINANCE (v铆a CriptoYa) ---
try:
url_crypto = "https://criptoya.com/api/USDT/VES/0.1"
res_crypto = requests.get(url_crypto)
data_crypto = res_crypto.json()
usdt_price = data_crypto['binancep2p']['totalAsk']
except:
usdt_price = 0
# --- SCRAPING BCV ---
try:
url_bcv = "https://www.bcv.org.ve"
# User-agent para evitar bloqueos
headers = {'User-Agent': 'Mozilla/5.0'}
res_bcv = requests.get(url_bcv, headers=headers, verify=False)
soup = BeautifulSoup(res_bcv.text, 'html.parser')
# Extracci贸n siguiendo tu l贸gica de IDs
dolar = float(soup.find(id="dolar").find("strong").text.strip().replace(',', '.'))
euro = float(soup.find(id="euro").find("strong").text.strip().replace(',', '.'))
except:
dolar, euro = 0, 0
return usdt_price, dolar, euro
# --- INTERFAZ STREAMLIT ---
st.title("馃搳 Monitor de Divisas")
st.markdown(f"**脷ltima actualizaci贸n:** {pd.Timestamp.now().strftime('%d/%m/%Y %H:%M:%S')}")
usdt, usd_bcv, eur_bcv = get_data()
# M茅tricas principales en columnas est茅ticas
col1, col2, col3 = st.columns(3)
with col1:
st.metric(label="USDT (Binance)", value=f"{usdt:.2f} VES")
with col2:
st.metric(label="D贸lar BCV", value=f"{usd_bcv:.2f} VES")
with col3:
st.metric(label="Euro BCV", value=f"{eur_bcv:.2f} VES")
st.divider()
# --- SECCI脫N DE C脕LCULOS ---
st.subheader("馃挕 An谩lisis de Compra")
# Tu l贸gica: Comprar d贸lar con 10% de descuento sobre el USDT
compra_sugerida = usdt - (usdt * 0.10)
c1, c2 = st.columns(2)
with c1:
st.info(f"**Precio USDT:** {usdt:.2f}")
st.success(f"**Sugerencia de compra (-10%):** {compra_sugerida:.2f} VES")
with c2:
# Brecha entre paralelo (USDT) y oficial
brecha = ((usdt / usd_bcv) - 1) * 100 if usd_bcv > 0 else 0
st.warning(f"**Brecha Cambiaria:** {brecha:.2f}%")
# --- TABLA RESUMEN ---
st.subheader("馃摑 Resumen de Datos")
df_mostrar = pd.DataFrame({
"Moneda": ["USDT", "BCV $", "BCV Euro"],
"Monto (VES)": [usdt, usd_bcv, eur_bcv]
})
st.table(df_mostrar)
if st.button('馃攧 Actualizar Precios'):
st.rerun()