Πώς να φτιάξετε ένα Bot και να αυτοματοποιήσετε την καθημερινή σας εργασία

Οι περισσότερες εργασίες έχουν επαναλαμβανόμενες εργασίες που μπορείτε να αυτοματοποιήσετε, γεγονός που ελευθερώνει λίγο από τον πολύτιμο χρόνο σας. Αυτό καθιστά τον αυτοματισμό βασική ικανότητα να αποκτήσετε.

Μια μικρή ομάδα εξειδικευμένων μηχανικών αυτοματισμού και εμπειρογνωμόνων τομέα ενδέχεται να είναι σε θέση να αυτοματοποιήσει πολλές από τις πιο κουραστικές εργασίες ολόκληρων ομάδων.

Σε αυτό το άρθρο, θα διερευνήσουμε τα βασικά της αυτοματοποίησης ροής εργασίας χρησιμοποιώντας το Python - μια ισχυρή και εύκολη στη μάθηση γλώσσα προγραμματισμού. Θα χρησιμοποιήσουμε το Python για να γράψουμε ένα εύκολο και χρήσιμο μικρό σενάριο αυτοματισμού που θα καθαρίσει έναν δεδομένο φάκελο και θα βάλει κάθε αρχείο στον αντίστοιχο φάκελό του.

Στόχος μας δεν θα είναι να γράψουμε τέλειο κώδικα ή να δημιουργήσουμε ιδανικές αρχιτεκτονικές στην αρχή.

Επίσης, δεν θα χτίσουμε τίποτα "παράνομο". Αντ 'αυτού θα δούμε πώς να δημιουργήσουμε ένα σενάριο που καθαρίζει αυτόματα έναν δεδομένο φάκελο και όλα τα αρχεία του.

Πίνακας περιεχομένων

  1. Περιοχές αυτοματισμού και πού να ξεκινήσετε
    • Απλή αυτοματοποίηση
    • Δημόσιος αυτοματισμός API
    • Αντίστροφη μηχανική API
  2. Ηθικά ζητήματα αυτοματισμού
  3. Δημιουργία σεναρίου καθαρισμού καταλόγου
  4. Ένας πλήρης οδηγός για τη δημιουργία Bot και την αυτοματοποίηση της καθημερινής εργασίας σας

Περιοχές αυτοματισμού και πού να ξεκινήσετε

Ας ξεκινήσουμε με τον καθορισμό του είδους αυτοματισμών που υπάρχουν.

Η τέχνη του αυτοματισμού ισχύει για τους περισσότερους τομείς. Για αρχάριους, βοηθάει σε εργασίες όπως η εξαγωγή διευθύνσεων email από μια δέσμη εγγράφων, ώστε να μπορείτε να κάνετε ένα email. Ή πιο περίπλοκες προσεγγίσεις όπως βελτιστοποίηση ροών εργασίας και διαδικασιών εντός μεγάλων εταιρειών.

Φυσικά, η μετάβαση από μικρά προσωπικά σενάρια σε μεγάλη υποδομή αυτοματισμού που αντικαθιστά τους πραγματικούς ανθρώπους περιλαμβάνει μια διαδικασία μάθησης και βελτίωσης. Ας δούμε από πού μπορείτε να ξεκινήσετε το ταξίδι σας.

Απλοί αυτοματισμοί

Οι απλοί αυτοματισμοί επιτρέπουν ένα γρήγορο και απλό σημείο εισόδου. Αυτό μπορεί να καλύψει μικρές ανεξάρτητες διαδικασίες, όπως εκκαθάριση έργων και αναδιάρθρωση αρχείων μέσα σε καταλόγους ή τμήματα ροής εργασίας, όπως αλλαγή μεγέθους των ήδη αποθηκευμένων αρχείων.

Δημόσιοι αυτοματισμοί API

