Preuzmite i sačuvajte EnlighterJS kod sa WordPress stranica sa wordpress2code.py

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:

  1. Preuzimanje HTML stranice
    Koristeći biblioteku requests, skripta preuzima sadržaj stranice sa zadanog URL-a i čuva ga lokalno u privremeni .html fajl.
  2. Izdvajanje koda iz EnlighterJS blokova
    Kroz biblioteku BeautifulSoup pretražuje HTML i pronalazi sve <pre> tagove sa klasama EnlighterJS, enlighterjs ili EnlighterJSRAW.
    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 poput program01.py.
  3. 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 imenima program01.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:

JezikEkstenzija
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()

By Abel

Leave a Reply

Your email address will not be published. Required fields are marked *