Kuidas luua bot ja automatiseerida oma igapäevatööd

Enamikul töökohtadest on korduvad ülesanded, mida saate automatiseerida, mis vabastab osa teie väärtuslikust ajast. See muudab automatiseerimise omandamise võtmeoskuseks.

Väike rühm kvalifitseeritud automaatikainsenere ja domeenieksperte suudab automatiseerida paljude meeskondade kõige tüütumaid ülesandeid.

Selles artiklis uurime Pythoni abil töövoo automatiseerimise põhitõdesid - võimas ja hõlpsasti õpitav programmeerimiskeel. Kirjutame Pythoni abil lihtsa ja kasuliku väikese automatiseerimisskripti, mis puhastab antud kausta ja paneb kõik failid vastavalt kaustale.

Meie eesmärk ei ole alguses kirjutada täiuslikku koodi ega luua ideaalseid arhitektuure.

Samuti ei ehita me midagi "ebaseaduslikku". Selle asemel uurime, kuidas luua skripti, mis automaatselt puhastab antud kausta ja kõik selle failid.

Sisukord

  1. Automatiseerimise valdkonnad ja kust alustada
    • Lihtne automatiseerimine
    • Avalik API automatiseerimine
    • API pöördtehnoloogia
  2. Automaatika eetilised kaalutlused
  3. Kataloogide puhastuskripti loomine
  4. Täielik juhend botide loomiseks ja igapäevase töö automatiseerimiseks

Automatiseerimise valdkonnad ja kust alustada

Alustame selle määratlemisega, milliseid automaatikaid on olemas.

Automaatikakunst kehtib enamikus sektorites. Alustuseks aitab see selliste ülesannete täitmisel nagu e-posti aadresside eraldamine hulgast dokumentidest, et saaksite e-posti teel plahvatada. Või keerukamad lähenemisviisid, näiteks suurettevõtete töövoogude ja protsesside optimeerimine.

Muidugi, kui minna väikestest isiklikest skriptidest suurte automatiseerimistaristuteni, mis asendab tegelikke inimesi, kaasneb õppimise ja täiustamise protsess. Nii et vaatame, kust saate oma reisi alustada.

Lihtsad automaatika

Lihtsad automaatikad võimaldavad kiiret ja arusaadavat sisenemispunkti. See võib hõlmata väikesi sõltumatuid protsesse, nagu projektide puhastamine ja kataloogide sees olevate failide ümberstruktureerimine, või töövoo osi, nagu juba salvestatud failide automaatne suuruse muutmine.

Avalik API automaatika

Avalik API automaatika on kõige levinum automatiseerimisvorm, kuna tänapäeval pääseme enamusele funktsioonidele juurde API-de HTTP-päringute abil. Näiteks kui soovite oma isetehtud nutiaia kastmist kodus automatiseerida.

Selleks soovite kontrollida praeguse päeva ilma, et näha, kas peate kastma või tuleb vihma.

API pöördtehnoloogia

API pöördtehnoloogial põhinev automatiseerimine on tavalistes robotites ja diagrammi jaotises "Eetilised kaalutlused" allpool jaotises "Bot Imposter" tavalisem.

API-i ümberpööramise abil mõistame kasutajate rakenduste voogu. Üheks näiteks võib olla veebibrauserisse sisselogimine.

Mõeldes sisselogimis- ja autentimisprotsessi, saame selle käitumise oma skriptiga dubleerida. Seejärel saame luua oma liidese, et töötada rakendusega, isegi kui nad seda ise ei paku.

Ükskõik, millisele lähenemisviisile te lähete, kaaluge alati, kas see on seaduslik või mitte.

Sa ei taha ju end hätta ajada? ?

Eetilised kaalutlused

Keegi GitHubi poiss võttis minuga kord ühendust ja ütles mulle seda:

"Meeldimised ja kaasamine on digitaalne valuuta ja te devalveerite neid."

See jäi mulle meelde ja pani mind küsima tööriista, mille olen ehitanud just selleks otstarbeks.

Asjaolu, et neid suhtlusi ja kaasamist saab üha enam automatiseerida ja „võltsida“, põhjustab sotsiaalmeedia süsteemi moonutamist ja katkemist.

