So bauen Sie einen Bot und automatisieren Ihre tägliche Arbeit

Die meisten Jobs haben sich wiederholende Aufgaben, die Sie automatisieren können, wodurch ein Teil Ihrer wertvollen Zeit frei wird. Dies macht die Automatisierung zu einer Schlüsselkompetenz.

Eine kleine Gruppe qualifizierter Automatisierungsingenieure und Domänenexperten kann möglicherweise viele der mühsamsten Aufgaben ganzer Teams automatisieren.

In diesem Artikel werden die Grundlagen der Workflow-Automatisierung mit Python - einer leistungsstarken und leicht zu erlernenden Programmiersprache - erläutert. Wir werden Python verwenden, um ein einfaches und hilfreiches kleines Automatisierungsskript zu schreiben, das einen bestimmten Ordner bereinigt und jede Datei in den entsprechenden Ordner legt.

Unser Ziel wird es am Anfang nicht sein, perfekten Code zu schreiben oder ideale Architekturen zu erstellen.

Wir werden auch nichts "Illegales" bauen. Stattdessen sehen wir uns an, wie Sie ein Skript erstellen, das einen bestimmten Ordner und alle seine Dateien automatisch bereinigt.

Inhaltsverzeichnis

  1. Bereiche der Automatisierung und Startpunkte
    • Einfache Automatisierung
    • Öffentliche API-Automatisierung
    • API Reverse Engineering
  2. Ethische Überlegungen zur Automatisierung
  3. Erstellen eines Verzeichnisbereinigungsskripts
  4. Eine vollständige Anleitung zur Bot-Erstellung und Automatisierung Ihrer täglichen Arbeit

Bereiche der Automatisierung und Startpunkte

Beginnen wir mit der Definition der Automatisierungsarten.

Die Kunst der Automatisierung gilt für die meisten Branchen. Für den Anfang hilft es bei Aufgaben wie dem Extrahieren von E-Mail-Adressen aus einer Reihe von Dokumenten, damit Sie eine E-Mail-Explosion durchführen können. Oder komplexere Ansätze wie die Optimierung von Workflows und Prozessen in großen Unternehmen.

Der Übergang von kleinen persönlichen Skripten zu einer großen Automatisierungsinfrastruktur, die die tatsächlichen Mitarbeiter ersetzt, erfordert natürlich einen Lern- und Verbesserungsprozess. Mal sehen, wo Sie Ihre Reise beginnen können.

Einfache Automatisierungen

Einfache Automatisierungen ermöglichen einen schnellen und unkomplizierten Einstiegspunkt. Dies kann kleine unabhängige Prozesse wie Projektbereinigungen und Umstrukturierungen von Dateien in Verzeichnissen oder Teile eines Workflows wie das automatische Ändern der Größe bereits gespeicherter Dateien abdecken.

Öffentliche API-Automatisierungen

Öffentliche API-Automatisierungen sind die häufigste Form der Automatisierung, da wir heutzutage über HTTP-Anforderungen an APIs auf die meisten Funktionen zugreifen können. Zum Beispiel, wenn Sie die Bewässerung Ihres selbstgemachten Smart Garden zu Hause automatisieren möchten.

Dazu möchten Sie das Wetter des aktuellen Tages überprüfen, um festzustellen, ob Sie Wasser benötigen oder ob Regen fällt.

API Reverse Engineering

API-Reverse-Engineering-basierte Automatisierung ist in tatsächlichen Bots und im Abschnitt "Bot Imposter" der Tabelle im Abschnitt "Ethische Überlegungen" weiter unten häufiger.

Durch das Reverse Engineering einer API verstehen wir den Benutzerfluss von Anwendungen. Ein Beispiel könnte die Anmeldung bei einem Online-Browsergame sein.

Wenn Sie den Anmelde- und Authentifizierungsprozess verstehen, können Sie dieses Verhalten mit unserem eigenen Skript duplizieren. Dann können wir unsere eigene Schnittstelle erstellen, um mit der Anwendung zu arbeiten, obwohl sie diese nicht selbst bereitstellt.

Welchen Ansatz Sie auch anstreben, überlegen Sie immer, ob er legal ist oder nicht.

Sie wollen sich doch nicht in Schwierigkeiten bringen, oder? ?

Ethische Überlegungen