Οι δημόσιοι αυτοματισμοί API είναι η πιο κοινή μορφή αυτοματισμού, καθώς μπορούμε να έχουμε πρόσβαση στις περισσότερες λειτουργίες χρησιμοποιώντας αιτήματα HTTP σε API σήμερα. Για παράδειγμα, εάν θέλετε να αυτοματοποιήσετε το πότισμα του σπιτικού έξυπνου κήπου σας στο σπίτι.

Για να το κάνετε αυτό, θέλετε να ελέγξετε τον καιρό της τρέχουσας ημέρας για να δείτε εάν πρέπει να ποτίσετε ή εάν υπάρχει βροχή.

Αντίστροφη μηχανική API

Ο αυτοματισμός που βασίζεται στην αντίστροφη μηχανική API είναι πιο συνηθισμένος στα πραγματικά bots και στην ενότητα "Bot Imposter" του γραφήματος στην ενότητα "Ηθικές εκτιμήσεις" παρακάτω.

Με αντίστροφη σχεδίαση ενός API, κατανοούμε τη ροή των εφαρμογών του χρήστη. Ένα παράδειγμα θα μπορούσε να είναι η σύνδεση σε ένα διαδικτυακό παιχνίδι προγράμματος περιήγησης.

Κατανοώντας τη διαδικασία σύνδεσης και ελέγχου ταυτότητας, μπορούμε να αντιγράψουμε αυτήν τη συμπεριφορά με το δικό μας σενάριο. Τότε μπορούμε να δημιουργήσουμε τη δική μας διεπαφή για να δουλέψουμε με την εφαρμογή, παρόλο που δεν την παρέχουν μόνοι τους.

Όποια και αν είναι η προσέγγιση που στοχεύετε, εξετάστε πάντα εάν είναι νόμιμη ή όχι.

Δεν θέλεις να μπεις σε μπελάδες, έτσι; ;

Ηθικά ζητήματα

Κάποιος τύπος στο GitHub κάποτε επικοινωνούσε μαζί μου και μου είπε αυτό:

"Οι προτιμήσεις και η αφοσίωση είναι ψηφιακό νόμισμα και τα υποτιμάτε."

Αυτό κολλήθηκε μαζί μου και με έκανε να αμφισβητήσω το εργαλείο που έχω φτιάξει για ακριβώς αυτόν τον σκοπό.

Το γεγονός ότι αυτές οι αλληλεπιδράσεις και η εμπλοκή μπορούν να αυτοματοποιηθούν και να «παραποιηθούν» όλο και περισσότερο οδηγεί σε ένα παραμορφωμένο και σπασμένο σύστημα κοινωνικών μέσων.

Τα άτομα που παράγουν πολύτιμο και καλό περιεχόμενο είναι αόρατα για άλλους χρήστες και διαφημιστικές εταιρείες εάν δεν χρησιμοποιούν bots και άλλα συστήματα αφοσίωσης.

Ένας φίλος μου ήρθε με τον ακόλουθο σύνδεσμο με τους «Εννέα Κύκλους της Κόλασης» του Δάντη, όπου με κάθε βήμα πιο κοντά να γίνετε κοινωνικός επηρεαστής, όλο και λιγότερο συνειδητοποιείτε πόσο σπασμένο είναι αυτό το ολόκληρο σύστημα.

Θέλω να το μοιραστώ μαζί σας εδώ, καθώς νομίζω ότι είναι μια εξαιρετικά ακριβής αναπαράσταση αυτού που είδα ενώ εργαζόμουν ενεργά με τους Influencers με το InstaPy.

Επίπεδο 1: Limbo - Εάν δεν κάνετε καθόλου bot

Επίπεδο 2: Φλερτ - Όταν σας αρέσει και ακολουθείτε με μη αυτόματο τρόπο όσα περισσότερα άτομα μπορείτε να τα κάνετε να σας ακολουθήσουν / σας αρέσουν οι αναρτήσεις σας

Επίπεδο 3: Συνωμοσία - όταν συμμετέχετε σε μια ομάδα Telegram για να σας αρέσει και να σχολιάζετε 10 φωτογραφίες, έτσι τα επόμενα 10 άτομα θα αρέσουν και θα σχολιάσουν τη φωτογραφία σας