Inimesed, kes toodavad väärtuslikku ja head sisu, on teistele kasutajatele ja reklaamifirmadele nähtamatud, kui nad ei kasuta roboteid ega muid kaasamissüsteeme.

Üks mu sõber tuli Dante "Üheksa põrgu ringi" juurde, kus iga sammuga, mis läheneb sotsiaalseks mõjutajaks, saate üha vähem teadlik sellest, kui katki see süsteem tegelikult on.

Tahan seda siin ka teiega jagada, kuna arvan, et see on äärmiselt täpne esitus sellest, mida nägin, kui töötasin aktiivselt Influencersiga koos InstaPyga.

1. tase: limbo - kui te ei botitse üldse

2. tase: flirt - kui teile meeldib ja jälgite võimalikult paljusid inimesi, et nad teid jälitaks / meeldiksid teie postitustele

3. tase: vandenõu - kui liitute telegrammi grupiga, et meeldida ja kommenteerida 10 fotot, nii et teie foto meeldib ja kommenteerib järgmist 10 inimest

4. tase: truudusetus - kui kasutate oma nimel meeldimiseks ja jälgimiseks odavat virtuaalset assistenti

5. tase: iha - kui kasutate boti meeldimiste andmiseks ja te ei saa vastutasuks ühtegi meeldimist (kuid te ei maksa selle eest - näiteks Chrome'i laiendus)

6. tase: silmapaistvus - kui kasutate botile 50+ meeldimise andmiseks 50+ meeldimist, kuid te ei maksa selle eest - näiteks Chrome'i laiendus

7. tase: hirm või äärmuslik ahnus - kui kasutate botti 200–700 foto meeldimiseks / jälgimiseks / kommenteerimiseks, eirates keelatud saamise võimalust

8. tase: prostitutsioon - kui maksate tundmatule kolmanda osapoole teenusele selle eest, et osaleda automatiseeritud vastastikuses meeldimises / järgimises teie eest, kuid nad kasutavad teie kontot meeldimiseks / järgimiseks

9. tase: pettus / ketserlus - kui ostate järgijaid ja meeldimisi ning proovite end mõjutajatele brändidele müüa

Sotsiaalmeedias villimise tase on sedavõrd levinud, et kui te ei botitse, jääte 1. taseme Limbo ummikusse, jälgijate kasvu ja kaaslastega võrreldes vähese seotusega.

Majandusteoorias tuntakse seda vangide dilemma ja nullsummamänguna . Kui ma ei botiku ja sina bot, siis võidad sa. Kui te ei botitse ja mina bot, siis ma võidan. Kui keegi ei robot, siis võidavad kõik. Kuid kuna kõigil pole stiimulit mitte robotida, siis robotid kõik, nii et keegi ei võida.

Olge sellest teadlik ja ärge kunagi unustage selle tööriista mõjusid sotsiaalmeedias.

Tahame vältida eetiliste tagajärgedega tegelemist ja tegeleme siin ikkagi automaatikaprojektiga. Seetõttu loome lihtsa kataloogide puhastamise skripti, mis aitab teil oma räpaseid kaustu korrastada.

Kataloogide puhastuskripti loomine

Nüüd tahame vaadata üsna lihtsat skripti. See puhastab antud kataloogi automaatselt, teisaldades need failid faililaiendi põhjal kaustadesse.

Nii et kõik, mida me tahame teha, on see:

Argumentide parseri seadistamine

Kuna töötame operatsioonisüsteemi funktsioonidega nagu failide teisaldamine, peame osteegi importima . Lisaks sellele soovime anda kasutajale teatud kontrolli kausta puhastamise üle. Selleks kasutame argparseraamatukogu.

import os import argparse

Pärast kahe teegi importimist seadistame kõigepealt argumentide parseri. Andke igale lisatud argumendile kindlasti kirjeldus ja abitekst, et anda kasutajale trükkimisel väärtuslikku abi --help.

Meie argument nimetatakse --path. Nime ees olevad topeltkriipsud ütlevad raamatukogule, et see on valikuline argument. Vaikimisi soovime kasutada praegust kataloogi, seega määrake vaikeväärtuseks ".".

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

See lõpetab juba argumentide parsimise osa - see on üsna lihtne ja loetav, eks?

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.

Kui teil on küsimusi või tagasisidet, võtke meiega julgelt ühendust Twitteris või otse kursuse aruteluosas?