Ein Typ auf GitHub hat mich einmal kontaktiert und mir folgendes gesagt:

"Likes und Engagement sind digitale Währung und Sie entwerten sie."

Dies blieb bei mir und ließ mich das Werkzeug in Frage stellen, das ich genau für diesen Zweck gebaut habe.

Die Tatsache, dass diese Interaktionen und das Engagement immer mehr automatisiert und „gefälscht“ werden können, führt zu einem verzerrten und kaputten Social-Media-System.

Menschen, die wertvolle und gute Inhalte produzieren, sind für andere Benutzer und Werbefirmen unsichtbar, wenn sie keine Bots und andere Engagement-Systeme verwenden.

Ein Freund von mir hatte die folgende Verbindung zu Dantes „Neun Kreisen der Hölle“, in der man sich mit jedem Schritt, der einem sozialen Einflussfaktor näher kommt, immer weniger bewusst wird, wie kaputt dieses ganze System tatsächlich ist.

Ich möchte dies hier mit Ihnen teilen, da ich denke, dass es eine äußerst genaue Darstellung dessen ist, was ich bei der aktiven Arbeit mit Influencern mit InstaPy gesehen habe.

Level 1: Limbo - Wenn Sie überhaupt nicht bot

Level 2: Flirt - Wenn du so viele Leute wie möglich manuell magst und ihnen folgst, damit sie dir folgen / deine Beiträge mögen

Stufe 3: Verschwörung - Wenn Sie einer Telegrammgruppe beitreten, um 10 Fotos zu mögen und zu kommentieren, damit die nächsten 10 Personen Ihr Foto mögen und kommentieren

Stufe 4: Untreue - Wenn Sie einen kostengünstigen virtuellen Assistenten verwenden, um in Ihrem Namen zu mögen und zu folgen

Level 5: Lust - Wenn Sie einen Bot verwenden, um Likes zu geben, und keine Likes zurückerhalten (aber Sie zahlen nicht dafür - zum Beispiel eine Chrome-Erweiterung)

Stufe 6: Promiskuität - Wenn Sie einen Bot verwenden, um 50+ Likes zu geben, um 50+ Likes zu erhalten, aber nicht dafür bezahlen - zum Beispiel eine Chrome-Erweiterung

Stufe 7: Geiz oder extreme Gier - Wenn Sie einen Bot verwenden, um zwischen 200 und 700 Fotos zu mögen / zu folgen / zu kommentieren, ignorieren Sie die Möglichkeit, gebannt zu werden

Stufe 8: Prostitution - Wenn Sie einen unbekannten Drittanbieter-Service bezahlen, um automatisierte gegenseitige Likes / Follows für Sie durchzuführen, diese jedoch Ihr Konto verwenden, um Likes / Follow-ups durchzuführen

Level 9: Betrug / Häresie - Wenn Sie Follower und Likes kaufen und versuchen, sich als Influencer an Marken zu verkaufen

Der Grad der Bodenbildung in sozialen Medien ist so weit verbreitet, dass Sie , wenn Sie nicht bot, in Level 1, Limbo , stecken bleiben , ohne Follower-Wachstum und geringes Engagement im Vergleich zu Ihren Kollegen.

In der Wirtschaftstheorie ist dies als Gefangenendilemma und Nullsummenspiel bekannt . Wenn ich nicht Bot und du Bot, gewinnst du. Wenn Sie nicht bot und ich bot, gewinne ich. Wenn niemand bots, gewinnt jeder. Aber da es keinen Anreiz für alle gibt, nicht zu bot, werden alle Bots, sodass niemand gewinnt.

Seien Sie sich dessen bewusst und vergessen Sie niemals die Auswirkungen, die dieses gesamte Tool auf soziale Medien hat.

Wir wollen vermeiden, mit ethischen Implikationen umzugehen, und arbeiten hier immer noch an einem Automatisierungsprojekt. Aus diesem Grund erstellen wir ein einfaches Skript zur Verzeichnisbereinigung, mit dem Sie Ihre unordentlichen Ordner organisieren können.

Erstellen eines Verzeichnisbereinigungsskripts

Wir wollen uns nun ein recht einfaches Skript ansehen. Es bereinigt automatisch ein bestimmtes Verzeichnis, indem diese Dateien basierend auf der Dateierweiterung in entsprechende Ordner verschoben werden.