Επίπεδο 4: Απιστία - Όταν χρησιμοποιείτε έναν εικονικό βοηθό χαμηλού κόστους για να σας αρέσει και να ακολουθείτε εκ μέρους σας

Επίπεδο 5: Λαγνεία - Όταν χρησιμοποιείτε ένα bot για να σας αρέσουν και να μην λαμβάνετε επιστροφή χρημάτων (αλλά δεν πληρώνετε για αυτό - για παράδειγμα, μια επέκταση Chrome)

Επίπεδο 6: Promiscuity - Όταν χρησιμοποιείτε ένα bot για να δώσετε 50+ likes για να λάβετε 50+ likes, αλλά δεν πληρώνετε για αυτό - για παράδειγμα, μια επέκταση Chrome

Επίπεδο 7: Avarice ή Extreme Greed - Όταν χρησιμοποιείτε ένα bot για να σας αρέσει / ακολουθείτε / σχολιάζετε μεταξύ 200-700 φωτογραφιών, αγνοώντας την πιθανότητα να απαγορευτείτε

Επίπεδο 8: Πορνεία - Όταν πληρώνετε μια άγνωστη υπηρεσία τρίτου μέρους για να συμμετέχετε σε αυτοματοποιημένες αμοιβαίες επισημάνσεις "μου αρέσει / ακολουθούν", αλλά χρησιμοποιούν τον λογαριασμό σας για να τους αρέσει / να ακολουθούν

Επίπεδο 9: Απάτη / αίρεση - Όταν αγοράζετε οπαδούς και συμπαθείς και προσπαθείτε να πουλήσετε τις μάρκες σας ως επιρροή

Το επίπεδο του botting στα κοινωνικά μέσα είναι τόσο διαδεδομένο που αν δεν κάνετε bot, θα κολλήσετε στο επίπεδο 1, Limbo , χωρίς ανάπτυξη οπαδών και χαμηλή αφοσίωση σε σχέση με τους συνομηλίκους σας.

Στην οικονομική θεωρία, αυτό είναι γνωστό ως δίλημμα κρατουμένου και παιχνίδι μηδενικού αθροίσματος . Εάν δεν κάνω bot και εσείς bot, κερδίζετε. Αν δεν κάνετε bot και I bot, κερδίζω. Εάν κανείς δεν κάνει bots, όλοι κερδίζουν. Αλλά επειδή δεν υπάρχει κίνητρο για όλους να μην κάνουν bot, όλοι κάνουν bots, οπότε κανείς δεν κερδίζει.

Γνωρίστε αυτό και μην ξεχνάτε ποτέ τις επιπτώσεις που έχει όλα αυτά τα εργαλεία στα μέσα κοινωνικής δικτύωσης.

Θέλουμε να αποφύγουμε να ασχοληθούμε με ηθικές επιπτώσεις και να συνεχίσουμε να δουλεύουμε σε ένα πρόγραμμα αυτοματισμού εδώ Γι 'αυτό θα δημιουργήσουμε ένα απλό σενάριο εκκαθάρισης καταλόγου που θα σας βοηθήσει να οργανώσετε τους ακατάστατους φακέλους σας.

Δημιουργία σεναρίου καθαρισμού καταλόγου

Θέλουμε τώρα να δούμε ένα αρκετά απλό σενάριο. Καθαρίζει αυτόματα έναν δεδομένο κατάλογο μετακινώντας αυτά τα αρχεία σε αντίστοιχους φακέλους με βάση την επέκταση αρχείου.

Το μόνο που θέλουμε να κάνουμε είναι αυτό:

Ρύθμιση της ανάλυσης Argument

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.

Αν έχετε ερωτήσεις ή σχόλια, μη διστάσετε να επικοινωνήσετε μαζί μας στο Twitter ή απευθείας στην ενότητα συζήτησης του μαθήματος;