🐍📓 Mi agenda Python: #1 Telepot
Por Enio...
Saludos estimados steemianos y lectores de #STEM-Espanol, #SteemSTEM, #Curie, #Utopian-io y demás comunidades de Steemit.
Para esta ocasión les presento una nueva serie de posts en la cual abordaremos distintas herramientas de programación relacionadas con el lenguaje de programación Python, el cual es mi favorito y cuya aplicación ha sido demostrada por mí en algunas ocasiones durante mi blogging aquí en Steemit. Esta serie se reconocerá fácilmente por el prefijo con el cual la bautizo y que usaré en el título de sus respectivos posts: Mi agenda Python.
En esta serie hablaremos sobre snippets, scripts, bibliotecas (‘librerías’), frameworks, programas de aplicación, etc., todo lo cual estará basado en Python, y son distintas herramientas que pueden utilizar los programadores como piezas clave en el desarrollo de una solución informática, algunas que son todo un clásico, otras más recientes, algunas muy famosas y una que otra interesante joya por conocer.
El contenido a abordar en esta serie no será ni pretenderá ser exhaustivo; no será una guía de consulta técnica, pues para eso están las documentaciones oficiales que bien serán referidas. La intención es dar a conocer aspectos de herramientas en Python que pueden ser muy útiles y que personalmente me parecen interesantes. Algunas de ellas las he utilizado y otras están en mi ruta de aprendizaje. Además, también se pretende aportar valor didáctico y dar ejemplos personalizados.
Procuraré hacer esta serie tomando en cuenta dos tipos de audiencia: los especialistas y los no-especialistas. De esta manera, los lectores programadores podrán beneficiarse de los aspectos técnicos abordados, pues al fin y al cabo mi área es la tecnología informática. No obstante, si bien gran parte del contenido requiere conocimientos previos en términos de desarrollo de software, también se incluirán comentarios o secciones donde se explicarán conceptos que ayuden al lector promedio a asimilar aspectos del contenido y apreciar su pertinencia y aplicación, como también a ampliar su cultura informática.
Espero les guste.
Nombre del Recurso
Telepot
Aclarando conceptos...
Ya en pasadas ocasiones hemos hablado de los bots y de lo que son capaces de hacer. De hecho, hemos desarrollado algunas aplicaciones chatbots y las hemos implementado como soluciones informáticas para problemas tanto hipotéticos como reales. También hemos hablado recientemente sobre el web scraping, que es una técnica de programación que funge de base para la programación de muchos bots, especialmente los de tipo web crawler, esto es, programas que realizan tareas automatizadas y ‘ejecutivas’ en la red sin prestar servicio directo al cliente humano.
Con ello, entonces, podemos introducir una forma de clasificación de los bots en función de su interacción con un usuario humano: aquellos que interactúan con seres humanos y aquellos que no. Un ejemplo de estos últimos son ciertos programas rastreadores los cuales apenas notaríamos si no fuese porque porque de vez en cuando tenemos que toparnos con un captcha y porque algunos navegadores webs están incorporando funciones para bloquearlos a voluntad del usuario. Esos bots no interactúan con usted para brindarle un servicio, o por lo menos no tienen una interfaz de usuario con esa intencionalidad, sino que están conectados o vinculados a sitios web para extraer información, trabajando de manera oculta para nosotros.
El otro tipo de bots seguramente ya lo conocemos y pueden ser referidos en ocasiones como chatbots, en mérito de que pueden entablar una especie de ‘conversación’ (chat) con el usuario humano, por lo cual estos bots sí prestan un servicio directo al usuario final con distintos niveles de amigabilidad en su interfaz. Los ejemplos de este tipo de bot sobran y, como he mencionado, ya nos hemos topados con ellos. Están disponibles para plataformas como Telegram, Discord, Facebook, Twitter y hasta en la misma red social Steemit podemos encontrar bots capaces de interactuar con los humanos.
A la hora de programarlos los desarrolladores recurren a bibliotecas o a frameworks. Para explicar qué es un framework sería justo dedicarle un artículo completo, más sin embargo, se puede concebir como una pieza de software incompleta que se descarga de internet y que debe ser completada y configurada por el equipo de desarrollo para hacerla totalmente funcional y que cumpla lo la meta propuesta.
De esta manera, los programadores no tienen que empezar desde cero sus proyectos sino que los construyen basándose en proyectos de software ya existente, tales como los científicos recurren construyen teorías sobre la base de otras ya consolidadas. Esto nos permite introducir la herramienta de Python de esta edición de Mi agenda Python.
Descripción
Telepot es un framework para el desarrollo de bots de Telegram desarrollado Nickoala como proyecto de software libre y código abierto y mantenido por él y varios contribuyentes.
Este framework facilita grandemente la labor de los programadores en todo el proceso de desarrollo del bot, pues soporta casi todos los métodos de la API RESTful de Telegram (el mecanismo que dispone Telegram para que los programadores creen aplicaciones que funcionen a través de su servicio) de una manera pythoniana, es decir, implementadas en lenguaje Python y siguiendo su expresividad.
Además, Telepot incopora una serie de funciones que no están en la API y sirven para enriquecer las potenciales características del bot y facilitar su desarrollo, y es muy útil para hacer experimentación y testing, ya que puede ser importado en una sesión de intérprete interactivo de Python.
Algunas características
- Es distribuido bajo licencia MIT (de Massachusetts Institute of Technology).
- Tiene versiones para Python 2.7 y Python 3.
- Sus versiones más recientes están basadas en la versión 3.6 de la API de Bots de Telegram, por lo que está algo desactualizado (tener precauciones si se necesita implementar métodos más recientes).
- Soporta
async(programación asincrónica) en caso de Python 3.5. - Posee una extensa documentación con varios ejemplos de uso.
- Está disponible en PyPI (directorio de recursos de Python) y se puede instalar fácilmente con:
$ pip install telepot
Sitio web o repositorio
https://github.com/nickoala/telepotEjemplo de uso
Para poder experimentar con Telepot tenemos que tener una cuenta de bot en Telegram, por lo cual debemos hablar con el @BotFather, crear una y obtener su token, esto es, un código bastante similar a nuestras claves privadas de Steem y su papel es autenticar las peticiones de la aplicación. En mi caso, como ya he desarrollado varios bots en Telegram, tengo unos cuantos tokens ya disponibles.
Podemos ahora abrir una sesión interactiva de Python:
import telepot
mi_bot = telepot.Bot("463827309:Kr-JYEcg9DWtYMnpBDk0bVd8Oo2DLAcTJ7G")
El código que se envía a la clase Bot es uno de mis tokens de Telegram, fictíceo, claro está. Con ello se ha creado un objeto Bot llamado mi_bot. Ahora podemos probar la conexión solicitando información de la cuenta de bot con el método getMe.
import pprint
pprint.pprint(mi_bot.getMe())
{'first_name': 'Mi bot de pruebas',
'id': 111111111,
'is_bot': True,
'username': 'mibotdepruebas'}
Con ello obtenemos la información sobre la cuenta que se muestra, tal como su nombre first_name, su id (id), su condición (bot o no is_bot) y su nombre de usuario username. Lógicamente, he ocultado los valores reales por cuestiones de privacidad.
Algo que también notamos aquí es el antemencionado método getMe que originalmente es un endpoint de la API de Bot de Telegram, al cual los creadores del framework han decidido llamarlo exactamente de ese modo (usando mayúsculas o estilo camelcase) a pesar de que ello contradice el estilo convencional de Python. No obstante, la idea es transmitir la impresión de estar utilizando la API de Bot de Telegram siguiendo la notación manejada en su documentación oficial.
En general, mostraré a continuación un script de aplicación de este framework al programar un bot que diga la fecha y hora cuando se usa el comando tiempo (ver imágenes 1 y 2).
Si has tenido experiencia programando, seguramente te parecerá entendible el script mostrado. Básicamente importa telepot y la clase MessageLoop (líneas 3 y 4), la cual se encargará de hacer que el bot entre en un loop o ciclo, haciendo peticiones constantemente a la API de Bots de Telegram. Luego se declara un manejador (handler) que es requerido por la clase MessageLoop (línea 25). En el manejador se definen las instrucciones de lo que hará el bot, primero determinando qué dijo el usuario (línea 11) y en caso de que haya sido un comando (línea 13), calcular y formatear la hora y envíarsela al usuario (líneas 14-19). En este framework, se arranca el bot en un hilo independiente (línea 25) y se retiene el hilo principal con un bucle infinito (líneas 27-28). Los resultados se muestran en la imagen 2, donde cada vez que el usuario ingresa el comando "/tiempo" el bot responderá con la fecha y hora.
En resumen
Telepot es una opción si se quieren desarrollar bots de Telegram en el lenguaje de programación Python. Está hecho como software libre y código abierto, y está alojado públicamente en GitHub. Además, posee una extensa documentación con varios ejemplos. Como contraparte hay que mencionar que su comunidad no ha podido mantener el ritmo de desarrollo acorde a las novedades de la Telegram Bot API, por lo cual la herramienta está algo desactualizada. Una alternativa actualizada para el mismo cometido es la biblioteca python-telegram-bot que ya hemos aplicado anteriormente y quizá la reseñemos en el futuro nuevamente como parte de Mi agenda Python.
Si tienes alguna duda o aporte no dudes en hacerlo saber. Nos vemos.
ALGUNAS FUENTES DE CONSULTA
Si estás interesado en más temas sobre Ciencia, Tecnología, Ingeniería y Matemáticas (STEM, siglas en inglés), consulta las etiquetas #STEM-Espanol y #SteemSTEM, donde puedes encontrar más contenido de calidad y también hacer tus aportes. Puedes unirte al servidor de Discord de STEM-Espanol para participar aún más en nuestra comunidad y consultar los reportes semanales publicados por @STEM-Espanol.
Créditos: @IAmPhysical
Créditos: @Eniolw
NOTAS ACLARATORIAS
- La imagen de pie es de @CarlosERP-2000 y @IAmPhysical y es de dominio público.
- A menos que haya sido indicado lo contrario, las imágenes de esta publicación han sido elaboradas por el autor, lo que incluye la imagen de banner, creada con base en imágenes de dominio público y en un logo de Python adaptado por Rocket000 y otros (fuente).
