U svetu razvoja softvera često nailazimo na korisne tutorijale, primere koda ili skripte objavljene na WordPress blogovima. Iako je moguće ručno kopirati kod iz stranica, to može biti naporno i sklono greškama, posebno kada stranica sadrži više blokova koda u različitim programskim jezicima.
Da bismo rešili ovaj problem, napravili smo wordpress2code.py
, jednostavan Python alat koji automatski preuzima HTML sa WordPress stranice i izdvaja sve EnlighterJS blokove koda u odgovarajuće fajlove.
Kako funkcioniše
Program radi u tri jednostavna koraka:
- Preuzimanje HTML stranice
Koristeći bibliotekurequests
, skripta preuzima sadržaj stranice sa zadanog URL-a i čuva ga lokalno u privremeni.html
fajl. - Izdvajanje koda iz EnlighterJS blokova
Kroz bibliotekuBeautifulSoup
pretražuje HTML i pronalazi sve<pre>
tagove sa klasamaEnlighterJS
,enlighterjs
iliEnlighterJSRAW
.
Za svaki blok:- Ako prva linija počinje sa
#
i sadrži tačku, koristi se kao ime fajla. - Ako nema imena, skripta određuje ekstenziju prema programskom jeziku (Python →
.py
, JavaScript →.js
, Bash →.sh
, itd.) i generiše automatsko ime poputprogram01.py
.
- Ako prva linija počinje sa
- Organizovanje koda u folder
Svi izdvojeni fajlovi se smeštaju u folder sa nazivom stranice, tako da je lako organizovati preuzete skripte. Na kraju, privremeni HTML fajl se briše.
Primer korišćenja
python3 wordpress2code.py https://primer-blog.com/post/tutorial
Skripta će:
- Preuzeti HTML stranice,
- Izdvojiti sve blokove koda,
- Sačuvati ih u folder
tutorial/
sa imenimaprogram01.py
,program02.js
itd., - Obrisan privremeni HTML fajl.
Prednosti
- 🚀 Brzo i automatski: više ne morate ručno kopirati kod sa stranica.
- 🗂️ Organizovano: svaki kod ide u poseban fajl sa odgovarajućom ekstenzijom.
- 🛠️ Fleksibilno: podržava više programskih jezika i može se lako proširiti.
- 🧹 Čisto: privremeni fajl se automatski briše nakon ekstrakcije.
Podrška za jezike
wordpress2code.py
automatski prepoznaje najčešće jezike u EnlighterJS blokovima:
Jezik | Ekstenzija |
---|---|
Python | .py |
HTML | .html |
CSS | .css |
JavaScript | .js |
Bash | .sh |
C++ | .cpp |
JSON | .json |
XML | .xml |
PHP | .php |
Ostali | .txt |
wordpress2code.py
je jednostavan, ali moćan alat za programere, nastavnike i sve koji žele da brzo preuzmu i organizuju kod sa WordPress tutorijala ili blogova.
Ako redovno koristite WordPress tutorijale i želite da uštedite vreme pri kopiranju i organizaciji koda, ovo je skripta koju svakako vredi probati.
Instalacija potrebnih zavisnosti:
pip install requests beautifulsoup4
Programski kod za wordpress2code.py
#wordpress2code.py #instalacija potrebnih zavisnosti: pip install requests beautifulsoup4 # Python alat koji automatski preuzima HTML sa WordPress stranice i izdvaja sve # EnlighterJS blokove koda u odgovarajuće fajlove. # Svi izdvojeni fajlovi se smeštaju u folder sa nazivom stranice. #!/usr/bin/env python3 import sys import os import requests from bs4 import BeautifulSoup from urllib.parse import urlparse # ---------------------- Funkcije ---------------------- def download_html(url, output_file): """Preuzmi HTML sa URL-a i sačuvaj lokalno""" try: print(f"📥 Preuzimam: {url}") response = requests.get(url) response.raise_for_status() with open(output_file, "w", encoding="utf-8") as f: f.write(response.text) print(f"✅ Stranica sačuvana kao {output_file}") except requests.exceptions.RequestException as e: print(f"❌ Greška pri preuzimanju: {e}") sys.exit(1) def get_language(block): """Vrati ekstenziju na osnovu jezika u EnlighterJS atributima""" lang = block.get("data-enlighter-language", "").strip().lower() if not lang: # ako nema data-enlighter-language, pokušaj iz class atributa classes = block.get("class", []) for c in classes: c = c.lower() if c in ["python", "html", "css", "javascript", "bash", "cpp"]: lang = c break # mapiranje jezika → ekstenzije ext_map = { "python": "py", "html": "html", "css": "css", "javascript": "js", "bash": "sh", "cpp": "cpp", "c++": "cpp", "json": "json", "xml": "xml", "php": "php", } return ext_map.get(lang, "txt") def extract_enlighter_code(html_file, base_name): """Izdvoji sve EnlighterJS blokove i sačuvaj ih""" with open(html_file, "r", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser") # Pronađi sve varijante EnlighterJS blokova code_blocks = soup.find_all("pre", class_=["EnlighterJS", "enlighterjs", "EnlighterJSRAW"]) if not code_blocks: print("⚠️ Nema pronađenih EnlighterJS kod blokova.") return # Folder za kodove code_folder = os.path.splitext(base_name)[0] os.makedirs(code_folder, exist_ok=True) count = 0 for i, block in enumerate(code_blocks, start=1): code_text = block.get_text().strip() if not code_text: continue # Proveri prvu liniju — ako počinje sa # i ima tačku (ime fajla) first_line = code_text.splitlines()[0].strip() if first_line.startswith("#") and "." in first_line: file_name = first_line.lstrip("#").strip() else: # Ako nema, koristi ekstenziju iz EnlighterJS jezika ext = get_language(block) file_name = f"program{str(i).zfill(2)}.{ext}" file_path = os.path.join(code_folder, file_name) # Zapiši kod with open(file_path, "w", encoding="utf-8") as f: f.write(code_text) count += 1 print(f"💾 Snimljen kod: {file_path}") print(f"✅ Ukupno izdvojeno {count} EnlighterJS blokova u folder: {code_folder}") # ---------------------- Glavni program ---------------------- def main(): if len(sys.argv) < 2: print("Upotreba: python3 wordpress2code.py <URL>") sys.exit(1) url = sys.argv[1] parsed = urlparse(url) base_name = parsed.path.strip("/").split("/")[-1] or "wordpress_stranica" html_file = f"{base_name}.html" # 1️⃣ Preuzmi HTML download_html(url, html_file) # 2️⃣ Izdvoji EnlighterJS kodove extract_enlighter_code(html_file, base_name) # 3️⃣ Obriši privremeni HTML fajl try: os.remove(html_file) print(f"🧹 Obrisan privremeni fajl: {html_file}") except OSError: pass if __name__ == "__main__": main()