cha0smagick
commited on
Commit
•
c7af237
1
Parent(s):
5401e78
Update app.py
Browse files
app.py
CHANGED
@@ -1,75 +1,73 @@
|
|
|
|
1 |
import requests
|
2 |
import pandas as pd
|
3 |
-
import streamlit as st
|
4 |
-
import time
|
5 |
import plotly.express as px
|
|
|
6 |
|
7 |
-
#
|
8 |
-
|
9 |
|
10 |
-
#
|
11 |
-
|
12 |
-
url = "https://coingecko.p.rapidapi.com/coins/markets"
|
13 |
-
querystring = {"vs_currency": "usd", "order": "market_cap_desc", "per_page": "25", "page": "1"}
|
14 |
-
headers = {
|
15 |
-
"x-rapidapi-host": "coingecko.p.rapidapi.com",
|
16 |
-
"x-rapidapi-key": api_key
|
17 |
-
}
|
18 |
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
|
|
|
|
|
|
|
|
25 |
return []
|
26 |
|
27 |
-
# Función para
|
28 |
-
def
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
"Simbolo": moneda["symbol"].upper(),
|
34 |
-
"Nombre": moneda["name"],
|
35 |
-
"Precio (USD)": moneda["current_price"],
|
36 |
-
"Volumen (24h)": moneda["total_volume"],
|
37 |
-
"Capitalización de Mercado": moneda["market_cap"],
|
38 |
-
"Cambio 24h (%)": moneda["price_change_percentage_24h"]
|
39 |
-
})
|
40 |
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
st.title("Top 25 Criptomonedas Más Valiosas")
|
45 |
-
st.write("Información actualizada de las criptomonedas más valiosas por capitalización de mercado.")
|
46 |
|
47 |
-
|
48 |
-
if st.button("Actualizar Datos"):
|
49 |
-
datos = obtener_datos_criptomonedas()
|
50 |
-
st.session_state['datos'] = datos
|
51 |
-
|
52 |
-
# Verificar si ya existen datos en la sesión
|
53 |
-
if 'datos' not in st.session_state:
|
54 |
-
st.session_state['datos'] = obtener_datos_criptomonedas()
|
55 |
|
56 |
-
#
|
57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
|
59 |
-
#
|
60 |
-
|
61 |
-
st.
|
62 |
|
63 |
-
#
|
64 |
-
st.
|
65 |
-
|
66 |
-
st.plotly_chart(fig)
|
67 |
|
68 |
-
#
|
69 |
-
st.
|
70 |
-
|
71 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
|
73 |
-
#
|
74 |
-
st.write("
|
75 |
-
st.
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
import requests
|
3 |
import pandas as pd
|
|
|
|
|
4 |
import plotly.express as px
|
5 |
+
import time
|
6 |
|
7 |
+
# Definir la URL de la API de Minerstat para obtener las criptomonedas
|
8 |
+
API_URL = "https://api.minerstat.com/v2/coins"
|
9 |
|
10 |
+
# Configurar la API Key (cámbiala por tu clave si es necesario)
|
11 |
+
API_KEY = "c4b66a3c25msh950412fab4eaee1p159dbfjsn4"
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
13 |
+
# Función para obtener las 25 criptomonedas más valiosas
|
14 |
+
def obtener_criptomonedas():
|
15 |
+
try:
|
16 |
+
response = requests.get(API_URL)
|
17 |
+
data = response.json()
|
18 |
+
# Filtrar las primeras 25 criptomonedas por precio
|
19 |
+
criptos = sorted(data, key=lambda x: x['price'], reverse=True)[:25]
|
20 |
+
return criptos
|
21 |
+
except Exception as e:
|
22 |
+
st.error(f"Error al obtener los datos de la API: {e}")
|
23 |
return []
|
24 |
|
25 |
+
# Función para mostrar los datos en un dataframe
|
26 |
+
def mostrar_tabla_criptos(criptos):
|
27 |
+
# Convertir los datos a un DataFrame de pandas
|
28 |
+
df = pd.DataFrame(criptos)
|
29 |
+
df = df[['coin', 'name', 'price', 'volume', 'algorithm', 'network_hashrate', 'difficulty', 'reward_block']]
|
30 |
+
df.columns = ['Moneda', 'Nombre', 'Precio (USD)', 'Volumen (USD)', 'Algoritmo', 'Hashrate', 'Dificultad', 'Recompensa por Bloque']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
+
# Mostrar la tabla de criptomonedas
|
33 |
+
st.write("### Top 25 Criptomonedas por Valor")
|
34 |
+
st.dataframe(df)
|
|
|
|
|
35 |
|
36 |
+
return df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
+
# Función para mostrar los gráficos de fluctuación de precios
|
39 |
+
def mostrar_graficos(criptos):
|
40 |
+
df = pd.DataFrame(criptos)
|
41 |
+
df['Precio'] = df['price']
|
42 |
+
df['Moneda'] = df['coin']
|
43 |
+
|
44 |
+
# Crear gráfico de precios
|
45 |
+
fig = px.bar(df, x='Moneda', y='Precio', title='Precios de las 25 Criptomonedas más Valiosas')
|
46 |
+
st.plotly_chart(fig)
|
47 |
|
48 |
+
# Crear gráfico de volumen
|
49 |
+
fig_vol = px.line(df, x='Moneda', y='volume', title='Volumen de las 25 Criptomonedas más Valiosas (USD)')
|
50 |
+
st.plotly_chart(fig_vol)
|
51 |
|
52 |
+
# Interfaz de Streamlit
|
53 |
+
st.title("Top 25 Criptomonedas más Valiosas")
|
54 |
+
st.write("Este tablero muestra las 25 criptomonedas más valiosas con sus estadísticas clave, actualizadas en tiempo real.")
|
|
|
55 |
|
56 |
+
# Botón para actualizar los datos
|
57 |
+
if st.button("Actualizar Datos"):
|
58 |
+
with st.spinner("Obteniendo datos..."):
|
59 |
+
criptomonedas = obtener_criptomonedas()
|
60 |
+
if criptomonedas:
|
61 |
+
df_criptos = mostrar_tabla_criptos(criptomonedas)
|
62 |
+
mostrar_graficos(criptomonedas)
|
63 |
+
else:
|
64 |
+
criptomonedas = obtener_criptomonedas()
|
65 |
+
if criptomonedas:
|
66 |
+
df_criptos = mostrar_tabla_criptos(criptomonedas)
|
67 |
+
mostrar_graficos(criptomonedas)
|
68 |
|
69 |
+
# Actualización en tiempo real cada 60 segundos
|
70 |
+
st.write("### Actualización Automática en Tiempo Real (Cada 60 segundos)")
|
71 |
+
st.write("Los datos se actualizarán automáticamente después de 60 segundos.")
|
72 |
+
time.sleep(60)
|
73 |
+
st.experimental_rerun()
|