- Áreas de automação e por onde começar
- Automação Simples
- Automação de API pública
- Engenharia Reversa de API
- Considerações éticas de automação
- Criando um script de limpeza de diretório
- Um guia completo para criação de bot e automação do seu trabalho diário
Áreas de automação e por onde começar
Vamos começar definindo que tipo de automação existem.
A arte da automação se aplica à maioria dos setores. Para iniciantes, ele ajuda em tarefas como extrair endereços de e-mail de vários documentos para que você possa fazer uma explosão de e-mail. Ou abordagens mais complexas, como otimizar fluxos de trabalho e processos dentro de grandes corporações.
Obviamente, passar de pequenos scripts pessoais para uma grande infraestrutura de automação que substitui pessoas reais envolve um processo de aprendizado e aprimoramento. Então, vamos ver onde você pode começar sua jornada.
Automações Simples
Automatizações simples permitem um ponto de entrada rápido e direto. Isso pode abranger pequenos processos independentes, como limpeza de projetos e reestruturação de arquivos dentro de diretórios ou partes de um fluxo de trabalho, como redimensionar automaticamente os arquivos já salvos.
Automações de API pública
As automações de API pública são a forma mais comum de automação, já que podemos acessar a maioria das funcionalidades usando solicitações HTTP para APIs atualmente. Por exemplo, se você deseja automatizar a rega do seu jardim inteligente feito em casa.
Para fazer isso, você deseja verificar o clima do dia atual para ver se precisa regar ou se há chuva.
Engenharia Reversa de API
A automação baseada em engenharia reversa da API é mais comum em bots reais e na seção “Bot Imposter” do gráfico na seção “Considerações éticas” abaixo.
Ao fazer engenharia reversa de uma API, entendemos o fluxo de aplicativos do usuário. Um exemplo pode ser o login em um jogo de navegador online.
Ao entender o processo de login e autenticação, podemos duplicar esse comportamento com nosso próprio script. Em seguida, podemos criar nossa própria interface para trabalhar com o aplicativo, mesmo que eles não o forneçam.
Seja qual for a abordagem que você visa, sempre considere se é legal ou não.
Você não quer se meter em problemas, não é? 😁
Considerações éticas
Um cara do GitHub uma vez entrou em contato comigo e me disse o seguinte:
“Gostos e engajamento são moeda digital e você os está desvalorizando.”
Isso ficou comigo e me fez questionar a ferramenta que eu construí exatamente para esse fim.
O fato de que essas interações e o engajamento podem ser automatizados e “falsificados” cada vez mais leva a um sistema de mídia social distorcido e quebrado.
As pessoas que produzem conteúdo valioso e bom são invisíveis para outros usuários e empresas de publicidade se não usarem bots e outros sistemas de engajamento.
Um amigo meu criou a seguinte associação aos “Nove Círculos do Inferno” de Dante, onde cada passo mais perto de se tornar um influenciador social você fica cada vez menos consciente de como todo esse sistema está quebrado.
Quero compartilhar isso com você aqui, pois acho que é uma representação extremamente precisa do que testemunhei enquanto trabalhava ativamente com os influenciadores do InstaPy.
Nível 1: Limbo – Se você não botar nada
Nível 2: Namoro – Quando você gosta e segue manualmente o maior número possível de pessoas, para que elas o sigam / curtam suas postagens
Nível 3: Conspiração – quando você entra em um grupo de telegramas para curtir e comentar 10 fotos, para que as próximas 10 pessoas gostem e comentem sua foto
Nível 4: Infidelidade – Quando você usa um Assistente virtual de baixo custo para curtir e seguir em seu nome
Nível 5: Luxúria – Quando você usa um bot para dar curtidas e não recebe curtidas em troca (mas não paga por isso – por exemplo, uma extensão do Chrome)
Nível 6: Promiscuidade – Quando você usa um bot para dar mais de 50 curtidas para obter mais de 50 curtidas, mas você não paga por isso – por exemplo, uma extensão do Chrome
Nível 7: Avareza ou ganância extrema – Quando você usa um bot para curtir / seguir / comentar entre 200 a 700 fotos, ignorando a chance de ser banido
Nível 8: Prostituição – Quando você paga um serviço de terceiros desconhecido para se envolver em curtidas / seguidores recíprocos automatizados para você, mas eles usam sua conta para curtir / seguir de volta
Nível 9: Fraude / Heresia – Quando você compra seguidores e gostos e tenta vender-se a marcas como influenciador
O nível de bots nas mídias sociais é tão prevalente que se você não bot, você ficará preso no nível 1, limbo, sem crescimento de seguidores e baixo envolvimento em relação aos seus colegas.
Na teoria econômica, isso é conhecido como dilema do prisioneiro e jogo de soma zero. Se eu não bot e você bot, você ganha. Se você não bot e eu bot, eu ganho. Se ninguém botar, todo mundo ganha. Mas como não há incentivo para que todos não façam bot, todo mundo faz bots, então ninguém ganha.
Esteja ciente disso e nunca esqueça as implicações que todo esse conjunto de ferramentas tem nas mídias sociais.
Queremos evitar lidar com implicações éticas e ainda trabalhar em um projeto de automação aqui. É por isso que criaremos um script simples de limpeza de diretório que ajuda a organizar suas pastas bagunçadas.
Criando um script de limpeza de diretório
Agora queremos ver um script bastante simples. Ele limpa automaticamente um diretório, movendo esses arquivos para as pastas de acordo com a extensão do arquivo.
Então, tudo o que queremos fazer é o seguinte:
Configurando o Analisador de Argumentos
Como trabalhamos com a funcionalidade do sistema operacional, como mover arquivos, precisamos importar o os biblioteca. Ademais, queremos dar ao usuário algum controle sobre qual pasta é limpa. Vamos usar o argparse biblioteca para isso.
import os
import argparseDepois de importar as duas bibliotecas, vamos primeiro configurar o analisador de argumentos. Certifique-se de fornecer uma descrição e um texto de ajuda para cada argumento adicionado, para fornecer ajuda valiosa ao usuário quando digitar --help.
Nosso argumento será nomeado --path. Os traços duplos na frente do nome informam à biblioteca que esse é um argumento opcional. Por padrão, queremos usar o diretório atual, portanto, defina o valor padrão como ".".
parser = argparse.ArgumentParser(
description="Clean up directory and put files into according folders."
)
parser.add_argument(
"--path",
type=str,
default=".",
help="Directory path of the to be cleaned directory",
)
# parse the arguments given by the user and extract the path
args = parser.parse_args()
path = args.path
print(f"Cleaning up directory {path}")Isso já termina a seção de análise de argumentos – é bastante simples e legível, certo?
Vamos executar nosso script e verificar se há erros.
python directory_clean.py --path ./test
=> Cleaning up directory ./testUma vez executado, podemos ver o nome do diretório sendo impresso no console, perfeito.
Vamos agora usar o os biblioteca para obter os arquivos do caminho especificado.
Obtendo uma lista de arquivos da pasta
Usando o os.listdir(path) e, fornecendo um caminho válido, obtemos uma lista de todos os arquivos e pastas dentro desse diretório.
Depois de listar todos os elementos na pasta, queremos diferenciar arquivos e pastas, pois não queremos limpar as pastas, apenas os arquivos.
Nesse caso, usamos uma compreensão da lista Python para percorrer todos os elementos e colocá-los nas novas listas se eles atenderem ao requisito de ser um arquivo ou uma pasta.
# get all files from given directory
dir_content = os.listdir(path)
# create a relative path from the path to the file and the document name
path_dir_content = [os.path.join(path, doc) for doc in dir_content]
# filter our directory content into a documents and folders list
docs = [doc for doc in path_dir_content if os.path.isfile(doc)]
folders = [folder for folder in path_dir_content if os.path.isdir(folder)]
# counter to keep track of amount of moved files
# and list of already created folders to avoid multiple creations
moved = 0
created_folders = []
print(f"Cleaning up {len(docs)} of {len(dir_content)} elements.")Como sempre, vamos garantir que nossos usuários recebam feedback. Portanto, adicione uma declaração de impressão que indique ao usuário quantos arquivos serão movidos.
python directory_clean.py --path ./test
=> Cleaning up directory ./test
=> Cleaning up 60 of 60 elements.Depois de re-executar o script python, agora podemos ver que o /test pasta que criei contém 60 arquivos que serão movidos.
Criando uma pasta para cada extensão de arquivo
O próximo e mais importante passo agora é criar a pasta para cada uma das extensões de arquivo. Queremos fazer isso examinando todos os nossos arquivos filtrados e, se eles tiverem uma extensão para a qual ainda não existe uma pasta, crie uma.
o os A biblioteca nos ajuda a ter funcionalidades mais agradáveis, como a divisão do tipo de arquivo e caminho de um determinado documento, extraindo o próprio caminho e o nome do documento.
# go through all files and move them into according folders
for doc in docs:
# separte name from file extension
full_doc_path, filetype = os.path.splitext(doc)
doc_path = os.path.dirname(full_doc_path)
doc_name = os.path.basename(full_doc_path)
print(filetype)
print(full_doc_path)
print(doc_path)
print(doc_name)
breakA declaração de quebra no final do código acima garante que o nosso terminal não receba spam se o nosso diretório contiver dezenas de arquivos.
Depois de configurá-lo, vamos executar nosso script para ver uma saída semelhante a esta:
python directory_clean.py --path ./test
=> ...
=> .pdf
=> ./test/test17
=> ./test
=> test17Agora podemos ver que a implementação acima divide o tipo de arquivo e extrai as partes do caminho completo.
Como temos o tipo de arquivo agora, podemos verificar se uma pasta com o nome desse tipo já existe.
Antes de fazer isso, queremos ter certeza de pular alguns arquivos. Se usarmos o diretório atual "." como caminho, precisamos evitar mover o próprio script python. Uma condição simples se cuida disso.
Ademais, não queremos mudar Arquivos ocultos, então vamos incluir também todos os arquivos que começam com um ponto. o .DS_Store O arquivo no macOS é um exemplo de arquivo oculto.
# skip this file when it is in the directory
if doc_name == "directory_clean" or doc_name.startswith('.'):
continue
# get the subfolder name and create folder if not exist
subfolder_path = os.path.join(path, filetype[1:].lower())
if subfolder_path not in folders:
# create the folderDepois de cuidarmos do script python e dos arquivos ocultos, podemos agora criar as pastas no sistema.
Além de nossa verificação, se a pasta já estava lá quando lemos o conteúdo do diretório, no início, precisamos de uma maneira de rastrear as pastas que já criamos. Essa foi a razão pela qual declaramos o created_folders = [] Lista. Servirá como memória para rastrear os nomes das pastas.
Para criar uma nova pasta, o os biblioteca fornece um método chamado os.mkdir(folder_path) que segue um caminho e cria uma pasta com o nome fornecido.
Este método pode gerar uma exceção, informando que a pasta já existe. Então, também vamos ter certeza de capturar esse erro.
if subfolder_path not in folders and subfolder_path not in created_folders:
try:
os.mkdir(subfolder_path)
created_folders.append(subfolder_path)
print(f"Folder {subfolder_path} created.")
except FileExistsError as err:
print(f"Folder already exists at {subfolder_path}... {err}")Depois de configurar a criação da pasta, vamos executar novamente o nosso script.
python directory_clean.py --path ./test
=> ...
=> Folder ./test/pdf created.Na primeira execução, podemos ver uma lista de logs informando que as pastas com os tipos fornecidos de extensões de arquivo foram criadas.
Movendo cada arquivo para a subpasta direita
O último passo agora é realmente mover os arquivos para suas novas pastas pai.
Uma coisa importante a entender ao trabalhar com operações do sistema operacional é que às vezes as operações não podem ser desfeitas. Este é, por exemplo, o caso com exclusão. Portanto, faz sentido primeiro desconectar o comportamento que nosso script obteria se o executássemos.
É por isso que o os.rename(...) O método foi comentado aqui.
# get the new folder path and move the file
new_doc_path = os.path.join(subfolder_path, doc_name) + filetype
# os.rename(doc, new_doc_path)
moved += 1
print(f"Moved file {doc} to {new_doc_path}")Depois de executar nosso script e ver o log correto, agora podemos remover o hash do comentário antes de nosso os.rename() e faça uma tentativa final.
# get the new folder path and move the file
new_doc_path = os.path.join(subfolder_path, doc_name) + filetype
os.rename(doc, new_doc_path)
moved += 1
print(f"Moved file {doc} to {new_doc_path}")
print(f"Renamed {moved} of {len(docs)} files.")python directory_clean.py --path ./test
=> ...
=> Moved file ./test/test17.pdf to ./test/pdf/test17.pdf
=> ...
=> Renamed 60 of 60 files.Essa execução final agora moverá todos os arquivos para as pastas apropriadas e nosso diretório será bem limpo sem a necessidade de ações manuais.
Na próxima etapa, agora poderíamos usar o script que criamos acima e, por exemplo, agendá-lo para ser executado toda segunda-feira para limpar nossa pasta Downloads para mais estrutura.
É exatamente isso que estamos criando como acompanhamento dentro de nosso curso Udemy de criação de bot e automação de fluxo de trabalho.
Felix e eu construímos um curso em vídeo on-line para ensinar como criar seus próprios bots com base no que aprendemos construindo InstaPy e ele Travian-Bot. De fato, ele foi forçado a derrubar, pois era muito eficaz.
Participe diretamente e comece a aprender.
Se você tiver alguma dúvida ou comentário, sinta-se à vontade para entrar em contato conosco no Twitter ou diretamente no seção de discussão do curso 😁