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 


 

domingo, 24 de enero de 2021

Instalar certificado SSL Wildcard en sitio web con Apache2


Una de las formas más importantes de asegurar el intercambio de datos entre un servidor y el cliente que accede a él es el uso de certificados SSLPara asegurar que la comunicación se realiza realmente con el servidor correcto, el servidor puede ser certificado por una institución de confianza.


Requisitos: 

  • Asegurarse de que el servidor tiene el puerto 443 (https) abierto
  • Haber adquirido un Certificado SSL en cualquier entidad certificadora oficial
  • Fichero con la Clave Privada .key 
  • Fichero de Certificado SSL .cer o .crt
  • Fichero de Certificados Intermedios .cer o .crt   


Pasos:

1. Subir los ficheros con los certificados al servidor en una carpeta a la que se tenga acceso, como por ejemplo la home : /home/personal/certificados  


2. Crea una carpeta en la ruta /etc/ssl/certs 

$ sudo mkdir /etc/ssl/certs/LaSendaDelAdmin 


3. Copia los ficheros a la ruta recién creada: 

$ sudo cp /home/personal/certificados/* /etc/ssl/certs/LaSendaDelAdmin 


4. Cambia los permisos de los ficheros: 

$ sudo chmod 777 /etc/ssl/certs/LaSendaDelAdmin/* 


5. Edita la configuración del sitio de apache: 

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


6.  En la configuración del site, modifica el VirtualHost para que escuche el puerto 443 de https e incluye las 4 lineas de código para configurar los certificados en el sitio:  


<VirtualHost *:443>

    ServerAdmin webmaster@localhost

    ServerName lasendadeladmin.com

    ServerAlias www.lasendadeladmin.com

    SSLEngine on

    SSLCertificateFile /etc/ssl/certs/LaSendaDelAdmin/LaSendaDelAdmin.com_ssl_certificate.cer

    SSLCertificateKeyFile /etc/ssl/certs/LaSendaDelAdmin/*.LaSendaDelAdmin.com_private_key.key

    SSLCertificateChainFile /etc/ssl/certs/CloudGamers/*.LaSendaDelAdmin.com_ssl_certificate_INTERMEDIATE.cer

....


7. Si no esta el módulo SSL habilitado, habilitalo con el comando a2enmod ssl  : 

$ sudo a2enmod ssl 


Considering dependency setenvif for ssl:

Module setenvif already enabled

Considering dependency mime for ssl:

Module mime already enabled

Considering dependency socache_shmcb for ssl:

Enabling module socache_shmcb.

Enabling module ssl.

See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.

To activate the new configuration, you need to run:

  systemctl restart apache2


8. Ahora comprueba que no hay ningun error en el código: 

$ sudo apachectl configtest


Syntax OK


9. Una vez verificado que la sintaxis de los ficheros de configuración es correcta, ya solo queda reiniciar el servicio de apache para habilitar el sitio web ahora con el certificado:

$ sudo systemctl restart apache2



sábado, 16 de enero de 2021

Problema con el fichero ads.txt en Blogger con dominio propio

 

Desde hace un tiempo Google Adsense recomienda configurar un fichero llamado ads.txt para asegurar que la publicidad que se ofrece en sitios webs es la autorizada por el propietario del sitio. De esta manera, al crear el archivo ads.txt se tiene más control sobre quien puede vender anuncios en tu blog e impedir que se muestre publicidad de otros anunciantes no autorizados. 

Debido a esta recomendación, en el panel de el Google Adsense mostraba un mensaje que indicaba que no tenia el fichero ads.txt correctamente configurado. 


Sin embargo, había seguido los pasos para poder publicar el fichero ads.txt, me seguia mostrando el error, y eso quiere decir que AdSense no es capaz de encontrar el fichero dentro del sitio web. 

El problema puede ser que si usas un dominio propio, blogger no deja usar el dominio de raiz y te obliga a usar un subdominio (por ejemplo www.tudominio.com o blog.tudominio.com). Pero en cambio AdSense esta usando tu dominio raíz y no tu subdominio para monetizar el sitio web. 




Para confirmar que este es el problema, tan solo hay que validar si el archivo ads.txt es accesible desde las siguientes URLs: 

  • http://www.tudominio.com/ads.txt
  • https://www.tudominio.com/ads.txt
  • http://tudominio.com/ads.txt
  • https://tudominio.com/ads.txt

Si las URLs con el subdominio www. muestran el fichero ads.txt es correcto. 

Pero si las entradas que apuntan al dominio raíz no muestran el fichero, has encontrado el problema. 

Para solventarlo esto son los pasos: 

  1. Entra en la Configuración de Blogger
  2. Deshabilita la opción de Disponibilidad de HTTPS
  3. Deshabilita la Redirección del dominio de: tudominio.com a www.tudominio.com
  4. Refresca el sitio web
  5. Vuelve a habilitar la Redirección del dominio
  6. Refresca el sitio web (en este punto, en la URL http://tudominio.com/ads.txt ya debería funcionar correctamente
  7. Habilita la Disponibilidad de HTTPS
  8. Espera que se registre los certificados HTTPS y cuando esten disponibles, habilita la opción de Redirección de HTTPS

Con estos pasos, el ads.txt debería estar accesible tanto desde el subdominio como del dominio principal. 


miércoles, 13 de enero de 2021

Instalar Pages, Keynote y Numbers gratis en versiones viejas de macOS

Si tienes un Mac antiguo es posible que ya no tengas instalada la última versión de macOS y que tengas problemas para instalar o actualizar algunas de las aplicaciones de la App Store  . 

El mensaje que muestra cuando se instala una aplicación es que no se puede instalar porque se requiere macOS xx.xx o una versión posterior:


No vamos a poder instalar la última versión de la aplicación, lo que si que podemos hacer es instalar la última versión compatible. 

Para ello necesitaras tener una versión antigua de Pages, Keynote o Numbers instalado en el directorio de Aplicaciones para poder actualizarlo. Si no tienes una version antigua instalada o no la tienes registrada en tu Apple ID estos son los pasos para conseguir instalarla: 


Pasos

1. Lo primero es instalar una versión antigua de iWork. Puedes descargar la versión de prueba de iWork '09 trial para instalarla.



2. Una vez instalada el iWork '09 , en la carpeta de Aplicaciones estarán las versiones de prueba de las tres aplicaciones: Pages, Numbers y Keynote. 

3. Inicia las aplicaciones y después cierralas para que la aplicación aparezca en la App Store.

4. Después inicia el App Store y ve a Actualizaciones y marca la opción Mostrar actualizaciones incompatibles y ahora aperecerán las aplicaciones disponibles para seleccionarlas y actualizarlas. 



5. Si intentas actualizarlo fallará, pero se habrá incluido la aplicación en las compras del Apple ID. 



6. Al clicar para instalar la aplicación, preguntará si queremos instalar una versión anterior. 



Una vez completada la instalación, todas las aplicaciones aparecerán en la carpeta de Aplicaciones


sábado, 9 de enero de 2021

Instalar Wordpress en la instancia del Free Tier de Google Cloud Platform

Como ya comenté, tanto Google como las otras compañias ofrecen un periodo de prueba donde poder probar sus plataformas de cloud de forma gratuira. Una vez concluye este periodo de prueba, es cuando toca empezar a pasar por caja, pero Google esta ofreciendo una serie de servicios de forma gratuita en un programa que muy acertadamente han llamado Always Free . Cuando este periodo 

Yo he aprovechado este servicio para crear una instancia de Linux gratuita y probar Wordpress:


A continuación os dejo los pasos para instalarlo:

Pasos: 

1. Conecta al terminal (SSH) de la instancia de GCP donde quieres instalar Wordpress.

2. El primer caso es instalar los módulos necesarios para ejecutar: APACHE2, PHP y MySQL, para ello se puede usar el comando APT-GET :

$ sudo apt-get update

$ sudo apt-get install php libapache2-mod-php mysql-server php-mysql


3.  Una vez instalado, es necesario configurar un site en apache creando un fichero de configuración:

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

Con el siguiente contenido:

<VirtualHost *:80> 

    ServerAdmin webmaster@localhost 

    ServerName lasendadelwordpress.local 

    ServerAlias www.lasendadelwordpress.local 

    ErrorLog ${APACHE_LOG_DIR}/error_lasendadelwordpress.log 

    CustomLog ${APACHE_LOG_DIR}/access_lasendadelwordpress.log combined 


    DocumentRoot /var/www/lasendadelwordpress 

    <Directory /> 

        Options FollowSymLinks 

        AllowOverride None 

    </Directory> 

    <Directory /var/www/lasendadelwordpress

        Options Indexes FollowSymLinks MultiViews 

        AllowOverride All 

        Order allow,dany 

        allow from all 

    </Directory> 

</VirtualHost> 


4. Con el fichero de configuración creado, es necesario activar el site:

    $ sudo a2ensite wordpress 

Enabling site lasendadelwordpress.
To activate the new configuration, you need to run:
systemctl reload apache2

Despues hay que activar la reescritura de URL

    $ sudo a2enmod rewrite 

Y recargar apache

    $ sudo service apache2 reload 


5. El siguiente paso es crear una base de datos en MySQL. Es necesario abrir la linia de comando de MySQL:

$ sudo mysql -u root 

Dentro de la linia de comando SQL es necesario crear una base de datos nueva y un nuevo usuario con permisos necesarior para operarla. En negrita he destacado los comandos necesarios para crear la base de datos. 

Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6076
Server version: 10.1.47-MariaDB-0+deb9u1 Debian 9.13
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

> CREATE DATABASE lasendadelwordpress;
Query OK, 1 row affected (0.17 sec)

> GRANT ALL PRIVILEGES ON lasendadelwordpress.* TO send4dmin@'localhost' IDENTIFIED BY 'tupassword’;
Query OK, 0 rows affected (0.29 sec)

> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.10 sec)

> EXIT
Bye

6. Con la base de datos creada, hay que configurar el sitio de Wordpress para ello copiaremos el fichero de configuración de ejemplo y crearemos uno nuevo con el siguiente contenido. Primero copiamos el fichero de configuración:

$ sudo copy /var/www/lasendadelwordpress/wp-config-sample.php /var/www/lasendadelwordpress/wp-config.php  
Dentro del fichero solo es necesario modificar las línias que hacen referencia a la configuración de la base de datos:

$ sudo vi wp-config-php

define('DB_NAME', '
lasendadelwordpress'); // The name of the database
define('DB_USER', '
send4dmin'); // Your MySQL username
define('DB_PASSWORD', '
tupassword'); // ... and password

8. Para iniciar el proceso de configuración de Site de wordpress es necesario acceder al enlace:  



9. Es necesario rellenar el formulario con la información requerida y clicar en Install Worpdpress 






10. Y una vez instalado, solo hay que acceder a la URL de administración del sitio y empezar a trabajar: