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: 





martes, 21 de enero de 2025

Error al ejecutar apt-get update en Google Cloud Engine

Al ejecutar el comando # apt-get update en la instancia linux de Google Cloud Engine, recibo un mensaje de error que indica lo siguiente: 

N: Repository 'https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-2 InRelease' changed its 'Origin' value from 'google-cloud-ops-agent-bullseye' to 'google-cloud-ops-agent-bullseye-2'
N: Repository 'https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-2 InRelease' changed its 'Label' value from 'google-cloud-ops-agent-bullseye' to 'google-cloud-ops-agent-bullseye-2'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.

Esto indica que el origen y la etiqueta han cambiado porque el servicio que hospeda estos paquetes tambien ha cambiado. Para corregirlo y actualizar los paquetes de distribución utiliza el siguiente comando: 

# sudo apt-get update --allow-releaseinfo-change

Este debería ser un problema que solo aparece una vez, por lo que una vez corregido ya no debería volver a aparecer.  

miércoles, 27 de enero de 2021

Redirigir el trafico de HTTP a HTTPS en sitio web Apache2

 

Después de haber instalado un certificado SSL y publicado el sitio web con este certificado, tal vez quieras redirigir todo el tráfico HTTP al nuevo sitio HTTPS. 

Para ello tan solo es necesario modificar el fichero de configuración del sitio web de apache e incluir unas líneas de código.


Pasos: 

1. Editar el fichero de configuración del sitio web: 

$ sudo vim /etc/apache2/sites-available lasendadeladmin.conf 


2. Añadir la linea de codigo para redirigir el trafico del puerto 80 (http) al puerto 443 (https);


NameVirtualHost *:80

<VirtualHost *:80>
   ServerName www.lasendadeladmin.com
   Redirect / https://www.lasendadeladmin.com
</VirtualHost>

<VirtualHost _default_:443>
   ServerName www.lasendadeladmin.com
   DocumentRoot /var/www/lasendadeladmin
   SSLEngine On
# etc...
</VirtualHost>


3. Después de haber incluido el último paso es reiniciar el apache : 

$ sudo apachectl restart