Criando um bot no Telegram

Alguns anos atrás fiz um bot no Telegram e me surpreendi como é simples e rápido fazer utilizando Python. O Telegram fornece uma API para seus bots e há varias bibliotecas em diversas linguagens para interagir de maneira simples com esta API. A primeira coisa que precisamos fazer é acessar o @BotFather e solicitar a criação de um novo bot. Após seguirmos as instruções e configurarmos o nosso bot receberemos um token que será utilizado por nós mais a frente. ...

November 15, 2021 · Lucas Polo

Enviando SMS via Amazon Web Services SNS com Python

O Amazon Web Services SNS é um serviço que permite a notificação de diversas formas, desde conexões com as finas SQS do SMS até o envio de mensagens SMS. É muito comum o serviço ser utilizado por empresas para mandar notificações para seus clientes e é muito simples de ser utilizado. A primeira coisa necessária para fazer o envio de SMS é a criação de usuário com permissões de acesso ao SNS na Amazon. Com o usuário criado basta instalar a biblioteca boto3 e assim podemos criar o script necessário. Primeiro é necessário criar um cliente que acessa o serviço do SNS: ...

November 8, 2021 · Lucas Polo

Criando tarefas peródicas com o Celery Beat

Como vimos neste artigo postado anteriormente aqui no blog, o Celery é uma ferramenta que permite executar tarefas de maneira assíncrona através de mensageria. Isso por si só já traz diversos benefícios, mas também é possível imaginarmos criando tarefas que seriam executadas dados certos intervalos de tempo (por exemplo o disparo de processos serem executados de madrugada) ou durante horários específicos. Este trabalho pode ser feito manualmente, basta criarmos um programa em Python que analisa todos os parâmetros temporais cadastrados e dispare as tarefas na hora adequada invocando a função através do método .delay(). ...

October 25, 2021 · Lucas Polo

Fazendo upload de arquivos para o Google Cloud Storage com Python

Algum tempo atrás precisei aprender a fazer upload de arquivos para o Google Cloud Storage. Uma das coisas que eu gosto de fazer para me ajudar aprender a fazer algo é criar um scriptzinho com o conceito do que quero, sem aplicar em grandes projetos, evitando assim grandes complexidades. Assim na época eu criei este script simples que faz o upload do arquivo em um bucket do GCS. A primeira coisa que você precisa fazer é ter instalada a biblioteca, para isso temos o bom e velho pip: ...

October 11, 2021 · Lucas Polo

Pytest: Pequeno manual para o dia a dia - Fixtures

Depois que comecei a programar em Python no dia a dia eu me deparei com uma das ferramentas mais legais de teste que conheci, o Pytest. Por padrão o Python já vem com uma ferramenta de testes chamada Unittest, que é muito boa e funcional, porém como ela foi criada junto com o Python algumas arestas dela ficaram soltas, principalmente por não utilizar toda a potência que a própria linguagem oferece. Aqui eu vou deixar algumas coisas muito interessantes que uso no meu dia a dia e como podem servir principalmente como um guia rápido do Pytest. ...

September 20, 2021 · Lucas Polo

O jeito pythonico das propriedades no Python - parte 2

Este post é uma sequência deste outro post sobre os getters, vale apena conferi-lo antes. Após entendermos melhor como funcionam as propriedades em Python e aplicarmos os getters em nossa classe Circulo, ficamos com a pendência de entender como podemos agora aplicarmos os setters. O principio é muito similar e simples. Para isso basta definirmos o método em questão e decorá-lo com @nome_da_propriedade.setter. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import math class Circulo: def __init__(self, raio): self._raio = raio @property def raio(self): return self._raio @property def area(self): return self.raio ** 2 * math.pi @property def circunferencia(self): return self.raio * 2 * math.pi @raio.setter def raio(self, value): assert value > 0, 'O valor do raio deve ser maior que 0' self._raio = value c = Circulo(5) print(c.area) c.raio = -1 Aproveitei também para já colocar uma validação no método e passei a utilizá-lo no método __init__. A criação é muito simples e prática, apesar de a API do setter não ser tão intuitiva, seu funcionamento é tão simples como a criação dos getters. Por se tratar um método podemos inclusive fazer outras computações nele, como por exemplo criar um setter para a área: ...

