domingo, 5 de septiembre de 2021

Bot de Telegram para consultar cotizaciones de Bitcoin, Ethereum, Tesla y otros valores

Veamos, paso a paso, lo que necesitamos para realizar un bot de Telegram y para implementar el código necesario que nos permita consultar el precio de valores cotizados.

Paso 1. Necesitamos una cuenta de Telegram

Es posible que ya tengas una cuenta de Telegram, que es un medio de comunicación similar a WhatsApp, aunque tiene grandes ventajas: creemos que guarda mejor la privacidad, dispone de canales de difusión y permite la creación de Bots. 

Si no tienes cuenta, consulta este enlace: https://telegram.com.es

Puedes instalar Telegram en Android, en iOS y además puedes utilizarlo como aplicación web, con Telegram Web, o la versión de escritorio con Telegram Desktop.

En este post las imágenes que vamos a mostrar están tomadas de la aplicación de Telegram Desktop que puedes instalar tanto en Windows,  Linux o Mac. Para seguir los pasos de esta entrada del blog lo recomendable es que te instales en tu ordenador Telegram Desktop.

Paso 2. Acceder a BotFather

BotFather es un bot de Telegram que permite controlar todos los bots que se creen en esta aplicación de mensajería instantánea.

Para acceder por primera vez a BotFather pulsa el siguiente enlace: https://telegram.me/botfather

Cuando ya has entrado en el BotFather puedes interactuar con él pulsando los comandos:

/start

/help




Paso 3. Crear un nuevo bot con BotFather

Para crear un nuevo bot, estando en BotFather tecleamos el siguiente comando.

/newbot

Te pedirá que introduzcas el nombre de tu bot, nosotros hemos llamado al bot: BolsaBot.

Luego te pedirá que introduzcas un usuario para el bot. Debe terminar en 'bot' y no debe estar ya inscrito previamente. Nosotros hemos encontrado libre el nombre: mercadosbot.




Observe que en la imagen anterior hemos borrado el Token que nos dan. Este gran string deberíamos custodiarle bien y no permitir que nadie malicioso lo conozca. Cuidado con subirlo, a un repositorio público de GitHub, ya que algunos malintencionados se dedican a buscar estos token de forma automática por todos los repositorios de GitHub.

Esto supone que para acceder a nuestro bot desde fuera, podamos hacerlo con el enlace: 


Podemos pinchar sobre nuestro bot y pedir que nos muestre su perfil (View Profile).


Nuestro bot ya existe, aunque de momento no sabe hacer nada. Necesitamos programarle.

Paso 4. Clona el repositorio con el bot

Previamente tenemos que tener instalado en nuestro ordenador git.

Puedes clonar el repositorio que ya tenemos creado con el bot.

git clone https://github.com/financieras/TelegramCryptoBot.git



Paso 5. Crea un entorno virtual (opcional)

Este paso es optativo. Habitualmente en Python se aconseja trabajar en los proyectos con entornos virtuales que delimitan la versión de Python con la que se trabaja concretamente en ese proyecto, y las versiones de las librerías que instalamos, usando normalmente el gestor de paquetes pip.

El riesgo que corremos si no trabajamos con un entorno virtual es que se un proyecto que teníamos funcionando correctamente con ciertas versiones de las librerías utilizadas y cierta versión concreta de Python, deje de funcionar cuando en el sistema operativo hemos actualizado las versiones. Podríamos preguntarnos, ¿cómo es posible que si este proyecto funcionaba bien el año pasado, y no lo he vuelto a tocar, ahora no funcione?, y la respuesta puede ser que el motivo por el que tenemos errores es porque hemos actualizado las versiones de algunas librerías, o del propio Python. 

Otra pregunta que nos podemos hacer: ¿cómo es posible que si el proyecto corría bien en mi ordenador, al llegar a la oficina del cliente e instalarlo en su sistema, ahora no corra y de varios errores?

Para evitar estos conflictos de versiones, se recomienda usar entornos virtuales, y definir exactamente las versiones con las que estamos trabajando. Para ello disponemos del archivo requirements.txt donde se recogen las librerías utilizadas y sus versiones, así como la versión de Python con la que se probó el proyecto.

Para crear un entorno virtual en Python se puede lograr por varios métodos, siendo el más sencillo el siguiente.

sudo apt install python3-venv
python3 -m venv venv
El segundo venv es el nombre que hemos querido dar a nuestro entorno virtual.

El entorno virtual se activa así.
. venv/bin/activate


Para lanzar Visual Studio Code desde el directorio en el que estemos se teclea:

code .

Paso 6. Poner nuestro Token

Para evitar que se pueda subir el Token a GitHub, a un repositorio público, se han de tener en cuenta varios puntos.
  1. El token se pondrá en un archivo denominado .env 

  2. Para evitar que ese archivo se suba a GitHub se añade en el .gitignore 

  3. Para recordarnos que se han de realizar estos pasos, se añade un archivo denominado .env.example cuya única finalidad es hacer ese recordatorio. 


Paso 7. Instalar las librerías del archivo requirementes.txt

En el archivo de texto requirements.txt tenemos una relación de librerías a instalar con sus versiones. Algunas librerías que se usan en el proyecto, como por ejemplo, os que ya viene instalada cuando se instala Python, pero otras requieren que usemos el gestor de paquetes pip. Pero para no estar, instalando una a una e instalar las versiones que no correspondan y luego puedan dar problemas, lo que hacemos es instalar con pip todas las librerías recogidas en el archivo requirements.txt con el siguiente comando.

pip install -r requirements.txt

  • Este comando se ha de escribir en el directorio donde se encuentre el propio archivo requirements.txt o en caso contrario poner la ruta.
  • La bandera (flag) -r  significa "instalar desde un archivo de requisitos", y es un atajo para --requirement.

Paso 8. Ejecutar el bot

Lanzamos el bot ejecutando el archivo bot.py. En nuestro caso lo hacemos desde Visual Studio Code.


 Vemos que ahora el bot está corriendo.

Paso 8. Probando el bot

Preguntamos por la cotización del Bitcoin.


Preguntamos por la cotización de Ethereum (ETH) y de Tesla.



Ya tenemos funcionando nuestro bot. Mientras el archivo bot.py esté ejecutándose el bot seguirá funcionando.

¿Cuál es el siguiente reto?

Nos gustaría poder tener el bot corriendo en algún servidor de forma que podamos apagar nuestro PC y el bot continúe ejecutándose.

Ese servidor podría ser una Raspberry Pi que tuviéramos en casa, pero lo ideal es que el servidor fuera externo y gratuito.

Esto se puede lograr si ponemos a correr el bot en replit.com, aunque existe el inconveniente de que si la sesión que tenemos en replit.com no está activa, al cabo de unos minutos, se cierra y nuestro bot dejaría de funcionar. Para conseguir que la sesión no se cierre, podemos recurrir a otra página externa y gratuita que envía peticiones cada cierto número de minutos, programables, que hace que nuestro replit.com con el bot corriendo permanezcan activos, en teoría, de forma indefinida.

Pero esto lo contaremos en otro momento.