cha0smagick commited on
Commit
c7af237
1 Parent(s): 5401e78

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -60
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
- # Configura tu clave de RapidAPI
8
- api_key = "c4b66a3c25msh950412fab4eaee1p159dbfjsn4"
9
 
10
- # Función para obtener datos de las criptomonedas
11
- def obtener_datos_criptomonedas():
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
- response = requests.get(url, headers=headers, params=querystring)
20
-
21
- if response.status_code == 200:
22
- return response.json()
23
- else:
24
- st.error("Error al obtener los datos de la API")
 
 
 
 
25
  return []
26
 
27
- # Función para convertir los datos en un DataFrame
28
- def crear_dataframe(datos):
29
- data = []
30
- for moneda in datos:
31
- data.append({
32
- "ID": moneda["id"],
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
- return pd.DataFrame(data)
42
-
43
- # Configuración de Streamlit
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
- # Botón para actualizar los datos
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
- # Crear el DataFrame
57
- df = crear_dataframe(st.session_state['datos'])
 
 
 
 
 
 
 
58
 
59
- # Mostrar los datos en una tabla
60
- st.write("### Tabla de Criptomonedas")
61
- st.dataframe(df)
62
 
63
- # Mostrar gráfico de precios
64
- st.write("### Gráfico de Precios (USD)")
65
- fig = px.line(df, x="Nombre", y="Precio (USD)", title="Precios de las Criptomonedas")
66
- st.plotly_chart(fig)
67
 
68
- # Mostrar gráfico de fluctuaciones de precio en 24 horas
69
- st.write("### Fluctuación en las últimas 24 horas (%)")
70
- fig_change = px.bar(df, x="Nombre", y="Cambio 24h (%)", title="Cambio de Precio en 24h (%)")
71
- st.plotly_chart(fig_change)
 
 
 
 
 
 
 
 
72
 
73
- # Actualizar cada 10 minutos (opcional)
74
- st.write("Los datos se actualizan cada 10 minutos automáticamente.")
75
- st.autorefresh(interval=600000) # 10 minutos en milisegundos
 
 
 
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()