Wir wollen also nur Folgendes tun:

Einrichten des Argument-Parsers

Since we are working with operating system functionality like moving files, we need to import the os library. In addition to that, we want to give the user some control over what folder is cleaned up. We will use the argparse library for this.

import os import argparse

After importing the two libraries, let's first set up the argument parser. Make sure to give a description and a help text to each added argument to give valuable help to the user when they type --help.

Our argument will be named --path. The double dashes in front of the name tell the library that this is an optional argument. By default we want to use the current directory, so set the default value to be ".".

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}")

This already finishes the argument parsing section – it's quite simple and readable, right?

Let's execute our script and check for errors.

python directory_clean.py --path ./test => Cleaning up directory ./test

Once executed, we can see the directory name being printed to the console, perfect.

Let's now use the os library to get the files of the given path.

Getting a list of files from the folder

By using the os.listdir(path) method and providing it a valid path, we get a list of all the files and folders inside of that directory.

After listing all elements in the folder, we want to differentiate between files and folders since we don't want to clean up the folders, only the files.

In this case, we use a Python list comprehension to iterate through all the elements and put them into the new lists if they meet the given requirement of being a file or folder.

# 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.")

As always, let's make sure that our users get feedback. So add a print statement that gives the user an indication about how many files will be moved.

python directory_clean.py --path ./test => Cleaning up directory ./test => Cleaning up 60 of 60 elements.

After re-executing the python script, we can now see that the /test folder I created contains 60 files that will be moved.

Creating a folder for every file extension

The next and more important step now is to create the folder for each of the file extensions. We want to do this by going through all of our filtered files and if they have an extension for which there is no folder already, create one.

The os library helps us with more nice functionality like the splitting of the filetype and path of a given document, extracting the path itself and name of the document.  

# 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) break

The break statement at the end of the code above makes sure that our terminal does not get spammed if our directory contains dozens of files.

Once we've set this up, let's execute our script to see an output similar to this:

python directory_clean.py --path ./test => ... => .pdf => ./test/test17 => ./test => test17

We can now see that the implementation above splits off the filetype and then extracts the parts from the full path.

Since we have the filetype now, we can check if a folder with the name of this type already exists.

Before we do that, we want to make sure to skip a few files. If we use the current directory "." as the path, we need to avoid moving the python script itself. A simple if condition takes care of that.

In addition to that, we don't want to move Hidden Files, so let's also include all files that start with a dot. The .DS_Store file on macOS is an example of a hidden file.

 # 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 folder

Once we've taken care of the python script and hidden files, we can now move on to creating the folders on the system.

In addition to our check, if the folder already was there when we read the content of the directory, in the beginning, we need a way to track the folders we've already created. That was the reason we declared the created_folders = [] list. It will serve as the memory to track the names of folders.

To create a new folder, the os library provides a method called os.mkdir(folder_path) that takes a path and creates a folder with the given name there.

This method may throw an exception, telling us that the folder already exists. So let's also make sure to catch that error.

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}")

After setting up the folder creation, let's re-execute our script.

python directory_clean.py --path ./test => ... => Folder ./test/pdf created.

On the first run of execution, we can see a list of logs telling us that the folders with the given types of file extensions have been created.

Moving each file into the right subfolder

The last step now is to actually move the files into their new parent folders.

An important thing to understand when working with os operations is that sometimes operations can not be undone. This is, for example, the case with deletion. So it makes sense to first only log out the behavior our script would achieve if we execute it.

This is why the os.rename(...) method has been commented here.

# 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}")

After executing our script and seeing the correct logging, we can now remove the comment hash before our os.rename() method and give it a final go.

# 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.

This final execution will now move all the files into their appropriate folders and our directory will be nicely cleaned up without the need for manual actions.

In the next step, we could now use the script we created above and, for example, schedule it to execute every Monday to clean up our Downloads folder for more structure.

That is exactly what we are creating as a follow-up inside of our Bot Creation and Workflow Automation Udemy course.

A Complete Guide to Bot Creation and Automating Your Everyday Work

Felix and I built an online video course to teach you how to create your own bots based on what we've learned building InstaPy and his Travian-Bot. In fact, he was even forced to take down since it was too effective.

Join right in and start learning.

If you have any questions or feedback, feel free to reach out to us on Twitter or directly in the discussion section of the course ?