August 23, 2021 · Lucas Polo

O jeito pythonico das propriedades no Python - Parte 1

Uma constante na orientação a objetos é a presença de propriedades dentro dos objetos quando precisamos armazenar dados para alguma manipulação posterior. É muito comum, principalmente quando viemos de outras linguagens, criarmos os famosos getters and setters para manter também um bom nível de encapsulamento. Vamos ter como exemplo a classe Circulo abaixo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import math class Circulo: def __init__(self, raio): self.raio = raio def area(self): return self.raio ** 2 * math.pi def circunferencia(self): return self.raio * 2 * math.pi c = Circulo(1) print(c.raio) print(c.area()) print(c.circunferencia()) Perceba que para definirmos um círculo temos que passar o seu raio, com isso podemos calcular facilmente a sua área e circunferência. Precisamos também acessar ocasionalmente esse raio, podemos fazer isso através de dos getters que comentamos, mas isso não é o jeito do Python, ou como falaremos, o jeito mais Pythonico. ...

August 16, 2021 · Lucas Polo

Fazendo requests concorrentemente (assíncronas) no Python - Parte 2

Este post é uma continuação direta do post Lendo arquivos CSV em Python e fazendo requisições - Parte 1 Depois de conseguirmos ler o CSV e conseguirmos fazer requisições em lote, podemos agora iniciar uma primeira otimização, realizar as cotações em paralelo. Para isto usaremos a API assíncrona do Python em conjunto com uma nova biblioteca de requests, a HTTPX. A primeira coisa que faremos é alterar a biblioteca Python que utilizamos, adaptar a requisição e nosso programa para começar a trabalhar assíncronamente. As alterações são principalmente na definição das funções e também nas mudanças para as chamadas das funções assíncronas que agora precisam do await antes: ...

July 12, 2021 · Lucas Polo

Lendo arquivos CSV em Python e fazendo requisições - Parte 1

Algumas vezes surge a necessidade de fazermos algum processamento em uma base de dados, como requisições e afins. É muito comum neste momento recebermos um CSV ou até mesmo uma planilha do Excel, ai neste momento devemos escrever um script que processe essa informação. Suponhamos que precisamos atualizar o nome de algum cliente dado seus id’s e nomes, seguindo um arquivo neste modelo: 1 2 3 4 5 6 7 8 id,nome 1,Cebolinha 2,Monica 3,Magali 4,Cascão 5,Penadinho 6,Alminha 7,Horácio A abordagem mais simples que eu sigo é iniciar criando uma função primária, que no geral chamo de main e iterar no arquivo CSV usando um DictReader: ...

June 28, 2021 · Lucas Polo

Drops: Quicksort em Python

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 from typing import List def quicksort(l: List): """ Recebe uma lista de elementos e devolve eles ordenados """ # Caso base! Nunca se esqueça disso em funções recursivas@ if not len(l): return l # Escolhemos um pivot, removemos ele da lista! # Reduzir a entrada também é essêncial! pivot = l.pop(0) # Separamos os elementos menores lower = [e for e in l if e <= pivot] # Separamos os maiores uppper = [e for e in l if e > pivot] # Os menores ficam na esquerda do pivo # Os maiores ficam na direita # Ai acontece a magia da recursão... # Ordedamos os menores e os maiores com a mesma função. return quicksort(lower) + [pivot] + quicksort(uppper) def main(): elems = [3,2,3,6,7,4,2,-1] print(quicksort(elems)) if __name__ == '__main__': main()

January 3, 2020 · Lucas Polo