Mostrando entradas con la etiqueta flask. Mostrar todas las entradas
Mostrando entradas con la etiqueta flask. Mostrar todas las entradas

miércoles, 22 de enero de 2025

Crear una API de Python desde zero - Parte 1

Para poder interactuar con algunas APIs que usan Python como yfinance tendrás que crearte tu entorno de Python en tu servidore web. En este artículo voy a detallar los pasos para instalar Python, crear un entorno virtual y hacer una primera 

El primer paso es instalar el software necesario: 

# sudo apt-get update
# sudo apt-get install -yq git supervisor python python3-pip python3-distutils
# sudo apt-get install build-essential libssl-dev libffi-dev python3-dev

Después de un rato instalando y configurando componentes, se completará la instalación instalando un entorno virtual y tambien instalaremos la libreria de yfinance que usaremos más adelante.  

# sudo pip install --upgrade pip venv
# sudo pip install yfinance


El siguiente paso es crear un Entorno Virtual sobre el que empezar a trabajar. 

Crea una carpeta en la que vas a dejar los entornos: 

# mkdir entornos
# cd entornos

Una vez dentro de la carpeta, puedes crear un entorno ejecutando el comando: 
# python3 -m venv mi_entorno

Este comando crea un nuevo directorio que ya tiene algo de contenido: 






Para usar este entorno es necesario activarlo, algo que se puede hacer con el comando que llama al script de activación: 

# source mi_entorno/bin/activate

Una vez estas dentro de la línea de comando puedes empezar a trabajar en él. 

(mi_entorno) usuario@instance-1:~/entornos$ nano hola.py 

Dentro del editor nano añade una única linia:
 
print("Hola Mundo!")


Y cierra nano apretando Ctrl+X y guardando el contenido. Despues podrás ejecutar el programa: 

(mi_entorno) usuario@instance-1:~/entornos$ python hola.py

Ahora el siguiente paso es crear una API web, para ello usaremos el framework Flask . Flask es un entorno ligero y flexible que facilita la creación de aplicaciones webs y APIs, provee herramientas y librerias que permiten gestionar las peticiones HTTP, el enrutado entre otras tareas.
Así pues, el siguiente paso es instalar Flask: 

(mi_entorno) usuario@instance-1:~/entornos$ pip install flask 




Con esto ya podemos empezar a crear nuestra aplicación. Como ejemplo, vamos a crear una aplicación web que consulta el valor de una acción cualquier, por ejemplo Para ello volvemos usar el editor nano y creamos un fichero que llamaremos api.py : 

(mi_entorno) usuario@instance-1:~/entornos$ nano api.py

Y copiaremos el siguiente código de ejemplo que consulta el valor de Alphabet Inc:


from flask import Flask, jsonify
import yfinance as yf

app = Flask(__name__)

def obtener_precio(ticker):
    try:
        bbva = yf.Ticker(ticker)
        info = bbva.info
        precio_actual = info.get('regularMarketPrice')
        if precio_actual is None:
            precio_actual = info.get('previousClose')
            if precio_actual is None:
                return {"precio": "Precio no disponible"}
            else:
                return {"precio": precio_actual, "tipo": "Precio de cierre anterior"}
        return {"precio": precio_actual, "tipo": "Precio actual"}
    except Exception as e:
        print(f"Error al obtener datos: {e}")
        return {"error": "Error al obtener el precio"}

@app.route('/precio')
def obtener_precio_ruta():
    precio = obtener_precio("GOOG")
    return jsonify(precio) # Devuelve un JSON

if __name__ == '__main__':
    app.run(debug=True)

Con el código guardado, procedemos a ponerlo en marcha llamando al fichero: 

(mi_entorno) usuario@instance-1:~/entornos$ python api.py
Y vemos que este arranca y crea un servicio web que empieza a escuchar por el puerto 5000:



Si lanzamos una consulta al servicio usando el navegador de la línea de comando curl veremos que si esta funcionando como esperamos: 

# curl http://127.0.0.1:5000/precio



En los siguiente artículos modificaremos la API para que pueda recibir el ticker como argumento, publicaremos la api como un servicio web de producción y crearemos una página web que pueda utilizar esta API. 

Enlaces: